找回密码
 立即注册
查看: 645|回复: 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
  • 打卡总天数:567
  • 最近打卡:2025-06-17 07:50:02

114

主题

2028

回帖

5819

积分

论坛元老

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:500
  • 最近打卡:2025-06-17 17:14:03
已绑定手机
已实名认证

112

主题

2394

回帖

6026

积分

版主

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:463
  • 最近打卡:2025-06-17 17:53:48

33

主题

2448

回帖

5174

积分

论坛元老

积分
5174
发表于 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
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:95
  • 最近打卡:2025-06-17 10:15:05

74

主题

6094

回帖

1万

积分

超级版主

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:567
  • 最近打卡:2025-06-17 07:50:02

114

主题

2028

回帖

5819

积分

论坛元老

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-18 04:12 , Processed in 0.159435 second(s), 87 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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