大家要注意GD32F450和GD32F470的Timer1和Timer4
这个Timer1和Timer4除了是32位定时器, 就是这两路定时器值溢出之后有可能不会归零.如果用了CAR做重装, 重装值可能不会生效.
验证的方法很简单, 先停止定时器, 然后把CNT输入一个大于CAR的值, 启动定时器后定时器不会从0开始计数. 其他16位定时器不会这样
然后我把手上的GD32F407VKH6测了一下, 也有同样的问题 我又测了手上的STM32F407VGT6TR, 现象一样. 说不定所有CM4都有这个问题 可能是由于 32 位计数器的特殊设计导致的? 反正用这两个定时器要小心, 有可能超过重装寄存器之后不归零失控了, 我用做了pwm, 排查了很久才查出来
那么你为什么要给CNT送一个比CAR大的值?
不都是复位为0吗?
按你的做法,恐怕所有厂家的芯片都存在这问题。
我给比CAR大的值只是做验证, 因为我有个产品在现场出现了偶发的CNT比CAR大的情况, 现在我还在排查原因 稳定性设计是个大课题。自增计数>=判断终值 马性辉 发表于 2025-4-17 17:41
我给比CAR大的值只是做验证, 因为我有个产品在现场出现了偶发的CNT比CAR大的情况, 现在我还在排查原因 ...
如果真的这样,那么芯片就有严重的 bug
有没有试过别的定时器?
另外,你怎么发现 cnt 比 car 大的呢?带仿真器了?
icecut 发表于 2025-4-17 21:57
稳定性设计是个大课题。自增计数>=判断终值
小i哥,
1 数字电路上, 等于判断用异或门, 单拍完成; 大于等于运算是按优先级的译码电路, 从高位往低位逐位比较,逻辑量大.
2 比较值是双缓冲的, 用户写入的值不会立即生效, 要在溢出事件的时候生效, 双线程的都要这么处理. FAE William1994 发表于 2025-4-18 07:55
小i哥,
1 数字电路上, 等于判断用异或门, 单拍完成; 大于等于运算是按优先级的译码电路, 从高位往低位逐 ...
你不要纠结这几个门电路。 多占不了多少空间的。
:(a > b) 这样的写法在综合时,会自动转成一套组合逻辑门,不涉及任何时序逻辑或寄存器。
用户写入的值不立即生效。这个是可以理解的。当然,他们故意写错误的数据,也是不严谨的。就是遇到这么个坑不容易找的原因。 这个点可要注意一下。
我们的MCU项目也是使用的这颗料
页:
[1]