代码如下:
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); }
实测有效