论坛元老
 
- 积分
- 3347
- 金钱
- 3347
- 注册时间
- 2013-4-10
- 在线时间
- 333 小时
|
发表于 2016-1-27 09:40:40
|
显示全部楼层
本帖最后由 likunxue 于 2016-1-27 14:37 编辑
SPI2->CR1&=0XFFC7; 这一句 按2进制展开, 0XFFC7 --> 1111 ,1111,11000111 意思是把 D3,D4,D5位清零 (0与任何数相与都等于0)
SPI2->CR1|=SPI_BaudRatePrescaler; 这里是把 SPI_BaudRatePrescaler 的值与 SPI2->CR1中的值按2进制的方式相加, (0与1相或等于1 , 1与任何数相或都是1)
哪么,如果 SPI_BaudRatePrescaler; 的值为0x038 二进制数为 00111000 与 1111 ,1111,11000111 相或后结果是 1111 1111 1111 1111 -> 0XFFFF;
这种操作,常用于修改指定寄存器中的某一个位或几个位
以下操作还可以更直观一点
如需要把 SPI2->CR1中的D3,D4,D5位的值改为 D3 = 0, D4=1,D5 =1; 又不能改变其它的位的状态
SPI2->CR1 &= ~(7<<3); //先清除原先的设置
SPI2->CR1 |= 3<<4; //更新D4,D5为1
|
|