stm32 位操作为什么用或等于等起他复合赋值语句

最近想学stm32,看到一些程序赋值语句是类似这个样子的,RCC->APB2ENR|=1<<2.这里为什么用或等于啊?为什么不直接用=赋值啊?既然用或等于,那么RCC->APB2ENR默认值是多少啊?请高手指导,谢谢啦!

大家学的一些低端的单片机普遍都是:复位了,寄存器的值一般都是0,很多情况下直接用=,但是对于高端点的单片机,复位后值就不一定是0了,复位后的值能支持单片机正常工作,因为寄存器一般都是16位,32位,超多功能设定,若是不清楚具体到每一位的值,直接用=,那么之前的值均被更改,单片机反而不工作,为了不影响其他的位的值,所以用了|=。
当然,若十分熟悉,也是可以用的,就比如,51单片机,初始化定时器0,TMOD = 0X01;但当需要在其他地方用到定时器1时,你是否会TMOD = 0X10;呢,那就错了,这样定时器0方式被更改,可能不工作了。于是用TMOD |= 0X10;最终TMOD = 0X11;所以建议都用|=的方式。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-28
默认值你需要看数据手册。
这样操作是为了修改某一位,看起来比较明显
直接用=赋值也可以,但是不能够看到是哪一位被修改了。
第2个回答  2012-07-28
用或语句主要是为了不影响寄存器的其它位。