hardware - (stm32f4) GPIOx_BSRR 与 GPIOx_ODR

标签 hardware stm32

我正在学习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/

相关文章:

language-agnostic - 内存访问的成本是多少?

vhdl - modelsim 说 : "near " )": (vcom-1576) expecting IDENTIFIER." while compiling

c# - 正确的投票方式?

memory-management - 页大小和页表条目大小有什么区别

c++ - 较新版本的 GCC 抛出 reinterpret_cast 错误

timer - stm32如何用定时器使脉冲递增/递减

opengl - 以编程方式确定硬件是否支持 OpenGL 函数

arm - 在 cortex-m3 上读取 64 位 volatile 变量

c - STM32F1 CANbus - 接收不工作

c - ST32 HAL SPI 从机中断溢出