你所看到通常应该是这样的:
tmpcr1 &= ~(TIM_CR1_DIR | TIM_CR1_CMS); tmpcr1 |= Structure->CounterMode;ST在做库的时候,把与或操作用的很熟练。由于STM32的寄存器全是32Bit宽度,所以,一个寄存器里面包含了多个功能的标志位,这个很常见。
比如我需要设置某一个功能,其控制位为bit3-bit1 ,那么我在设置前需要去这个bit3-bit1进行置位,然后在赋值新值,除开bit3-bit1之外的值,就保持原来的值。所以, reg&=~0x00 00 00 0E 这样,就把bit3-bit1值0,其他BIT值不变其他bit&0都等于原来的值然后, reg|= 0x00 00 00 08 其他bit|0 也等于原来的值。这样就可以实现精确控制bit3-bit1
都不对,寄存器一般会先读原寄存器的值,再修改,再写入,这是最严谨的操作
比清零再写,和直接写,都严谨。
清零再写的话,如果寄存器里面本来就值,你一写原值被覆盖了,假如有的位本来有数据,你也不知道是0 是1,怎么保留原来的数据。
直接写,也无法保留寄存器中原来的数据