STM32F4外部中断实现

代码如下:

void exti_init(void)
{
    EXTI_InitTypeDef exti_init;
    NVIC_InitTypeDef nvci_init;
    GPIO_InitTypeDef GPIO_init;
    
    //使能相应时钟
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);
    
    GPIO_init.GPIO_Mode=GPIO_Mode_IN;
    GPIO_init.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9;
    GPIO_init.GPIO_PuPd=GPIO_PuPd_UP;
    GPIO_init.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOC,&GPIO_init);
    
    //使能SYSCFG时钟
    RCC_APB2PeriphClockLPModeCmd(RCC_APB2Periph_SYSCFG,ENABLE);
    
    //把PC8和PC9分别连接到线8、线9
    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC,EXTI_PinSource8);
    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC,EXTI_PinSource9);
    //SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB,EXTI_PinSource9);
    
    exti_init.EXTI_Line=EXTI_Line8|EXTI_Line9;
    exti_init.EXTI_Mode=EXTI_Mode_Interrupt;
    exti_init.EXTI_Trigger=EXTI_Trigger_Rising;
    exti_init.EXTI_LineCmd=ENABLE;
    EXTI_Init(&exti_init);
    
    nvci_init.NVIC_IRQChannel=EXTI9_5_IRQn;
    nvci_init.NVIC_IRQChannelPreemptionPriority=1;
    nvci_init.NVIC_IRQChannelSubPriority=1;
    nvci_init.NVIC_IRQChannelCmd=ENABLE;
    NVIC_Init(&nvci_init);
    
}


void EXTI9_5_IRQHandler(void)
{
    delay_ms(5);//消除抖动
    if(KEY0==0)
    {
        LED2=!LED2;
        LED3=!LED3;
        printf("\t按键0\n");
    }
    if(KEY1==0)
    {
        LED4=!LED4;
        LED5=!LED5;
        printf("\t按键1\n");
    }
    EXTI_ClearITPendingBit(EXTI9_5_IRQn);
}

实测有效

posted @ 2019-12-12 20:09  cloos.xie  阅读(1807)  评论(0编辑  收藏  举报