stm32的系统时钟初始化中的使用外部晶振的话要对CR置1,为什么是要RCC->CR|=0X00010000; 这样赋值的

为什么不是RCC->CR = 0X00010000; 而要RCC->CR |= 0X00010000; STM32菜鸟,刚开始看,求各位大哥赐教

RCC->CR |= 0X00010000; 相当于是RCC->CR = RCC->CR | 0X00010000;
也就是将RCC->CR原来的值读取出来,然后和0X00010000进行位或,结果重新赋给RCC->CR。
其作用是只修改了RCC->CR中对应的bit位,即bit16置为1,其他位保持原值不变。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-07-02
如果是RCC->CR = 0X00010000,这样虽然对那个位设置为1,但是其他位都被清零了,这样你的设置还算正确吗?如果用RCC->CR |= 0X00010000,这是逻辑OR操作,把对应的位设置1但没有影响其他位,这算不算正确?
举个例子,假设一个8位变量Z=0x35,现在要把最高位设置为1,那么结果X应该是0xB5,如果你只是简单的Z=0x80的话,那结果就是Z真的变成0x80了;但如果是Z|=0x80,那就得到正确的结果。本回答被提问者采纳
第2个回答  2013-02-01
因为你开启外部时钟不能影响到其他设置。用赋值改变整个寄存器的值,用“与”只改变该位的值。当然你也可以这么写RCC->CR=1<<16;
相似回答