STM32 既然可以直接操作ODR,为什么还要设置BSRR和BRR?

如果你想改变某个位的状态而不影响其他的,那用BSRR或BRR就很容易了。直接操作ODR需要“读-操作-写”的过程,速度反而变慢了。

比如说让PA1、PA3、PA7清零而不影响其他位的状态,那就是:

GPIOA->BRR=PA1|PA3|PA7;

你要用ODR来操作的话,那就变成这样了:

GPIOA->ODR&=~(PA1|PA3|PA7);

虽然C的语句都只有一个,但你看汇编代码,就发现使用BRR比ODR快的多。