news 2026/6/11 2:51:06

定时中断进不来?别只怪 Prescaler,看看 Counter Mode

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
定时中断进不来?别只怪 Prescaler,看看 Counter Mode

摘要:TIM 配置 1ms 中断,示波器测出来却是 1.024ms?或者中断偶尔丢失?不是 SystemCoreClock 算错,而是Counter Mode(计数模式)​ 与Center-Aligned(中心对齐)​ 配置导致的隐性误差。本文还原 TIM 中断的真实时序。


一、问题描述(现象)

**TIM 配置 1ms 进一次中断;

用 IO 翻转测周期,发现有时 1ms,有时 2ms;

或者在主循环中加了一句延时,中断就不准了。**

很多工程师的排查方向是:

  1. SystemCoreClock不对?

  2. Prescaler算错了?

  3. 中断里代码太多?


二、原理分析

1. 物理模型

TIM 中断触发链:

CLK -> PSC -> CNT -> ARR -> Update Event -> IRQ

2. 核心参数

  • Prescaler (PSC):预分频器。

  • ARR:自动重装值。

  • Counter Mode:向上 / 向下 / 中心对齐。

3. 反直觉真相

“向上计数”和“中心对齐”的 ARR 含义完全不同。

  • Up Counting(向上)

    CNT 从 0 数到 ARR,溢出产生中断。

    实际周期 =(ARR + 1)个计数周期。

  • Center-Aligned(中心对齐)

    CNT 从 0 → ARR → 0。

    实际周期 =(2 × ARR)个计数周期。

如果你把 Center-Aligned 当 Up 来配,定时直接翻倍。


三、工程级解决方案

方案 1:标准 1ms 定时配置(STM32 @ 72MHz)

向上计数模式(最常用):

// 72MHz / 72 = 1MHz (1us) htim.Init.Prescaler = 72 - 1; // 1000 次 = 1ms htim.Init.Period = 1000 - 1; htim.Init.CounterMode = TIM_COUNTERMODE_UP; HAL_TIM_Base_Init(&htim);

方案 2:避免中断里“堵车”

不要在 TIM 中断里做这些事:

  • printf

  • HAL_Delay

  • 复杂运算

正确做法:

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { // 只做标记 g_tim_flag = 1; }

方案 3:Center-Aligned 的正确打开方式

如果必须用中心对齐(如 PWM 对称输出):

htim.Init.CounterMode = TIM_COUNTERMODE_CENTERALIGNED1; htim.Init.Period = 500 - 1; // 注意:ARR 要减半

四、选型避坑建议

  1. HAL 库的坑

    • __HAL_TIM_SET_AUTORELOAD()默认不生成 Update 事件,可能导致第一次中断延迟。

  2. 优先级

    • TIM 中断优先级不要设太低,防止被 SPI/DMA 长时间抢占。

  3. 不要在中断里清 UIF

    • HAL 会自动清,手动清可能会丢失下一次中断。


五、总结 Checklist

  • [ ] 是否确认了 Counter Mode(Up / Center)?

  • [ ] 向上计数时,ARR 是否减了 1?

  • [ ] 中断里是否只做了轻量级操作?

  • [ ] 是否避免了在中断中使用 HAL_Delay?


六、写在最后(关注我,少走弯路)

我是 gqqsherry,一个拒绝调包、专注底层逻辑的嵌入式工程师。

TIM 是基础中的基础,但越是基础的东西,坑往往越隐蔽

关注我的专栏《嵌入式底层避坑指南》,至此《TIM 底层避坑指南》系列正式完结

接下来我们将开启电源管理底层避坑指南

👉新系列预告:《LDO 啸叫怎么来的?别只换电容,看看环路稳定性与 ESR》


原创文章,转载请注明出处。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/11 2:49:20

一键下载全网视频:VideoDownloadHelper终极使用指南

一键下载全网视频:VideoDownloadHelper终极使用指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否曾经遇到过想要保存网络…

作者头像 李华
网站建设 2026/6/11 2:43:00

Moneta Markets亿汇:“应用软件股遭遇AI再定价”

Five9和AppLovin等应用软件股票下跌,市场在新一轮AI模型发布后重新评估软件企业的竞争格局和估值支撑,Moneta Markets亿汇表示,AI能力快速迭代正在迫使投资者重新区分受益者与被替代者。报道提到,AI模型在知识工作和编程任务上的能…

作者头像 李华
网站建设 2026/6/11 2:37:06

2000年中国陆地250米级土地覆盖栅格数据(兼容GLC2000标准)

本文还有配套的精品资源,点击获取 简介:2000年前后中国全境陆域范围的土地覆盖分类结果,空间精度达250米,以GeoTIFF格式提供,内嵌地理参考信息(含.tfw、.aux.xml)、金字塔文件(.o…

作者头像 李华