中断5——9的配置。

2019-08-20 15:29发布

使用stm32中断函数,配置按键分别为PA0,PC13,PA8,PD3。进行如下配置之后,发现PA0和PD3按键可以正常工作,PA8和PC13不但不能正常使用,一旦按过之后,连PA0和PD3也不能正常工作了。中断向量5-9是共用一个,10-15是共用一个的,所以在5-9中我要具体使用哪个是否需要另行配置?
中断配置如下:




void EXTIX_Init(void)
{

        EXTI_InitTypeDef EXTI_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

    KEY_Init();         //        °′¼ü¶Ë¿ú3õê¼»ˉ

          RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);        //ê1Äü¸′óÃ1|Äüê±Öó

  //GPIOC.13 ÖD¶ÏÏßòÔ¼°ÖD¶Ï3õê¼»ˉÅäÖà  Ï½μÑØ′¥·¢
          GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource13);

          EXTI_InitStructure.EXTI_Line=EXTI_Line13;        //KEY2
          EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;       
          EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
          EXTI_InitStructure.EXTI_LineCmd = ENABLE;
          EXTI_Init(&EXTI_InitStructure);                 //¸ù¾YEXTI_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèEXTI¼Ä′æÆ÷

//GPIOD.3          ÖD¶ÏÏßòÔ¼°ÖD¶Ï3õê¼»ˉÅäÖà ϽμÑØ′¥·¢ //KEY1
          GPIO_EXTILineConfig(GPIO_PortSourceGPIOD,GPIO_PinSource3);
          EXTI_InitStructure.EXTI_Line=EXTI_Line3;
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
          EXTI_Init(&EXTI_InitStructure);                  //¸ù¾YEXTI_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèEXTI¼Ä′æÆ÷




  //GPIOA.0          ÖD¶ÏÏßòÔ¼°ÖD¶Ï3õê¼»ˉÅäÖà ϽμÑØ′¥·¢ PA0  WK_UP
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);

        EXTI_InitStructure.EXTI_Line=EXTI_Line0;
          EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
          EXTI_Init(&EXTI_InitStructure);                //¸ù¾YEXTI_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèEXTI¼Ä′æÆ÷
        //        PA8
                GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource8);


        EXTI_InitStructure.EXTI_Line=EXTI_Line8;

          EXTI_Init(&EXTI_InitStructure);                //¸ù¾YEXTI_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèEXTI¼Ä′æÆ÷


          NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;                        //ê1Äü°′¼üWK_UPËùÔúμÄía2¿ÖD¶Ïí¨μà
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;        //ÇàÕ¼óÅÏ輶2£¬
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;                                        //×óóÅÏ輶3
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                                                //ê1Äüía2¿ÖD¶Ïí¨μà
          NVIC_Init(&NVIC_InitStructure);

    NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;                        //ê1Äü°′¼üKEY2ËùÔúμÄía2¿ÖD¶Ïí¨μà
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;        //ÇàÕ¼óÅÏ輶2£¬
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;                                        //×óóÅÏ輶2
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                                                //ê1Äüía2¿ÖD¶Ïí¨μà
          NVIC_Init(&NVIC_InitStructure);


          NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;                        //ê1Äü°′¼üKEY1ËùÔúμÄía2¿ÖD¶Ïí¨μà
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;        //ÇàÕ¼óÅÏ輶2
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;                                        //×óóÅÏ輶1
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                                                //ê1Äüía2¿ÖD¶Ïí¨μà
          NVIC_Init(&NVIC_InitStructure);            //¸ù¾YNVIC_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèNVIC¼Ä′æÆ÷

        NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;                        //ê1Äü°′¼üKEY0ËùÔúμÄía2¿ÖD¶Ïí¨μà
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;        //ÇàÕ¼óÅÏ輶2
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;                                        //×óóÅÏ輶0
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                                                //ê1Äüía2¿ÖD¶Ïí¨μà
          NVIC_Init(&NVIC_InitStructure);            //¸ù¾YNVIC_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèNVIC¼Ä′æÆ÷

}

//ía2¿ÖD¶Ï0·tÎñ3ìDò
void EXTI0_IRQHandler(void)
{
        delay_ms(10);//Ïû¶¶
        if(KEY0==0)                  //WK_UP°′¼ü
        {                                 
                led2=!led2;       
               
        }
        EXTI_ClearITPendingBit(EXTI_Line0); //Çå3yLINE0éÏμÄÖD¶Ï±ê־λ  
}

//ía2¿ÖD¶Ï2·tÎñ3ìDò
void EXTI3_IRQHandler(void)
{
        delay_ms(10);//Ïû¶¶
        if(KEY3==0)          //°′¼üKEY2
        {
        led0=!led0;
               
        }                 
        EXTI_ClearITPendingBit(EXTI_Line3);  //Çå3yLINE2éÏμÄÖD¶Ï±ê־λ  
}
//ía2¿ÖD¶Ï8·tÎñ3ìDò
void EXTI8_IRQHandler(void)
{
        delay_ms(10);//Ïû¶¶
        if(KEY2==0)         //°′¼üKEY1
        {                                 
        led1=!led1;
       
        }                 
        EXTI_ClearITPendingBit(EXTI_Line8);  //Çå3yLINE8éÏμÄÖD¶Ï±ê־λ  
}

void EXTI13_IRQHandler(void)
{
        delay_ms(10);//Ïû¶¶
        if(KEY1==0)         //°′¼üKEY0
        {
                led0=!led0;
                led1=!led1;
        }                 
        EXTI_ClearITPendingBit(EXTI_Line13);  //Çå3yLINE4éÏμÄÖD¶Ï±ê־λ  
}



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。