找回密码
 立即注册
查看: 515|回复: 6

PWMA_CCR1H设置问题!

[复制链接]

2

主题

4

回帖

34

积分

新手上路

积分
34
发表于 2024-3-6 21:07:50 | 显示全部楼层 |阅读模式
截图202403062102344990.jpg
想问一下,这个PWMA_CCR1H 上下两个u16和u8?为什么这两个不同呢?什么时候用u16或者u8呢?这里PWM_PERIOD是一个1000的数值,大于256的,按理说换算成二进制应该是高于8位的二进制,这里”PWMA_CCR1L = (u16)(PWM_PERIOD)“是表示PWMA_CCR1L“自动”取PWM_PERIOD(即1000)二进制的低8位吗?感谢大佬们帮我答疑解惑!
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:522
  • 最近打卡:2025-05-03 13:32:44

109

主题

1900

回帖

5218

积分

论坛元老

积分
5218
发表于 2024-3-6 21:32:36 | 显示全部楼层
应该是u8吧,不过用u16也不会出问题,反正PWM_PERIOD>>8也 是一个8位值。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:460
  • 最近打卡:2025-05-03 07:38:35
已绑定手机
已实名认证

110

主题

2224

回帖

5470

积分

版主

积分
5470
发表于 2024-3-7 08:51:20 | 显示全部楼层
本帖最后由 王昱顺 于 2024-3-7 09:24 编辑

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-3-7 09:18:10 | 显示全部楼层
王*** 发表于 2024-3-7 08:51
其实只用一个(u8)即可,因为这里面的寄存器是8位的。
这个强制类型转换其实是用来防止编译器给数据优化没了 ...

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

点评

写错了,我这就改  发表于 2024-3-7 09:23
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12081
发表于 2024-3-7 10:05:46 | 显示全部楼层
u16是错误的,应该用u8。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:522
  • 最近打卡:2025-05-03 13:32:44

109

主题

1900

回帖

5218

积分

论坛元老

积分
5218
发表于 2024-3-7 11:01:27 | 显示全部楼层
直接用PWMA_CCR1=PWM_PERIOD,可以吗?
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-3 15:11 , Processed in 0.364872 second(s), 80 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表