STM32 既然可以直接操作ODR,为什么还要设置BSRR和BRR?
如果你想改变某个位的状态而不影响其他的,那用BSRR或BRR就很容易了。直接操作ODR需要“读-操作-写”的过程,速度反而变慢了。
比如说让PA1、PA3、PA7清零而不影响其他位的状态,那就是:
GPIOA->BRR=PA1|PA3|PA7;
你要用ODR来操作的话,那就变成这样了:
GPIOA->ODR&=~(PA1|PA3|PA7);
虽然C的语句都只有一个,但你看汇编代码,就发现使用BRR比ODR快的多。
如果你想改变某个位的状态而不影响其他的,那用BSRR或BRR就很容易了。直接操作ODR需要“读-操作-写”的过程,速度反而变慢了。
比如说让PA1、PA3、PA7清零而不影响其他位的状态,那就是:
GPIOA->BRR=PA1|PA3|PA7;
你要用ODR来操作的话,那就变成这样了:
GPIOA->ODR&=~(PA1|PA3|PA7);
虽然C的语句都只有一个,但你看汇编代码,就发现使用BRR比ODR快的多。