PWMA_CCR1H设置问题!
想问一下,这个PWMA_CCR1H 上下两个u16和u8?为什么这两个不同呢?什么时候用u16或者u8呢?这里PWM_PERIOD是一个1000的数值,大于256的,按理说换算成二进制应该是高于8位的二进制,这里”PWMA_CCR1L = (u16)(PWM_PERIOD)“是表示PWMA_CCR1L“自动”取PWM_PERIOD(即1000)二进制的低8位吗?感谢大佬们帮我答疑解惑! 应该是u8吧,不过用u16也不会出问题,反正PWM_PERIOD>>8也 是一个8位值。 本帖最后由 王昱顺 于 2024-3-7 09:24 编辑
其实只用一个(u8)即可,因为这里面的寄存器是8位的。
这个强制类型转换其实是用来防止编译器给数据优化没了
举个实际的例子。读一个数据寄存器的高八位和低八位时候
建议这么写 result=((u16)dath<<8)|(u16)datl;
可以保证往高位移位的时候数据不被消除掉
王昱顺 发表于 2024-3-7 08:51
其实只用一个(u8)即可,因为这里面的寄存器是8位的。
这个强制类型转换其实是用来防止编译器给数据优化没了 ...
啊 是先移位再强转么0.0
我一直都是这样写的{:4_167:}
result=((u16)dath<<8) | (u16)datl;
u16是错误的,应该用u8。 直接用PWMA_CCR1=PWM_PERIOD,可以吗?
页:
[1]