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.mzph.cn/diannao/2050.shtml

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

相关文章

在使用电脑时遇过msvcr120.dll文件丢失的情况怎么办,一键修复dll文件丢失

在使用电脑时有没有遇到过msvcr120.dll文件丢失的情况&#xff0c;遇到这样的情况有什么办法可以解决&#xff0c;废话少说&#xff0c;直接上教程&#xff0c;解决msvcr120.dll文件丢失问题。 msvcr120.dll文件丢失修复方法 A. 从官方或其他可信赖的来源下载并安装缺失的 msv…

众筹商城源码 众筹农业平台 农业乘科技富强之路 线上农业众筹 养殖系统 种植系统源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 前端是编译后的&#xff0c;后端PHP&#xff0c;带商城&#xff0c;详情看下图 特点和功能&#xff1a; 用户管理&#xff1a;包括注册、登录、个人信息管理等。 项目创建与展示&…

【C语言进阶篇】offsetof宏的介绍 及其实现

目录 一、offsetof宏的介绍 头文件 &#xff1a; offsetof宏的通用形式&#xff1a; 参数说明&#xff1a; 用法举例&#xff1a; 二、offsetof宏的实现 三、offsetof宏的使用注意事项 个人主页&#xff1a; 倔强的石头的博客 系列专栏 &#xff1a;C语言指南 …

Java中的动态代理

动态代理 什么是代理程序为什么需要代理例子如何创建代理对象 应用场景 什么是代理 程序为什么需要代理 对象如果认为身上干的事太多&#xff0c;可以通过代理来转移部分职责&#xff1b; 对象有什么方法想被代理&#xff0c;代理就一定要有对应的方法 使用接口实现&#xf…

iPerf 3 测试UDP和TCP方法详解

文章目录 前言一、What is iPerf / iPerf3 ?二、功能1. TCP and SCTP2. UDP3. 其他 三、 Iperf的使用1.Iperf的工作模式2. 通用指令3. 服务端特有选项4. 客户端特有选项5. -t -n参数联系 四、Iperf使用实例1. 调整 TCP 连接1. 1TCP 窗口大小调节1. 2 最大传输单元 (MTU)调整 2…

Pyhton Sqlite3手机数据库

代码结果 Code import sqlite3 connsqlite3.connect(test.db) csconn.cursor() create_tb_sqlcreate table if not exists info(id int primary key,name text,age int)cs.execute(create_tb_sql)# cs.execute(insert into info(id,name,age) values(3,"dog_Senior&quo…

华为交换机重置密码

1.进入bootrom 加电后&#xff0c;18S左右&#xff0c;在启动菜单按 CtrlB 进入bootrom&#xff08;3s内&#xff09; 注意&#xff1a;本步骤属于高危操作&#xff0c;一定小心切勿删除系统或修改bootrom密码&#xff01; 输入bootrom密码&#xff0c;按6 看到提示成功后按…

科技云报道:AIGC掀算力需求革命,边缘计算将不再“边缘”

科技云报道原创。 随着以大模型为代表的AIGC时代拉开序幕&#xff0c;算力需求持续爆发&#xff0c;AI与边缘深度融合已是大势所趋&#xff0c;越来越多的企业开始积极布局GenAI。 GenAI技术的商用化部署和应用成为企业竞逐的新阵地&#xff0c;勾勒出大模型从“技术力”转向…

web漏洞合集描述和修复建议

完整Excle文件可移步至知识星球查看下载 星球不定时分享网上各种资料&#xff0c;欢迎大家加入交流。

NX二次开发UF_LAYER(图层相关操作)常用函数

目录 一、概述 二、函数的介绍 2.1 UF_LAYER_ask_category_info &#xff08;查询图层类别信息&#xff09; 2.2 UF_LAYER_ask_category_tag&#xff08;查询图层类别TAG&#xff09; 2.3 UF_LAYER_ask_status&#xff08;查询图层的状态&#xff09; 2.4 UF_LAYER_ask_wo…

