中断函数连续执行两次的解决方法

2019-07-21 00:27发布

[mw_shl_code=c,true]//¶¨ê±Æ÷4ÖD¶Ï·tÎñoˉêy
void TIM4_IRQHandler(void)
{
        if(TIM_GetITStatus(TIM4,TIM_IT_Update)==SET) //òç3öÖD¶Ï
                TIME_CYCLE++;       
        printf(" time:%d",TIME_CYCLE);
        TIM_ClearITPendingBit(TIM4,TIM_IT_Update);  //Çå3yÖD¶Ï±ê־λ
        delay_us(5);                                                                                                                                //èôûóDÑó3ù£¬ÖD¶Ï±êê¶à′2»¼°Çå3y£¬μ¼ÖÂÖD¶ÏÖ′DDá½′Î
}[/mw_shl_code]


由于硬件清除中断标识不及时,中断可能执行两次,解决方法如下:
1:添加延时,如以上代码所示;
2:将清除中断标识的函数往前放,可放在TIME_CYCLE++; 之前,即可解决


总之,要留有清除时间!
0条回答

一周热门 更多>