智能车制作

标题: STM32外中断冲突求助 [打印本页]

作者: chenlianzhi    时间: 2012-12-8 09:48
标题: STM32外中断冲突求助
大家好:
   我在调试STM32外中断时遇到了一个比较奇怪的问题,希望大家帮忙分析一下.
问题是如果有2个外中断同时产生,STM32是先执行高优先级中断然后再执行低优先级中断吗? 硬件电路是PC6发出的500HZ脉冲,如果PC5PB15连接PC6, 15会有很多中断没有响应,如果PC5PB10连接PC6,510的中断都会响应,这是为什么呢?
   另外,我设定的是下降沿中断,结果个别上升沿也会产生中断,相关代码如下
     void Ex_NVIC_Config(u8 GPIOx,u8 BITx)
          {
          u8 EXTADDR;
          u8 EXTOFFSET;
          EXTADDR=BITx/4;//得到中断寄存器组的编号
          EXTOFFSET=(BITx%4)*4;
          RCC->APB2ENR|=0x01;//使能io复用时钟
          AFIO->EXTICR[EXTADDR]&=~(0x000F<<EXTOFFSET);//清除原来设置!!!
          AFIO->EXTICR[EXTADDR]|=GPIOx<<EXTOFFSET;//EXTI.BITx映射到GPIOx.BITx
          }
             void Exti_int()
         {
          RCC->APB2ENR|=1<<0; //开启辅助时钟
          Ex_NVIC_Config(GPIO_C,9);  //PC9 IN1/X0
          Ex_NVIC_Config(GPIO_B,10); //PB10 IN2/X1
          Ex_NVIC_Config(GPIO_B,15);  //PB15 IN7/X6
          Ex_NVIC_Config(GPIO_C,5);  //PC5 IN8/X7
          Ex_NVIC_Config(GPIO_C,2);  //PC2 WRITE FLASH
                EXTI->FTSR=0x8624;//2 5 9 10 15
                EXTI->RTSR&=0x00000000;
          MY_NVIC_Init(1,1,EXTI2_IRQChannel,2);
          MY_NVIC_Init(0,2,EXTI9_5_IRQChannel,2);
          MY_NVIC_Init(0,3,EXTI15_10_IRQChannel,2);
                                     EXTI->R = 0x0007FFFF;
                                                    EXTI->IMR= 0x8624;
                                                    EXTI->EMR= 0x8624;
         }
   void EXTI9_5_IRQHandler(void)
      {
    if (EXT_flag5) //光电信号 X7
              { out2++;EXT_flag5=1;  }
     }
void EXTI15_10_IRQHandler(void)
       {                     
            if (EXT_flag15)//X6
            { led2++; EXT_flag15=1; }
              if (EXT_flag10)//X1
               { out3++;  EXT_flag10=1; }
       }
我是用示波器观察OUT1,OUT2,LED2得出的结论.





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2