1)不改变其他位的值的状态下,对某几位进行设置初始值
这个场景,单片机开发中经常使用,方法就是先对需要设置的位用&符号进行清零操作,然后用|操作符设定数值,比如我们经常改变GPIO的状态,可以先对寄存器的值进行清零操作
GPIOA ->CRL &= 0xFFFF FF0F; //将第4-7位清零
GPIOA ->CRL &= 0x0000 0040; //设置相应位的值,不改变其他位置的数值
2)移位操作提高代码的可读性
移位操作在单片机开发中非常重要,固件库中GPIO初始化的函数里面有一行代码
GPIOx -> BSRR = (((uint 32_t)0x01)<<pinpos); //
这个操作就是将BSRR寄存器的第pinpos位置设为1,为什么要通过左移而不是直接设定一个固定的值呢?其实这是为了提高代码的可读性以及可重用性。这行代码可以很直观明了的知道,是将第pinpos位设置为1,如果写成 BPIOx -> BSRR = 0x0030;需要你转换为二进制才能来清楚是哪位进行了置1,这样