docker 报错 error adding seccomp filter rule for syscall clone3

网上有一些说法&#xff0c;例如重新安装docker 但是我自己尝试&#xff0c;用 –security-opt seccompunconfined 就可以&#xff0c;但是需要把这个命令放到紧挨着run的位置&#xff0c;如果放到偏后的位置&#xff0c;可能不起作用。 以下命令是其他网友启动是的命令&…

UG10.如何设置鼠标滚轮操作模型放大缩小方向?

UG10.如何设置鼠标滚轮操作模型放大缩小方向呢&#xff1f;看一下具体操作步骤吧。 首先打开UG10.软件&#xff0c;在主菜单栏选择【文件】下拉菜单&#xff0c;选择【实用工具】。 点击【用户默认设置】。 文章源自四五设计网-https://www.45te.com/45545.html 选中【基本环…

mongodb 安装问题

1. mongodb启动时显示 Illegal instruction (core dumped) mongodb 5.0之后(包括5.0) 开始使用需要使用 AVX 指令集 2.启动时报错 ERROR: child process failed, exited with 1 通过指令 bin/mongod --repair 查看报错信息 根据报错信息进行修改

Ps 滤镜:波浪

Ps菜单&#xff1a;滤镜/扭曲/波浪 Filter/Distort/Wave 波浪 Wave滤镜可以在图像上创建复杂且可控的波浪形变效果。此滤镜提供了丰富的选项&#xff0c;可以精确调整波浪的形状、大小和分布&#xff0c;以实现不同的视觉效果。 “波浪”滤镜通过对图像应用数学波形函数来扭曲图…

自己写的加密案例4——某东方课程头部sign加密

网址&#xff1a;aHR0cHM6Ly9kc2FwaS54ZGYuY24vcHJvZHVjdC92Mi9jbGFzcy9zZWFyY2g 进行抓包分析&#xff0c;发现请求头中由sign加密&#xff0c;简单判断是消息摘要算法。 Sign:d7c68100ca508bb7c8ae284560754303 进行xhr断点&#xff0c;一下子就发现了位置。 s c.sign&…

linux下 Mysql8.0 离线安装

环境&#xff1a;centos7.9 MysqlL8.0.36安装包 链接&#xff1a;https://pan.baidu.com/s/1bKwHr05z8Ye82dT9tntdUA 提取码&#xff1a;3a5z 参考Centos安装MYSQL8(离线可用) 文章目录 1、解压安装2、配置启动2.1 修改配置文件2.2 mysql 启动 3、mysql 测试 1、解压安装 #…

单片机 VS 嵌入式LInux (学习方法)

linux 嵌入式开发岗位需要掌握Linux的主要原因之一是&#xff0c;许多嵌入式系统正在向更复杂、更功能丰富的方向发展&#xff0c;需要更强大的操作系统支持。而Linux作为开源、稳定且灵活的操作系统&#xff0c;已经成为许多嵌入式系统的首选。以下是为什么嵌入式开发岗位通常…

Valentina Studio Pro for Mac:强大的数据库管理工具

Valentina Studio Pro for Mac是一款功能全面、操作高效的数据库管理工具&#xff0c;专为Mac用户设计&#xff0c;旨在帮助用户轻松管理各种类型的数据库。 Valentina Studio Pro for Mac v13.10激活版下载 该软件拥有直观的用户界面&#xff0c;使得数据库管理变得简单直观。…

自动驾驶控制算法

本文内容来源是B站——忠厚老实的老王&#xff0c;侵删。 三个坐标系和一些有关的物理量 使用 frenet坐标系可以实现将车辆纵向控制和横向控制解耦&#xff0c;将其分开控制。使用右手系来进行学习。 一些有关物理量的基本概念&#xff1a; 运动学方程 建立微分方程 主要是弄…