首页 > 其他 > 详细

STM32F4外部中断实现

时间:2019-12-12 20:34:57      阅读:160      评论:0      收藏:0      [点我收藏+]

代码如下:

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

实测有效

STM32F4外部中断实现

原文:https://www.cnblogs.com/longxi/p/12031347.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!