STM32 定时器比较中断和更新中断有什么区别?

STM32 · 5 浏览
STM32 定时器比较中断和更新中断有什么区别?

回答(4)

如果追求高精度,建议用比较中断+DMA,避免中断响应延迟,更新中断适合低优先级任务。
硬件工程师阿杰 · 2026-08-18
实际调试中,比较中断容易漏触发,记得检查CCxIF标志是否被硬件自动清除,必要时手动清。
码农小刘 · 2026-08-18
补充:更新中断是周期性的,比较中断是事件性的。做PWM时,更新中断改频率,比较中断改占空比,别混用。
嵌入式老张 · 2026-08-18
核心区别在于触发源和用途:更新中断(UEV)在计数器溢出(向上/向下计数到边界)或软件触发时产生,代表一个完整计数周期结束,常用于定时器周期任务(如1ms调度)。比较中断(CCxIF)在计数器值等于预装载的比较寄存器(CCRx)时触发,用于精确控制输出波形(PWM占空比)或捕获外部信号。实操中,若用PWM输出,必须用比较中断(或DMA)来更新占空比,用更新中断会导致输出毛刺。若做多路延时,可共用更新中断基准,用比较中断做精确时间点。注意:更新中断会受预装载(ARPE)影响,若开启自动重装载,更新事件在重装载后发生;比较中断需注意CCxP位极性设置。代码示例: ```c // 更新中断:周期任务 void TIM2_IRQHandler(void) { if (TIM_GetITStatus(TIM2, TIM_IT_Update)) { // 1ms周期处理 TIM_ClearITPendingBit(TIM2, TIM_IT_Update); } } // 比较中断:精确触发 void TIM3_IRQHandler(void) { if (TIM_GetITStatus(TIM3, TIM_IT_CC1)) { // 在CCR1值处触发 TIM_ClearITPendingBit(TIM3, TIM_IT_CC1); } } ```
mcuku 阿沐 · 2026-08-18

🧰 配套工具

⏱️ 定时器计算器