多个中断,部分中短通道没反应

2019-07-20 13:43发布

设置了中断PC4、PC5、PB6、PB7、PA11、PA12为外部中断,EXTI4_IRQHandler无反应,单独使用是可以的
[mw_shl_code=c,true]GPIO_InitTypeDef GPIO_InitStructure;
        EXTI_InitTypeDef EXTI_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
       
        RCC_AHB1PeriphClockCmd(WIEGAND1_RCC_PORT | WIEGAND2_RCC_PORT | WIEGAND3_RCC_PORT | WIEGAND4_RCC_PORT,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

  GPIO_InitStructure.GPIO_Pin  = WIEGAND1_DATA0_GPIO | WIEGAND1_DATA1_GPIO;//PB6PB7
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;   
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(WIEGAND1_PORT, &GPIO_InitStructure);

       
        GPIO_InitStructure.GPIO_Pin  = WIEGAND2_DATA0_GPIO | WIEGAND2_DATA1_GPIO; //PA11PA12
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;   
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(WIEGAND2_PORT, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin  = WIEGAND3_DATA0_GPIO | WIEGAND3_DATA1_GPIO;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;   
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(WIEGAND3_PORT, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin  = WIEGAND4_DATA0_GPIO | WIEGAND4_DATA1_GPIO; //PC4PC5
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;   
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(WIEGAND4_PORT, &GPIO_InitStructure);

        //WIEGAND1
        SYSCFG_EXTILineConfig(WIEGAND1_PortSource,EXTI_PinSource6);
  EXTI_InitStructure.EXTI_Line        = EXTI_Line6;
  EXTI_InitStructure.EXTI_Mode         = EXTI_Mode_Interrupt;       
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);         

        SYSCFG_EXTILineConfig(WIEGAND1_PortSource,EXTI_PinSource7);
        //GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource1);
        EXTI_InitStructure.EXTI_Line        = EXTI_Line7;
  EXTI_InitStructure.EXTI_Mode         = EXTI_Mode_Interrupt;       
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;   
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);       

  NVIC_InitStructure.NVIC_IRQChannel         = EXTI9_5_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority         = 0x03;
  NVIC_InitStructure.NVIC_IRQChannelCmd         = ENABLE;
  NVIC_Init(&NVIC_InitStructure);


        //WIEGAND2
        SYSCFG_EXTILineConfig(WIEGAND2_PortSource,EXTI_PinSource11);
  EXTI_InitStructure.EXTI_Line        = EXTI_Line11;
  EXTI_InitStructure.EXTI_Mode         = EXTI_Mode_Interrupt;       
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);         

        SYSCFG_EXTILineConfig(WIEGAND2_PortSource,EXTI_PinSource12);
        EXTI_InitStructure.EXTI_Line        = EXTI_Line12;
  EXTI_InitStructure.EXTI_Mode         = EXTI_Mode_Interrupt;       
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;   
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);       

  NVIC_InitStructure.NVIC_IRQChannel         = EXTI15_10_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority         = 0x03;
  NVIC_InitStructure.NVIC_IRQChannelCmd         = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

        //WIEGAND3
        SYSCFG_EXTILineConfig(WIEGAND3_PortSource,EXTI_PinSource8);
  EXTI_InitStructure.EXTI_Line        = EXTI_Line8;
  EXTI_InitStructure.EXTI_Mode         = EXTI_Mode_Interrupt;       
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);         

        SYSCFG_EXTILineConfig(WIEGAND3_PortSource,EXTI_PinSource14);
        EXTI_InitStructure.EXTI_Line        = EXTI_Line14;
  EXTI_InitStructure.EXTI_Mode         = EXTI_Mode_Interrupt;       
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;   
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);       

  NVIC_InitStructure.NVIC_IRQChannel         = EXTI9_5_IRQn | EXTI15_10_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority         = 0x03;
  NVIC_InitStructure.NVIC_IRQChannelCmd         = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
       
        //WIEGAND4
        SYSCFG_EXTILineConfig(WIEGAND4_PortSource,EXTI_PinSource4);
  EXTI_InitStructure.EXTI_Line        = EXTI_Line4;
  EXTI_InitStructure.EXTI_Mode         = EXTI_Mode_Interrupt;       
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);         

        SYSCFG_EXTILineConfig(WIEGAND4_PortSource,EXTI_PinSource5);
        //GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource1);
        EXTI_InitStructure.EXTI_Line        = EXTI_Line5;
  EXTI_InitStructure.EXTI_Mode         = EXTI_Mode_Interrupt;       
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;   
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);       

  NVIC_InitStructure.NVIC_IRQChannel         =  EXTI4_IRQn | EXTI9_5_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority         = 0x03;
  NVIC_InitStructure.NVIC_IRQChannelCmd         = ENABLE;
  NVIC_Init(&NVIC_InitStructure); [/mw_shl_code]



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
1条回答
Eternal单人行
2019-07-20 16:32
中断通道定义一定要分开,不然,只进入后面的中断线。
[mw_shl_code=c,true] NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);

        NVIC_InitStructure.NVIC_IRQChannel =  EXTI9_5_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);[/mw_shl_code]

一周热门 更多>