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

回调函数内容:

终端打印的信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/641242.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

助力突发异常事件预警保障公共安全,基于YOLOv7【tiny/l/x】模型开发构建公共生活场景下危险人员持刀行凶异常突发事件检测预警识别系统

基于AI目标检测模型的暴力持刀行凶预警系统是当下保障人民生命安全的新途径&#xff0c;近年来&#xff0c;公众场合下的暴力袭击事件频发&#xff0c;不仅给受害者及其家庭带来了深重的伤害&#xff0c;也对社会的稳定和安全造成了极大的威胁。在这种背景下&#xff0c;如何有…

vulfocus靶场tomcat-cve_2017_12615 文件上传

7.0.0-7.0.81 影响版本 Windows上的Apache Tomcat如果开启PUT方法(默认关闭)&#xff0c;则存在此漏洞&#xff0c;攻击者可以利用该漏洞上传JSP文件&#xff0c;从而导致远程代码执行。 Tomcat 是一个小型的轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多…

【MySQL】InnoDB与MyISAM存储引擎的区别与选择

存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式 。 存储引擎是基于表的&#xff0c;而不是基于库的&#xff0c;所以存储引擎也可被称为表类型。我们可以在创建表的时候&#xff0c;来指定选择的存储引擎&#xff0c;如果没有指定将自动选择默认的存储引擎。…

深度剖析图像处理—边缘检测

什么是边缘检测 边缘检测(Edge Detection)就是提取图像中的边缘点(Edge Point)。边缘点是与周围像素相比灰度值有阶跃变化或屋顶状变化的像素。边缘常存在于目标与背景之间、目标与目标之间、目标与其影子之间。 ​ 在图像处理和图像分析中&#xff0c;经常要用到边缘(Edge)、边…

【YOLOv8改进[注意力]】YOLOv8添加DAT(Vision Transformer with Deformable Attention)助力涨点

目录 一 DAT 二 YOLOv8添加DAT助力涨点 1 总体修改 2 配置文件 3 训练 其他 一 DAT 官方论文地址&#xff1a;https://openaccess.thecvf.com/content/CVPR2022/papers/Xia_Vision_Transformer_With_Deformable_Attention_CVPR_2022_paper.pdf Transformers最近在各种视…

学生选课及成绩查询管理系统的设计与开发C#(winform + sqlserver)

源码来自网络 技术栈&#xff1a; C#的窗体程序开发 本系统未采用C#实现MDI——多文档窗口&#xff0c;因为考虑到C#的该技术与java类似&#xff0c;而暑期java实训时&#xff0c;曾用过类似的方法做过停车场管理系统&#xff0c;所以想为这次的系统注入一点新鲜的血液&#x…

C++修炼之路之多态---多态的原理(虚函数表)

目录 一&#xff1a;多态的原理 1.虚函数表 2.原理分析 3.对于虚表存在哪里的探讨 4.对于是不是所有的虚函数都要存进虚函数表的探讨 二&#xff1a;多继承中的虚函数表 三&#xff1a;常见的问答题 接下来的日子会顺顺利利&#xff0c;万事胜意&#xff0c;生活明朗--…

五、【易 AI】鼠标事件与目标焦点

所谓辉煌的人生,不过是欲望的囚徒。 ——叔本华 注:自本节开始,所有的示例都以 OpenGLWidget 实现, 一、鼠标事件 重写鼠标事件, #ifndef MYOPENGL_H #define MYOPENGL_H#include <QOpenGLWidget> #include <QTimer> #include <QMouseEvent>class My…

CUDA编程【2】-(51-78)

系列文章目录 文章目录 系列文章目录前言51、寄存器溢出51.1 溢出概念51.1 使用控制 52、本地内存和共享内存52.1 本地内存52.2. 共享内存 53. 常量内存53.1 概念53.2 初始化 54. 全局内存54.1 概念54.2 初始化 55. GPU缓存和变量作用域55.1 缓存类型55.2 变量作用域 56. 静态全…

鲁抗医药专属采购商城上线,携手隆道公司注入数字化采购新动能

近日&#xff0c;国内领先的医药制造企业——山东鲁抗医药股份有限公司&#xff08;以下简称鲁抗医药&#xff09;与隆道公司联手打造的鲁抗医药专属采购商城上线运行。该商城&#xff0c;通过整合鲁抗医药合作电商和合格供应商资源&#xff0c;创新商城化采供协同模式&#xf…

【Hello算法】 > 第 3 关 >栈与队列

数据结构 之 数组与链表 1 栈 / 栈的常见操作、实现、应用2 队列 /队列的常见操作、实现、应用3 双向队列4 Tips ———————————————————————————————————————————————————————————- ————————————————…

动手学大模型应用开发--Chapter 03搭建并使用向量数据库

文章目录 前言一、学习目标二、学习知识点概要2.1 什么是词向量2.2 词向量的意义2.3 文本转为词向量的方法 三、总结四、引申阅读 前言 本学习笔记为datawhale动手学大模型应用开发的第三章&#xff0c;学习链接为&#xff1a; https://datawhalechina.github.io/llm-universe…