外部中断
中断线————EXTI线0~15(对应外部IO口的输入中断)
每个IO口都可以作为外部中断输入
每个中短线可以独立的配置触发方式(上升沿,下降沿,双边沿),触发/屏蔽,专用状态位。
GPIO与中断线映射关系
EXTI0->PA0,PB0,PC0,……PI0
EXTI1->PA1,PB1,PC1,……PI1
........................
EXTI15->PA15............
具体引脚通过配置寄存器SYSCFG_EXTIRx选择,四位,选择16个IO口
七个中断服务函数
EXTI0_IRQHandler
EXTI1_IRQHandler
EXTI2_IRQHandler
EXTI3_IRQHandler
EXTI4_IRQHandler
EXTI9_5_IRQHandler (共用)
EXTI15_10_IRQHandler (共用)
外部中断配置
GPIO_InitTypeDef GPIO_Initure;
GPIO_Initure.Pin=GPIO_PIN_0; //PA0
GPIO_Initure.Mode=GPIO_MODE_IT_RISING; //上升沿触发
GPIO_Initure.Pull=GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOA,&GPIO_Initure)
(只需在GPIO初始化时设置MODE即可)
通用中断处理函数(位于gpio.c)
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
{
if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET)
{
__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
HAL_GPIO_EXTI_Callback(GPIO_Pin);//中断回调函数
}
}
中断回调函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
switch(GPIO_Pin)
{
case GPIO_PIN_0:
//控制逻辑
break;
case GPIO_PIN_2:
//控制逻辑
break;
}
}
外部中断一般配置步骤
1.使能IO口时钟。
2.初始化IO口,设置触发方式(输入方式):HAL_GPIO_Init();
3.设置中断优先级,并使能中断通道。
4.编写中断服务函数:
函数中调用外部中断通用处理函数HAL_GPIO_EXTI_IRQHandler。
5.编写外部中断回调函数:HAL_GPIO_EXTI_Callback;
(该函数由通用中断处理函数HAL_GPIO_EXTI_IRQHandler调用)