(stm32f4)GPIOx_BSRR与GPIOx_ODR

问题描述 投票:2回答:1

我正在学习stm32f4。

当GPIO端口位置1 /复位寄存器(GPIOx_BSRR)仍然存在时,为什么还有GPIO端口输出数据寄存器(GPIOx_ODR)?

hardware stm32
1个回答
2
投票

主要原因是对GPIO进行原子访问。

ODR寄存器的情况下,如果你只想改变一位,那么你需要使用read - modify - write方法,这是非原子的,如果你想从不同的线程或中断处理程序控制一些GPIOS,那么它也很慢并且不安全,然后可以发生竞争条件。

BSRR寄存器的使用是原子的,这有一些优点,你可以使用单写集或清除某些输出而无需在写入之前进行读取和修改。它更快,并且是线程安全的。

使用BSRR的缺点只是你只想在不知道某个位的实际状态的情况下切换一位。 (为了保持原子性,你需要记住实际价值)

© www.soinside.com 2019 - 2024. All rights reserved.