引脚的高、低电平控制,有3种方法(3个寄存器)
分别是通过GPIO的 3个 管脚控制寄存器:
- ODR寄存器, 控制管脚的高、低电平,低16位有效,写1 高电平, 写0 低电平;
- BSRR寄存器, 控制管脚的高、低电平,32位有效,低16位写1 高电平,高16位写1 低电平;
- BRR寄存器, 控制管脚的低电平,低16位有效,写1 低电平;
端口位设置/清除寄存器 Port bit set/reset register (GPIOx_BSRR)
BSRR 寄存器, 控制管脚的高、低电平,32位有效,低 16 位写 1 高电平,高 16 位写1 低电平;
BSRR 寄存器并不是直接控制引脚输出的高低电平,最终还是通过改变 ODR 寄存器来间接控制的。
BSRR 寄存器存在的必要性
如何理解「只能写入」
我之前对于「只能写入」这一说法的认识是很模糊的,但今天在 Keil 实操了一次,感觉好像理解了一些。在正点原子论坛的帖子里看到一个很形象的比喻:
BSRR里面的位相当于一个个可自动弹起的“按键”,写“1”的时候相当于按键按下,完成功能后“自动”“弹起”。
在 Keil 中进入仿真,然后顶部菜单栏选择「Peripherals」—>「System Viewer」—>「GPIO」—>「GPIOB」,打开 GPIOB 的寄存器观察窗口。
下面的动图就很好地展示了何谓「按钮」:
- 图中我手动给 BS0、BS1、BR0、BR1 置位,BS0、BS1、BR0、BR1 对应的 Value 会短暂地打勾,然后又都会很快自动恢复到未打勾状态;
- 由此同时,当 BS0、BS1 分别置位的时候,对应的 ODR0、ODR1 也会同时置位;
- 当 BR0、BR1 分别置位的时候,对应的 ODR0、ODR1 也会同时清除;