我正在学习stm32f4。
当 GPIO 端口位设置/复位寄存器(GPIOx_BSRR)仍然存在时,为什么我们还有 GPIO 端口输出数据寄存器(GPIOx_ODR)?
最佳答案
主要原因是能够原子访问 GPIO。
对于ODR
寄存器,如果你只想改变一位,那么你需要使用读 - 修改 - 写方法,这是非原子的,如果你想控制一些东西,速度慢而且不安全来自不同线程或来自中断处理程序的 GPIOS,然后可能会发生竞争条件。
BSRR 寄存器的使用是原子的,这有一些优点,您可以使用单个写入集或清除某些输出,而无需在写入之前读取和修改。它速度更快并且线程安全。
使用BSRR
的缺点仅在于您只想切换一位而不知道特定位的实际状态。 (为了保持原子性,你需要记住实际值)
关于hardware - (stm32f4) GPIOx_BSRR 与 GPIOx_ODR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48086960/