大家要注意GD32F450和GD32F470的Timer1和Timer4

[复制链接]
 楼主| 马性辉 发表于 2025-4-17 09:46 | 显示全部楼层 |阅读模式
  这个Timer1和Timer4除了是32位定时器, 就是这两路定时器值溢出之后有可能不会归零.
  如果用了CAR做重装, 重装值可能不会生效.
  验证的方法很简单, 先停止定时器, 然后把CNT输入一个大于CAR的值, 启动定时器后定时器不会从0开始计数. 其他16位定时器不会这样
 楼主| 马性辉 发表于 2025-4-17 10:22 | 显示全部楼层
然后我把手上的GD32F407VKH6测了一下, 也有同样的问题
 楼主| 马性辉 发表于 2025-4-17 10:40 | 显示全部楼层
我又测了手上的STM32F407VGT6TR, 现象一样. 说不定所有CM4都有这个问题
onlycook 发表于 2025-4-17 11:02 | 显示全部楼层
可能是由于 32 位计数器的特殊设计导致的?
sagas11 发表于 2025-4-17 11:14 | 显示全部楼层
反正用这两个定时器要小心, 有可能超过重装寄存器之后不归零失控了, 我用做了pwm, 排查了很久才查出来
玄德 发表于 2025-4-17 13:38 | 显示全部楼层

那么你为什么要给CNT送一个比CAR大的值?
不都是复位为0吗?
按你的做法,恐怕所有厂家的芯片都存在这问题。




 楼主| 马性辉 发表于 2025-4-17 17:41 | 显示全部楼层
我给比CAR大的值只是做验证, 因为我有个产品在现场出现了偶发的CNT比CAR大的情况, 现在我还在排查原因
icecut 发表于 2025-4-17 21:57 | 显示全部楼层
稳定性设计是个大课题。自增计数>=判断终值
玄德 发表于 2025-4-17 22:19 | 显示全部楼层
马性辉 发表于 2025-4-17 17:41
我给比CAR大的值只是做验证, 因为我有个产品在现场出现了偶发的CNT比CAR大的情况, 现在我还在排查原因 ...


如果真的这样,那么芯片就有严重的 bug
有没有试过别的定时器?
另外,你怎么发现 cnt 比 car 大的呢?带仿真器了?



William1994 发表于 2025-4-18 07:55 | 显示全部楼层
icecut 发表于 2025-4-17 21:57
稳定性设计是个大课题。自增计数>=判断终值

小i哥,
1 数字电路上, 等于判断用异或门, 单拍完成; 大于等于运算是按优先级的译码电路, 从高位往低位逐位比较,逻辑量大.
2 比较值是双缓冲的, 用户写入的值不会立即生效, 要在溢出事件的时候生效, 双线程的都要这么处理.
xionghaoyun 发表于 2025-4-18 11:42 | 显示全部楼层
icecut 发表于 2025-4-18 21:22 | 显示全部楼层
William1994 发表于 2025-4-18 07:55
小i哥,
1 数字电路上, 等于判断用异或门, 单拍完成; 大于等于运算是按优先级的译码电路, 从高位往低位逐 ...

你不要纠结这几个门电路。 多占不了多少空间的。
:(a > b) 这样的写法在综合时,会自动转成一套组合逻辑门,不涉及任何时序逻辑或寄存器。

用户写入的值不立即生效。这个是可以理解的。当然,他们故意写错误的数据,也是不严谨的。就是遇到这么个坑不容易找的原因。
神话编织者 发表于 2025-4-20 21:19 | 显示全部楼层
这个点可要注意一下。
我们的MCU项目也是使用的这颗料
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

17

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

5

主题

17

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部