[STM32F7] 毫秒延时函数计时不准

[复制链接]
143|29
uiint 发表于 2026-10-20 13:20 | 显示全部楼层
用逻辑分析仪测量GPIO翻转是正确的方法。
macpherson 发表于 2026-10-20 14:12 | 显示全部楼层
将延时函数定义为 static inline,减少函数调用栈开销
wengh2016 发表于 2026-10-20 16:58 | 显示全部楼层
延时函数如何避免中断干扰              
时光迷宫 发表于 2026-10-20 18:21 | 显示全部楼层
检查了编译器优化和GPIO翻转指令,发现确实存在编译器优化导致循环退出过快的问题。尝试将优化等级降低到-O2,并在GPIO翻转指令前加入volatile关键字,延时精度有明显提升。另外,在逻辑分析仪上确认采样率与定时器计数频率匹配,问题解决。
i1mcu 发表于 2026-10-20 19:12 | 显示全部楼层
TIM2的PSC值如何精确计算              
yorkbarney 发表于 2026-10-20 21:03 | 显示全部楼层
空循环次数需要怎么校准              
biechedan 发表于 2026-10-20 22:07 | 显示全部楼层
TIM2的时钟源和预分频器配置正确
遗忘领域 发表于 2026-10-22 16:13 | 显示全部楼层
看看是否CPU频率波动影响TIM2计数,或者GPIO翻转和逻辑分析仪同步问题。
幸福小强 发表于 2026-10-23 16:02 | 显示全部楼层
普通 sleep/delay 不是精准定时器,只是 至少等待这么久,本身就自带误差;系统调度、线程抢占、时钟源都会进一步放大误差。
亚瑟 发表于 2026-10-23 16:25 | 显示全部楼层
检查代码,发现循环判断条件 `(TIM2->CNT - t_start) < wait_time_us` 可能因浮点运算精度问题导致误差。改为 `(TIM2->CNT - t_start) <= wait_time_us`,并确保使用 32 位无符号整数运算避免溢出。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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