exit.c文件的代码如下:
- #include "exti.h"
- #include "misc.h"
- void EXTI_init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- EXTI_InitTypeDef EXTI_InitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO,ENABLE); //开启PE3的时钟,并开启复用时钟
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //选择要使用的I/O引脚,此处选择PE3引脚
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //设置引脚输入模式为浮空输入模式
- GPIO_Init(GPIOE,&GPIO_InitStructure); //调用初始化库函数初始化GPIO端口
-
- //初始化EXTI,外部中断
- EXTI_ClearITPendingBit(EXTI_Line3); //清空外部中断3中断挂起,清空中断标志
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource3);//将PE3用作外部中断线路
-
- EXTI_InitStructure.EXTI_Line = EXTI_Line3; //设置外部中断线3中断
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //设置为中断模式
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //设置为下降沿触发
- EXTI_InitStructure.EXTI_LineCmd = ENABLE; //使能该外部中断线
- EXTI_Init(&EXTI_InitStructure);
-
- //初始化NVIC,中断优先级
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //选择中断优先级分组2
- NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn; //外部中断3中断
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//设置抢占优先级为0
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //设置响应优先级为1
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //外部中断处理函数
- NVIC_Init(&NVIC_InitStructure);
- }
- //外部中断处理函数
- void EXTI3_IRQHandler(void)
- {
-
- if(EXTI_GetITStatus(EXTI_Line3) != RESET)
- {
- GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)((1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5)))); //PE5的电平状态翻转
- EXTI_ClearITPendingBit(EXTI_Line3); //清除中断标志位
- }
- }
|