STM32G474 HRTIM 推挽模式下 关闭死区 在比较寄存器较小的情况下,存在输出脉宽直接到100%
最近在做单极倍频SPWM
stm32G474RBT3的flash擦除寿命是多少?
stm32g431rbt怎么显示汉字
F103和G474的180°移相區別
STM32G431内部运放1和2输出连接的ADC为什么不是OPAMP?
STM32G431K COMP 比较器下降沿中断
STSPIN32G4内部驱动电压输出问题
STM32G431 用MCSDK5.4.8 进行PMSM永磁同步电机FOC控制,转速上升到某一值(3500rpm)无法继续上升,上不去
STM32G431CBU6 驱动STDRIVE101,自己配置的PWM互补输出,死区时间为500ns,为什么STDRIVE101的报警灯会亮,CP接10K接地了,scref接的+5V
微信公众号
手机版
[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; //成功
这是为啥?😄
不支持位操作?