STM32 定时器中断为什么进不去?

STM32 · 11 浏览
配置了定时器但中断一直不触发,可能是什么原因?需不需要开启中断优先级分组?

回答(5)

中断不触发先确认中断标志位是否置位。在中断服务函数里加个调试灯,或者在线调试看UIF。如果UIF=1但进不去,说明NVIC配置有问题。注意有些系列需要先写AFIO时钟?不,定时器不用。最坑的是用CUBE生成代码,要确认MX_TIMx_Init后有没有MX_TIMx_Base_Start_IT。
嵌入式调试员王工 · 2026-08-14
我之前也遇到过,最后发现是中断服务函数写错名。标准库要写TIMx_IRQHandler,HAL要写HAL_TIM_PeriodElapsedCallback。另外检查TIM_ITConfig或HAL_TIM_Base_Start_IT有没有调用。还有,如果开了中断分组,每个中断要设置抢占优先级和子优先级,别用默认值。
单片机爱好者小张 · 2026-08-14
重点查NVIC:定时器中断通道使能了吗?中断优先级分组要在main开头配置一次,例如NVIC_PriorityGroup_2。另外确认定时器更新事件触发源,默认是溢出,PSC设太小可能淹没了中断。用调试器看TIMx->SR的UIF位,手动置1看能否跳中断。
硬件老兵李工 · 2026-08-14
先查RCC时钟开没开,尤其APB1/APB2的定时器时钟。再看TIMx->CR1的CEN是否置1,以及PSC/ARR是否写对。中断标志位UIF清了没?如果用了HAL,检查HAL_TIM_Base_Start_IT是否调用。优先级分组必须开,NVIC_Init或HAL_NVIC_SetPriorityGrouping,否则中断不响应。
嵌入式工程师阿强 · 2026-08-14
常见原因:①定时器时钟未使能 ②NVIC 中断优先级分组未配置或优先级过高 ③PSC/ARR 配置导致周期过长 ④没有调用 HAL_TIM_Base_Start_IT。逐项排查即可。
热心网友 · 2026-08-13

🧰 配套工具

⏱️ 定时器计算器