目录
概述
1 中断和事件
1.1 外部中断/事件控制器 (EXTI)
1.2 EXTI主要特性
1.3 中断和事件的差别
1.3.1 中断产生流程
1.3.2 事件产生流程
1.3.3 STM32F4的事件
2 STM32Cube配置工程
2.1 外部中断/事件介绍
2.2 配置参数
2.3 生成Project
3 STM32F4 Hal库中外部中断函数介绍
3.1 中断函数:HAL_GPIO_EXTI_IRQHandler
3.2 中断回调函数:HAL_GPIO_EXTI_Callback
4 应用实例
4.1 初始化外部中断
4.2 中断函数
4.3 中断回调函数
5 功能测试
5.1 硬件介绍
5.2 代码和测试
测试代码下载地址:
stm32f4hal库中的外部中断测试程序资源-CSDN文库
概述
本文主要STM32F4 Hal库中IO外部中断(EXIT)的应用方法,笔者通过研读STM32F4 的编程手册,将和外部中断相关的信息总结成下文,便于日后使用和查阅。笔者还使用STM32Cube工具创建一个项目,以测试Hal库中中断函数的使用方法和技巧。
1 中断和事件
1.1 外部中断/事件控制器 (EXTI)
外部中断/事件控制器包含多达 23 个用于产生事件/中断请求的边沿检测器。每根输入线都可单独进行配置,以选择类型(中断或事件)和相应的触发事件(上升沿触发、下降沿触发或边沿触发)。每根输入线还可单独屏蔽。挂起寄存器用于保持中断请求的状态线。
1.2 EXTI主要特性
EXTI 控制器的主要特性如下:
● 每个中断/事件线上都具有独立的触发和屏蔽
● 每个中断线都具有专用的状态位
● 支持多达 23 个软件事件/中断请求
● 检测脉冲宽度低于 APB2 时钟宽度的外部信号。有关此参数的详细信息,请参见STM32F4xx 数据手册的电气特性部分。
外部中断/事件控制器框图
1.3 中断和事件的差别
1.3.1 中断产生流程
要产生中断,必须先配置好并使能中断线。根据需要的边沿检测设置 2 个触发寄存器,同时在中断屏蔽寄存器的相应位写“1”使能中断请求。当外部中断线上出现选定信号沿时,便会产生中断请求,对应的挂起位也会置 1。在挂起寄存器的对应位写“1”,将清除该中断请求。
1.3.2 事件产生流程
1.3.3 STM32F4的事件
要产生事件,必须先配置好并使能事件线。根据需要的边沿检测设置 2 个触发寄存器,同时在事件屏蔽寄存器的相应位写“1”允许事件请求。当事件线上出现选定信号沿时,便会产生事件脉冲,对应的挂起位不会置 1。
事件的使用,必须要和事件的类型关联起来。STM32F4提供如下7种事件:
● 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 唤醒事件
硬件事件选择
要配置 23 根线作为事件源,请执行以下步骤:
● 配置 23 根事件线的屏蔽位 (EXTI_EMR)
● 配置事件线的触发选择位( EXTI_RTSR 和 EXTI_FTSR)
2 STM32Cube配置工程
2.1 外部中断/事件介绍
外部中断有3类型:
参数类型 | 说明 |
---|---|
GPIO_MODE_IT_RISING | 具有上升沿触发检测的外部中断模式 |
GPIO_MODE_IT_FALLING | 外部中断模式与下降沿触发检测 |
GPIO_MODE_IT_RISING_FALLING | 外部中断模式与上升/下降沿触发检测 |
2.2 配置参数
1 )配置IO类型(Mode参数)
查看STM32F4xx_HAL_Driver库中GPIO的相关参数定义,GPIO_InitTypeDef的结构体定义如下:
typedef struct
{uint32_t Pin; /*!< Specifies the GPIO pins to be configured.This parameter can be any value of @ref GPIO_pins_define */uint32_t Mode; /*!< Specifies the operating mode for the selected pins.This parameter can be a value of @ref GPIO_mode_define */uint32_t Pull; /*!< Specifies the Pull-up or Pull-Down activation for the selected pins.This parameter can be a value of @ref GPIO_pull_define */uint32_t Speed; /*!< Specifies the speed for the selected pins.This parameter can be a value of @ref GPIO_speed_define */uint32_t Alternate; /*!< Peripheral to be connected to the selected pins. This parameter can be a value of @ref GPIO_Alternate_function_selection */
}GPIO_InitTypeDef;
和中断相关的Mode参数类型:
定义125行:具有上升沿触发检测的外部中断
定义126行:外部中断模式与下降沿触发检测
定义127行:外部中断模式与上升/下降沿触发检测
2)配置中断类型
使能中断类型
2.3 生成Project
生成工程后,打开项目文件:
3 STM32F4 Hal库中外部中断函数介绍
3.1 中断函数:HAL_GPIO_EXTI_IRQHandler
函数原型:
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);
参数: GPIO_Pin
对应IO 的Pin引脚
3.2 中断回调函数:HAL_GPIO_EXTI_Callback
函数原型:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
参数: GPIO_Pin
对应IO 的Pin引脚
4 应用实例
4.1 初始化外部中断
代码62行:设置外部中断,触发方式为下降沿模式
4.2 中断函数
使用Hal库时,这个函数会自动生成,不要程序员编写
4.3 中断回调函数
这个函数需要程序员编写,在Hal库中,该函数为_weak类型。
5 功能测试
5.1 硬件介绍
板卡上PIN_I8与按键连接,当按键按下时,IO被置低电平,按键弹起状态为高电平。所以该引脚可配置为下降沿触发中断。
5.2 代码和测试
代码功能已经在第4节中实现,下面将代码下载到板卡中测试
1)代码全速运行,当按键没有按下时,并没有进入到中断程序中
2) 代码全速运行,当按键被按下时,进入到中断程序中
3) 查看中断回调函数
回调函数内容:
终端打印的信息