马性辉 发表于 2025-4-17 09:46

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

这个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

FAE

icecut 发表于 2025-4-18 21:22

William1994 发表于 2025-4-18 07:55
小i哥,
1 数字电路上, 等于判断用异或门, 单拍完成; 大于等于运算是按优先级的译码电路, 从高位往低位逐 ...

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

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

神话编织者 发表于 2025-4-20 21:19

这个点可要注意一下。
我们的MCU项目也是使用的这颗料
页: [1]
查看完整版本: 大家要注意GD32F450和GD32F470的Timer1和Timer4