STM32外部中断
-
STM32的每个IO都可以作为外部中断输入
-
线0~15:对应外部IO口的输入中断。
线16:连接到PVD输出。
线17:连接到RTC闹钟事件。
线18:连接到USB唤醒事件
-
EXTI0被PA0,PB0等映射,同一时间只能有一个进行映射。
注:映射后,IO口仍能正常的读入。
-
外部中断线5~9分配一个中断向量,共用一个服务函数
外部中断线10~15分配一个中断向量,共用一个中断服务函数
EXIOX_IROHandler(9_5 ; 15_10)
-
常用库函数
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource); //设置IO口与中断线的映射关系 //exp: GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2); void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct); //初始化中断线:触发方式等 ITStatus EXTI_GetITStatus(uint32_t EXTI_Line); //判断中断线中断状态,是否发生 void EXTI_ClearITPendingBit(uint32_t EXTI_Line); //清除中断线上的中断标志位
-
EXIT_Init函数
typedef struct { uint32_t EXTI_Line; //指定要配置的中断线 EXTIMode_TypeDef EXTI_Mode; //模式:事件 OR中断 EXTITrigger_TypeDef EXTI_Trigger;//触发方式:上升沿/下降沿/双沿触发 FunctionalState EXTI_LineCmd; //使能 OR失能 }EXTI_InitTypeDef; //EXTI_InitStructure.EXTI_Line=EXTI_Line2; //EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; // EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; // EXTI_InitStructure.EXTI_LineCmd = ENABLE; // EXTI_Init(&EXTI_InitStructure);
-
外部中断的一般配置步骤
//初始化IO口为输入。 GPIO_Init(); //开启IO口复用时钟。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //设置IO口与中断线的映射关系。 void GPIO_EXTILineConfig(); //初始化线上中断,设置触发条件等。 EXTI_Init(); //配置中断分组(NVIC),并使能中断。 NVIC_Init(); //编写中断服务函数。 EXTIx_IRQHandler(); //清除中断标志位 EXTI_ClearITPendingBit();