
2648797251新胜游戏公司怎么联系经理?
STM32G431内部运放1和2输出连接的ADC为什么不是OPAMP?
workbench6.3.2生成的代码,无法用pilot电机参数识别,无法通讯
stm32G474的flash模式如何判定?single bank 和dual bank
STM32G474高精度定时器HRTIM配置死区互补PWM极端输出问题
hrtim里update reset和reset update同时打开不会互相激励吗,另外为什么现在定时器周期值不用-1了
STM32G473 解除写保护失败
HRTIM 变频控制输出的第一个周期频率异常
求助:keil在debug时出现Cannot access Memory*** error 122: AGDI: memory read failed (0xF81AF008)
STM32中比较适合做FOC控制的芯片
[md]位或操作,用于对特定位置1,保留其它位,二者结合做为最终结果;
直接赋值,新值直接替换寄存器原内容。
其实 两种写法目的也不太一样,自然期待的结果也可能不同。
我查看了手册关于该寄存器的描述,是个可读写的寄存器。
不管你是基于位操作还是直接写 都是接受的,但是不同操作或手段,目的是不一样的,结果也可能不一样。
比方 你这样写 SPI3->CR2 |= 0x3 << 8;
实际上是将寄存器原来的初始值跟(0x3 << 8)相或后的值存放到寄存器;显然,这种情况下的结果跟原来的值强关联的。具体到这里,只有bit8 bit9被替换为B11了。
现在DS段共4位,当你执行这个操作后,最后DS的值可能是3,7或F呢。除非你在执行这个操作前先对DS段清零。
反过来,如果你这样写,SPI3->CR2 = 0x0300;
就是用0x0300直接覆盖寄存器原来的内容,强行替换,以前是什么值根本不关心。具体到这里,你这样操作后,DS段内容肯定是3.推荐使用cube库,这样很多细节都避免了。
使用cube对比过,单步调试对比了也,寄存器状态都是一样的。cube可以正确改写CR2的DR位,但是寄存器直接写入就不行
SPI3->CR2|=0x3<<8; //失败
SPI3->CR2=0x0300; //成功
这是为啥?😄
不支持位操作?