AIGC标识 定时器中断为什么要清除中断标志位?

定时器中断为什么要清除中断标志位?
在学习STM32外部中断、定时器中断的时候,有一个知识点很多人背得熟,但写代码的时候总忽略:中断服务函数里必须手动清除中断标志位。
很多新手写中断代码,功能逻辑都写好了,下载进去程序却疯狂进中断,程序跑飞、LED乱跳,排查半天,最后发现只是少了一行清除标志位的代码。
原理简单说:
硬件产生中断事件后,硬件会把中断标志位置1,告诉内核:“有中断来了,请处理”。
CPU跳转到中断服务函数执行业务逻辑,硬件不会自动把这个标志清零。

如果不手动清除标志位:退出中断后,硬件检测到标志依旧为1,会立刻再次触发中断,程序就会反复进入同一个中断,相当于卡死在中断里面,主循环代码得不到执行。

只有调用库函数把中断挂起位清零,标志位复位,中断才算完整处理完毕,CPU才可以正常回到main主函数继续运行。

学习感悟
写嵌入式代码,不只是把功能跑通。很多坑不在业务逻辑,而在底层寄存器细节。
看起来不起眼的一行代码,漏掉之后现象很诡异,排错要花大量时间。遇到报错不要只复制粘贴解决,弄懂背后寄存器的行为,才能真正理解单片机。

posted @ 2026-09-06 13:32  Day凡梦  阅读(8)  评论(0)    收藏  举报