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);
}

實測有效


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM