打印

STM32L 外部中断问题,已解决,大家分享下。

[复制链接]
3559|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liaoyijiaren|  楼主 | 2014-4-14 15:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现象描述: 当外部中断(10-15)触发进入中断函数后,系统任何中断无法再进入(程序仍然在运行),原来认为是外部中断触发信号问题,一直在查硬件问题,后面发现是软件问题  如下:
   在外部中断初始化时,我只清掉了需要用的外部中断(如上图,外部第14中断没用,我就没有清)
void Exti_Cfg(void)
{
    EXTI_InitTypeDef EXTI_InitStructure;
    EXTI_ClearITPendingBit(EXTI_Line0);            //   初始化中断,先清除掉标志位            
    EXTI_ClearITPendingBit(EXTI_Line10);            //
    EXTI_ClearITPendingBit(EXTI_Line11);            //  
    EXTI_ClearITPendingBit(EXTI_Line12);            //   
    EXTI_ClearITPendingBit(EXTI_Line15);            //   

但是在中断服务函数里,我套用原先的模板  (即外部中断10-15都加以判断是否有中断,中断14我也加了判断)

void EXTI15_10_IRQHandler(void)
{
    if(EXTI_GetFlagStatus(EXTI_Line15)!=RESET)
    {
   
        EXTI_ClearITPendingBit(EXTI_Line15);
    }
   
    if(EXTI_GetFlagStatus(EXTI_Line13)!=RESET)
    {
   
        EXTI_ClearITPendingBit(EXTI_Line14);
    }

    if(EXTI_GetFlagStatus(EXTI_Line12)!=RESET)
    {
        
       EXTI_ClearITPendingBit(EXTI_Line12);
    }
    if(EXTI_GetFlagStatus(EXTI_Line10)!=RESET)
    {

       EXTI_ClearITPendingBit(EXTI_Line10);
    }
    if(EXTI_GetFlagStatus(EXTI_Line11)!=RESET)
    {

           Delay_Us(20);

       EXTI_ClearITPendingBit(EXTI_Line11);
    }
}
       就是这个中断14 没有初始化清除,导致10-15中断函数只要进入一次  整个中断就会死掉,无法进入。

       当我在外部中断初始化时加入    EXTI_ClearITPendingBit(EXTI_Line14);   系统能能正常进出中断。

     这个现象不是每个多元中断都会发生,像第5-9中断有没清的标志位,中断也不会死机。
我的结论: 外部中断初始化配置时,最好清除全部外部中断的标志位。



沙发
mmuuss586| | 2014-4-14 15:17 | 只看该作者

谢谢分享,支持下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

20

帖子

1

粉丝