• 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("	按键0
    ");
        }
        if(KEY1==0)
        {
            LED4=!LED4;
            LED5=!LED5;
            printf("	按键1
    ");
        }
        EXTI_ClearITPendingBit(EXTI9_5_IRQn);
    }

    实测有效

  • 相关阅读:
    【转】一个URL编码和解码的C++类
    ofstream的问题
    如何解决"应用程序无法启动,因为应用程序的并行配置不正确"问题(转载)
    最小生成树 prim & kruskal
    【2018百度之星资格赛】F 三原色图
    cout 按进制数出
    【2018百度之星资格赛】 A 问卷调查
    银河英雄传说
    读入读出挂!!
    关押罪犯
  • 原文地址:https://www.cnblogs.com/longxi/p/12031347.html
Copyright © 2020-2023  润新知