STM32F4 Hal库中IO外部中断(EXIT)的应用

目录

概述

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) 查看中断回调函数

回调函数内容:

终端打印的信息

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-04-23 08:04:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-23 08:04:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-23 08:04:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-23 08:04:02       18 阅读

热门阅读

  1. 资料总结分享:临床重要数据库

    2024-04-23 08:04:02       13 阅读
  2. 可信通信(TLS/SSL协议)

    2024-04-23 08:04:02       13 阅读
  3. <基础数学> 平面向量基本定理

    2024-04-23 08:04:02       10 阅读
  4. 数学分析复习:中值定理、反函数定理

    2024-04-23 08:04:02       15 阅读
  5. linux系统安装docker-compose

    2024-04-23 08:04:02       12 阅读