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

回调函数内容:

终端打印的信息

  • 36
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值