打印

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

[复制链接]
1726|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
马性辉|  楼主 | 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 位计数器的特殊设计导致的?

使用特权

评论回复
5
sagas11| | 2025-4-17 11:14 | 只看该作者
反正用这两个定时器要小心, 有可能超过重装寄存器之后不归零失控了, 我用做了pwm, 排查了很久才查出来

使用特权

评论回复
6
玄德| | 2025-4-17 13:38 | 只看该作者

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




使用特权

评论回复
7
马性辉|  楼主 | 2025-4-17 17:41 | 只看该作者
我给比CAR大的值只是做验证, 因为我有个产品在现场出现了偶发的CNT比CAR大的情况, 现在我还在排查原因

使用特权

评论回复
8
丙丁先生| | 2025-4-17 19:59 | 只看该作者
感谢分享。

使用特权

评论回复
9
icecut| | 2025-4-17 21:57 | 只看该作者
稳定性设计是个大课题。自增计数>=判断终值

使用特权

评论回复
10
玄德| | 2025-4-17 22:19 | 只看该作者
马性辉 发表于 2025-4-17 17:41
我给比CAR大的值只是做验证, 因为我有个产品在现场出现了偶发的CNT比CAR大的情况, 现在我还在排查原因 ...


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



使用特权

评论回复
11
William1994| | 2025-4-18 07:55 | 只看该作者
icecut 发表于 2025-4-17 21:57
稳定性设计是个大课题。自增计数>=判断终值

小i哥,
1 数字电路上, 等于判断用异或门, 单拍完成; 大于等于运算是按优先级的译码电路, 从高位往低位逐位比较,逻辑量大.
2 比较值是双缓冲的, 用户写入的值不会立即生效, 要在溢出事件的时候生效, 双线程的都要这么处理.

使用特权

评论回复
12
xionghaoyun| | 2025-4-18 11:42 | 只看该作者
FAE

使用特权

评论回复
13
icecut| | 2025-4-18 21:22 | 只看该作者
William1994 发表于 2025-4-18 07:55
小i哥,
1 数字电路上, 等于判断用异或门, 单拍完成; 大于等于运算是按优先级的译码电路, 从高位往低位逐 ...

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

用户写入的值不立即生效。这个是可以理解的。当然,他们故意写错误的数据,也是不严谨的。就是遇到这么个坑不容易找的原因。

使用特权

评论回复
14
神话编织者| | 2025-4-20 21:19 | 只看该作者
这个点可要注意一下。
我们的MCU项目也是使用的这颗料

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

17

帖子

0

粉丝