OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4097|回复: 2

STM32F1跑马灯位操作版本及部分知识讲解

[复制链接]

28

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2019-10-16
在线时间
18 小时
发表于 2019-10-27 21:03:21 | 显示全部楼层 |阅读模式
本帖最后由 e芯凌 于 2019-11-10 22:22 编辑

总体思路:
使能IO口时钟。调用函数RCC_APB2PeriphColckCmd();
初始化IO口模式。调用函数GPIO_Init();
操作IO口,输出高低电平。使用位带操作。
位操作原理:
          把每个比特膨胀为一个32位的字,当访问这些字的时候就达到了访问
       比特的目的,比如说BSRR寄存器有32个位,那么可以映射到32个地址
       上,我们去访问(读--写)这32个地址就达到访问32个比特的目的。
3.1.PNG
led.h代码和led.c代码可以参考我别的文章:
main.c代码:
  1. #include "stm32f10x.h"
  2. #include "delay.h"
  3. #include "led.h"

  4. int main()
  5. {
  6. delay_init();
  7. LED_Init();
  8. while(1)
  9. {
  10. PBout(5)=1;
  11. PEout(5)=1;
  12. delay_ms(500);
  13. PBout(5)=0;
  14. PEout(5)=0;
  15. delay_ms(500);

  16. }
  17. }
复制代码
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14433
金钱
14433
注册时间
2018-8-3
在线时间
1157 小时
发表于 2019-10-28 21:46:29 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2020-12-3
在线时间
1 小时
发表于 2020-12-4 16:22:07 | 显示全部楼层
本帖最后由 lmi 于 2020-12-4 16:23 编辑

@正点原子 我的就很奇怪了,直接用下面这个程序(led.h和main)下载进去灯是不亮的
//led.h
#ifndef __LED_H
#define __LED_H
void LED_Init(void); //初始化
#endif
//main
#include "led.h"
#include "delay.h"
#include "stm32f10x.h"
int main(void)
{
        Stm32_Clock_Init(9);
        delay_init(72);
        LED_Init();
        while(1)
        {
                PBout(5)=1;
                PEout(5)=1;
                delay_ms(500);
                PBout(5)=0;
                PEout(5)=0;
                delay_ms(500);
        }
}
这个程序编译是没问题的,可是下载进去灯不亮。
led.h头文件那里做一下宏定义,又可以,我很不理解,求解惑,程序如下:
//led.h
#ifndef __LED_H
#define __LED_H
#define LED0 PBout(5)
#define LED1 PEout(5)
void LED_Init(void); //初始化
#endif
//main
#include "led.h"
#include "delay.h"
#include "stm32f10x.h"
int main(void)
{
        Stm32_Clock_Init(9);
        delay_init(72);
        LED_Init();
        while(1)
        {
                LED0=1;
                LED1=1;
                delay_ms(500);
                LED0=0;
                LED1=0;
                delay_ms(500);
        }
}
这也太奇怪了吧,新手求解惑,谢谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 11:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表