#include "exti.h" #include "delay.h" void exti_Init(void) { EXTI_InitTypeDef EXTI_InitStruct; NVIC_InitTypeDef NVIC_InitStruct; GPIO_InitTypeDef GPIO_InitStructure; // KEY_Init();//IO初始化 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//配置外部中断时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能GPIOB时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_9;// //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入 GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB7 //io口与中断线映射 GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource7);//链接到中断线7 GPIO7只能映射到中断线4上面 EXTI_InitStruct.EXTI_Line=EXTI_Line7;//确定中断线 EXTI_InitStruct.EXTI_LineCmd=ENABLE;//使能 EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;//中断模式 EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling;//xia降沿触发 EXTI_Init(&EXTI_InitStruct);//初始化 //io口与中断线映射 GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource9);//链接到中断线9 EXTI_InitStruct.EXTI_Line=EXTI_Line9;//确定中断线 EXTI_InitStruct.EXTI_LineCmd=ENABLE;//使能 EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;//中断模式 EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling;//xia降沿触发 EXTI_Init(&EXTI_InitStruct);//初始化 NVIC_InitStruct.NVIC_IRQChannel=EXTI9_5_IRQn; /* 需要明确的是,PxN管脚共用外部中断线EXTIN和外部中断向量EXTIN_IRQn 和中断服务程序入口EXTIN_IRQHandler,但是需要注意的是[9...5] 共用EXTI9_5_IRQn和EXTI9_5_IRQHandler、[15...10]共用EXTI15_10_IRQn和EXTI15_10_IRQHandler */ NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;//使能 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;//中断抢优先级 NVIC_InitStruct.NVIC_IRQChannelSubPriority=0; NVIC_Init(&NVIC_InitStruct);//初始化 } void EXTI9_5_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line7)!=RESET) //PB7外部中断 { EXTI_ClearITPendingBit(EXTI_Line7);//清除中断 标志 }else if(EXTI_GetITStatus(EXTI_Line9)!=RESET) { } EXTI_ClearITPendingBit(EXTI_Line9);//清除中断 标志 }