STM32通用IO 寄存器
一、端口配置寄存器 CRH、CRL
端口配置寄存器CRH和CRL用来配置IO口的工作模式
寄存器每四个位为一组用来一个IO的工作模式
IO工作模式 8种
输入模式:模拟输入、浮空输入、 上拉/下拉输入模式、保留
输出模式:推挽输出、开漏输出、复用功能推挽输出,复用功能开漏输出
1、MODE
每组的低两位是MODE位用来决定IO口输出还是输入,以及端口数据输出的速度,在这两位都为0的时候IO为输入模式,其他情况均为输出模式
2、CNF
每组的高两位是CNF位用来配置IO的工作方式
二、数据寄存器 ODR、IDR
只用低16位高16位保留,用来控制IO的输出以及检测IO的输入
1、ODR
输出数据寄存器,用来控制IO口数据的输出
配置IO口数据输出主要是通过字节操作用来对整个GPIOX口来控制
Eg:GPIOB->ODR |= 0x01;//将GPIOB.0引脚的电平输出为高电平
2、IDR
输入数据寄存器,用来检测IO口数据的输入
这些位为只读并且这些位只能以字(16位)的格式输出,
GPIOA->IDR&0x0001即为PA1的电平状态
三、置位/复位寄存器 BSRR
1、BSRR
(1)BSRR是用来做IO口输出的寄存器
(2)其又被叫做端口位设置/清除寄存器
(3)高16位输出低电平低16位输出高电平
四、复位寄存器 BRR
1、BRR
(1)用来清除IO口输出
(2)BRR寄存器叫做端口清除寄存器
(3)寄存器的高16位被保留,仅低16位被拿来使用,16位分别对应相对的IO口
五、锁存寄存器 LCKR
1、LCKR
六、ODR、BSRR、BRR之间的联系与区别
通过两个问题说明
既然ODR寄存器既可以输出高电平也可以输出低电平那么为什么还需要BSRR和BRR呢?
我们用ODR来进行输出会有被中断打断的风险,而用BSRR和BRR寄存器输出就没有被中断打断的风险。
为什么BSRR寄存器既可以输出也可以清除还要使用BRR寄存器呢?
首先要明白,BRR寄存器位16位分别对16位IO口输出的电平进行擦除
如果我们要用BSRR的高16位进行擦出比较麻烦
那么BSRR看起来就没有什么作用的,因为ODR可以输出高电平而BRR可以清除高电平
实则不然,当我们需要同时对不同的IO口进行输出高低电平的时候我们就会发现,如果不用BSRR寄存器的话,只能分成两步输出,这样达不到我们的目的
总结
寄存器使用位数 | 寄存器名称 |
---|---|
32 | CRH、CRL、BSRR |
16 | ODR、IDR、BRR |
17 | LCKR |