/***********************头文件****************************/ #include "exti.h" /********************************************** //外部中断初始化程序 ***********************************************/ void EXTIX_Init(void) { NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; /***************使能SYSCFG时钟***************/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG时钟 /***************初始化IO口******************* PI4 -> I14 外部中断输入 PI5 -> I15 外部输入1 PI6 -> I16 外部输入2 **********************************************/ GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOI, ENABLE);//使能GPIOB时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;//PI4 = I14 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通输入模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉 GPIO_Init(GPIOI, &GPIO_InitStructure);//初始化GPIO GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通输入模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//输入上拉 GPIO_Init(GPIOI, &GPIO_InitStructure);//初始化GPIO /***************设置IO口与中断线的映射关系***************/ SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOI, EXTI_PinSource4);//PI4 连接到中断线4 /***************初始化线上中断,设置触发条件***************/ EXTI_InitStructure.EXTI_Line = EXTI_Line4; //选择线上中断 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断事件 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发 EXTI_InitStructure.EXTI_LineCmd = ENABLE;//中断线使能 EXTI_Init(&EXTI_InitStructure);//配置 /***************中断使能***************/ NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;//外部中断4 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;//抢占优先级1 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子优先级2 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道 NVIC_Init(&NVIC_InitStructure);//配置 }