编写中断服务函数时,经常使用到2个函数:
第一个是判断某个中断是否发生。
另一个是清除某个中断标志位。
需要注意的是:中断事件发生以后,CPU的主权交给了中断控制器,进入中断执行中断服务函数,执行完中断程序后,在将CPU的主权交给主程序。在退出中断前要清除中断标志位,否则在退出中断后,标志位没有清除。会再一次进入中断,一直循环,所以:要清除中断标志位。
void EXTI3_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line3)!=RESET)//判断某个线上的中断是否发生
{
//中断逻辑…
EXTI_ClearITPendingBit(EXTI_Line3); //清除 LINE 上的中断标志位
}
}