STM32F103点亮LED,3种方式

1、寄存器

1.1、开启GPIOE对应时钟

1.1.1、找到GPIOE对应时钟

在这里插入图片描述
在这里插入图片描述
打开STM32F1xx中文参考手册,找到上图可以看到GPIOE是挂在AHB的APB2上的。

1.1.2、找到对应基地址

在这里插入图片描述
在这里插入图片描述
找到时钟控制的基地址。
用宏定义定义它的地址:
在这里插入图片描述

1.1.3、找到APB2的偏移地址

在这里插入图片描述
在这里插入图片描述

找到偏移地址
宏定义它的地址
在这里插入图片描述
不能:0x40021018|=1<<6,因为编译器默认0x40021018是数字,不是地址。
必须强制转换为指针变量,然后解引,往寄存器写数。

1.1.4、编写程序开启PE5时钟

在这里插入图片描述
找到PE5的时钟使能位
开启时钟
在这里插入图片描述

1.2、配置PE5对应寄存器

1.2.1、找到对应基地址

在这里插入图片描述
宏定义地址
在这里插入图片描述

1.2.2、找到配置寄存器IOPE的所有偏移地址

在这里插入图片描述
用指针指向寄存器地址,然后宏定义它
在这里插入图片描述

1.2.3、配置CRL寄存器

在这里插入图片描述
端口5配置为:输出模式50MHz、通用推挽输出模式
在这里插入图片描述

1.3、控制ODR或BSRR和BRR寄存器点亮LED

1.3.1、控制ODR寄存器亮灭

在这里插入图片描述
程序实现亮灭
在这里插入图片描述

1.3.2、控制BSRR和BRR寄存器亮灭

BRSS
在这里插入图片描述
BRR
在这里插入图片描述
程序实现亮灭
在这里插入图片描述

2、库函数

2.1、RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)

2.1.1、2个形参

1.uint32_t 是无字符型整形
2.FunctionalState 形参可以是DISABLE或ENABLE,前者为0后者为1

2.1.2、IS_RCC_APB2_PERIPH(RCC_APB2Periph)

RCC_APB2Periph 就是时钟的基地址,比如GPIOE的基地址

2.1.3、IS_FUNCTIONAL_STATE(NewState)

NewState 是使能或关闭,1或0

2.1.4、assert_param()

指向地址内存,使能

2.1.5、RCC函数功能

开启时钟

2.2、结构体GPIO_InitTypeDef

在这里插入图片描述

2.2.1、uint16_t GPIO_Pin

在这里插入图片描述

typedef unsigned short int uint16_t;
无符号短整型,GPIO的第几位

2.2.2、GPIOSpeed_TypeDef GPIO_Speed

2.2.2.1、GPIOSpeed_TypeDef的3个成员

GPIO_Speed_10MHz = 1,
GPIO_Speed_2MHz,
GPIO_Speed_50MHz
输出时钟频率

2.2.3、GPIOMode_TypeDef GPIO_Mode

2.2.3.1、GPIOMode_TypeDef的8个成员

在这里插入图片描述
配置GPIO

2.3、GPIO_Init(GPIO_TypeDef* , GPIO_InitTypeDef* );

2个形参,第一个是PE端,第二个是结构体指针dig
功能:初始化配置端口

2.4、GPIO_SetBits(GPIO_TypeDef* , uint16_t );

2个形参,第一个是PE端,第二个是哪个口
功能:端口输出0

2.5、GPIO_ResetBits(GPIO_TypeDef* , uint16_t );

2个形参,第一个是PE端,第二个是哪个口
功能:端口输出1

2.6、点亮LED代码

在这里插入图片描述

3、位操作

3.1、开启时钟

在这里插入图片描述

3.2、配置PE5

在这里插入图片描述

3.3、宏定义位

3.3.1、找到PE5 ODR寄存器的位地址并宏定义

打开Cortex M3权威指南
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
n:第几位
GPIOE_ODR_Addr:ODR寄存器地址
BITBAND() :把PE5的位地址计算出来
MEM_ADDR():用指针指向内存内容,改变它的内容

3.3.2、用位操作点亮LED

PBout(5)=0;

4、按键控制LED亮灭

在这里插入图片描述

在这里插入图片描述

5、总结

不管是什么方式点亮LED,都需要3步
1:使能时钟。(AHB 、SPB2)
2:配置io口(CRL、CRH寄存器)
3:控制io口(ODR寄存器或BSRR和BRR寄存器)
扩展
1:读寄存器(IDR)
2:做按键输入时初始化要写一个高低电平(上拉下拉输入模式)

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dz小伟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值