HAL 库的 stm32f4xx_hal_exti.h 和 stm32f4xx_hal_exti.c 文件中。
STM32F407 的中断控制器支持 23个外部中断/事件请求。
EXTI 线 0~15:对应外部 IO 口的输入中断。
EXTI 线 16:连接到 PVD 输出。
EXTI 线 17:连接到 RTC 闹钟事件。
EXTI 线 18:连接到 USB OTG FS 唤醒事件。
EXTI 线 19:连接到以太网唤醒事件。
EXTI 线 20:连接到 USB OTG HS(在 FS 中配置)唤醒事件。
EXTI 线 21:连接到 RTC 入侵和时间戳事件。
EXTI 线 22:连接到 RTC 唤醒事件。
STM32F4 供 IO 口使用的中断线只有 16 个,但是 STM32F4 的 IO 口却远远不止 16 个,
GPIO 的管脚 GPIOx.0~GPIOx.15(x=A,B,C,D,E, F,G,H,I)分别对应中断线 0到15。
每个中断线对应了最多 9 个 IO 口,以线 0 为例:它对应了 GPIOA.0、 GPIOB.0、 GPIOC.0、
GPIOD.0、 GPIOE.0、 GPIOF.0、 GPIOG.0,GPIOH.0,GPIOI.0。
++++++++++++++++++++++++++++++++++++++++++
使用库函数配置外部中断的步骤。
- 使能 IO 口时钟,初始化 IO 口为输入
- 设置 IO 口模式,触发条件, 开启 SYSCFG 时钟,设置 IO 口与中断线的映射关系。
使用 HAL 库的时候,都是在函数 HAL_GPIO_Init 中一次性完成的。函数内部会通过判断
Mode 的值来开启 SYSCFG 时钟,并且设置 IO 口和中断线的映射关系。
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);
- 配置中断优先级(NVIC),并使能中断。