you 发表于 2024-3-6 21:07:50

PWMA_CCR1H设置问题!


想问一下,这个PWMA_CCR1H 上下两个u16和u8?为什么这两个不同呢?什么时候用u16或者u8呢?这里PWM_PERIOD是一个1000的数值,大于256的,按理说换算成二进制应该是高于8位的二进制,这里”PWMA_CCR1L = (u16)(PWM_PERIOD)“是表示PWMA_CCR1L“自动”取PWM_PERIOD(即1000)二进制的低8位吗?感谢大佬们帮我答疑解惑!

xxkj2010 发表于 2024-3-6 21:32:36

应该是u8吧,不过用u16也不会出问题,反正PWM_PERIOD>>8也 是一个8位值。

王昱顺 发表于 2024-3-7 08:51:20

本帖最后由 王昱顺 于 2024-3-7 09:24 编辑

其实只用一个(u8)即可,因为这里面的寄存器是8位的。
这个强制类型转换其实是用来防止编译器给数据优化没了
举个实际的例子。读一个数据寄存器的高八位和低八位时候
建议这么写 result=((u16)dath<<8)|(u16)datl;
可以保证往高位移位的时候数据不被消除掉

_奶咖君_ 发表于 2024-3-7 09:18:10

王昱顺 发表于 2024-3-7 08:51
其实只用一个(u8)即可,因为这里面的寄存器是8位的。
这个强制类型转换其实是用来防止编译器给数据优化没了 ...

啊 是先移位再强转么0.0
我一直都是这样写的{:4_167:}
result=((u16)dath<<8) | (u16)datl;

梁工 发表于 2024-3-7 10:05:46

u16是错误的,应该用u8。

xxkj2010 发表于 2024-3-7 11:01:27

直接用PWMA_CCR1=PWM_PERIOD,可以吗?
页: [1]
查看完整版本: PWMA_CCR1H设置问题!