中断映射及相关函数例程的控制流

news2024/9/20 22:32:47

GPIO 和 EXTIx 的映射关系

GPIOx0(x=A~G)对应 EXTI0 ;

GPIOx1(x=A~G)对应 EXTI1 ;

GPIOx2(x=A~G)对应 EXTI2 ;

···

GPIOx15(x=A~G)对应 EXTI15 ;

如下图所示,

#注意:不同芯片的 IO 数量不同,因此 IO 组数也不同。对于STM32F407而言,IO 组数为 A~G。

相关函数及功能

有关中断的函数有很多,下文叙述与中段直接相关的函数。

HAL_GPIO_EXTI_IRQHandler()

void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)

该函数是中断通用入口函数。STM32F407的所用中断都要用它来处理中断请求,这也是“中断通用入口函数”的含义。

该函数的完整描述如下,

void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
{
  if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET)
  {
    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
    HAL_GPIO_EXTI_Callback(GPIO_Pin);
  }
}

 可见,该函数内部调用了三个函数,如下文所述,

“ __HAL_GPIO_EXTI_GET_IT(GPIO_Pin) ” 该函数用于获取指定GPIO引脚的外部中断标志位;

“ __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin) ” 该函数用于清除与指定引脚相关联的外部中断线的中断标志位,从而允许中断服务例程在下一次相同的中断事件发生时再次被调用。

“ HAL_GPIO_EXTI_Callback(GPIO_Pin) ” 该函数是中断回调函数,这个函数的主要作用是提供一个用户自定义的接口,用于处理外部中断事件,在这个回调函数中,用户可以编写具体的中断服务逻辑,如读取传感器数据、控制外设状态或执行其他需要响应中断的任务。

上文中的代码实现的功能(也就是中断通用入口函数的功能)如下文所述,

①如果检测到该引脚(GPIO_Pin)的中断标志位不为0(即!= RESET),表示相应的外部中断事件已经发生,则执行 if 语句内的代码(也就是继续执行其他两个函数所表达的功能);

②清除与指定引脚(GPIO_Pin)相关联的外部中断线的中断标志位,从而允许中断服务例程在下一次相同的中断事件发生时可以再次被调用。

③执行回调函数中的用户编写的具体的中断服务逻辑。

EXTIx 和 中断服务函数 的关系

STM32F407中共有7个中断服务例程,即 EXTIx_TRQHandler() (x=0~5、9_5、10_15)。

中断服务历程( EXTIx_TRQHandler() )和 中段线( EXTIx )的对应关系如下,

中断线(编号)中断服务例程
EXTI0EXTI0_IRQHandler()
EXTI1EXTI1_IRQHandler()
EXTI2EXTI2_IRQHandler()
EXTI3EXTI3_IRQHandler()
EXTI4EXTI4_IRQHandler()
EXTI5EXTI9_5_IRQHandler()
EXTI6
EXTI7
EXTI8
EXTI9
EXTI10EXTI15_10_IRQHandler()
EXTI11
EXTI12
EXTI13
EXTI14
EXTI15

因此,我们使用中断时,必须先根据上表的映射关系,确定我们要具体使用那个中断服务例程。

中断服务例程(EXTIx_TRQHandler() )和 中断服务函数(HAL_GPIO_EXTI_IRQHandler)的关系如下文所述:

HAL_GPIO_EXTI_IRQHandler 是一个通用的中断服务处理函数,它被设计为在HAL库中处理所有外部中断(EXTIx)的中断请求。当外部中断发生时,相应的中断服务例程(如 EXTI0_IRQHandler)会被调用,并在其中调用 HAL_GPIO_EXTI_IRQHandler 函数。这个通用函数会检查是哪一个外部引脚的中断被触发,清除中断标志位,并调用用户定义的回调函数 HAL_GPIO_EXTI_Callback 来执行具体的中断处理逻辑。

简单来说,EXTIx_IRQHandler 是特定于外部中断的中断服务例程,而 HAL_GPIO_EXTI_IRQHandler 是一个封装了中断处理通用流程的函数,它可以在不同的中断服务例程中被调用,以实现对不同外部中断的统一处理。

总结

中断处理流程如下图所示,

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

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

相关文章

java重点学习-集合

七 集合 7.1 复杂度分析 7.2 数组 1.数组(Array)是一种用连续的内存空间存储相同数据类型 数据的线性数据结构。 2.数组下标为什么从0开始 寻址公式是:baseAddressi*dataTypeSize,计算下标的内存地址效率较高 3.查找的时间复杂度 随机(通过下标)查询的时间复杂度是O…

通信工程学习:什么是CSCF会话控制功能、P-CSCF代理会话控制功能、I-CSCF询问会话控制功能、S-CSCF服务会话控制功能

一、CSCF会话控制功能 CSCF(Call Session Control Function)会话控制功能是IP多媒体子系统(IMS)内部的核心功能实体,主要负责处理多媒体呼叫会话过程中的信令控制。CSCF在整个IMS网络中起着至关重要的作用,…

第 9 章图像分割

图像分割是将一幅图像分割成有意义区域的过程。区域可以是图像的前景与背景或图像中一些单独的对象。这些区域可以利用一些诸如颜色、边界或近邻相似性等特征进行构建。本章中,我们将看到一些不同的分割技术。 9.1 图割(Graph Cut) 图论中的…

STL和C++11

1 补充知识点 c与c区别 c语言和C不能说一个面向过程,一个面向对象: 面向过程和面向对象只是一种编程思想,不是针对某一种语言的。Linux内核中的C语言就是运用面向对象的思想编写的。只是说,在实现面向对象编程时,C提…

线性因子模型 - PCA的流形解释篇

序言 线性因子模型,作为数据降维与特征提取的重要工具,在机器学习和统计分析领域发挥着关键作用。其中,主成分分析( PCA \text{PCA} PCA)作为线性因子模型的一种经典形式,其流形解释为我们深入理解数据结构…

VBA V3高级视频行为分析系统(含源码)

项目介绍 VBA V3是一个高级的视频行为分析系统,旨在通过实时或离线视频流来检测和分析人类的行为模式。该系统可以识别多种行为,如入侵检测、跌倒检测、异常行为识别等,并能提供实时警报和详细的行为报告。系统的设计充分考虑了易用性和扩展…

3GPP协议入门——物理层基础(三)

1. 栅格 1.1 全局栅格 5G频段范围是0-100GHz,在这100GHz的范围内,划分出了3279165个栅格,这些栅格从0开始编号,一直到编号3279165,每一个编号都代表一个绝对的频域位置,这些编号就叫做NR-ARFCN。   编号和频率范围如…

汽车免拆诊断案例 | 2013款捷豹XF车偶尔无法起动

故障现象 一辆2013款捷豹XF车,搭载3.0 L机械增压发动机(型号为AJ126),累计行驶里程约为20.6万km。车主反映,该车发动机偶尔无法起动,同时组合仪表上会提示很多故障信息;多按几次起动按钮或等待…

【GeekBand】C++设计模式笔记1_介绍

课程目标 理解松耦合设计思想掌握面向对象设计原则掌握重构技法改善设计掌握GOF核心设计模式 什么是设计模式 目标:复用,以不变应万变 GOF设计模式 从面向对象谈起 深入理解面向对象 向下:深入理解三大面向对象机制 封装:隐藏…

linux驱动开发-磁盘管理

在Linux系统中,mount命令是一种非常常见且有用的工具,用于将文件系统连接到指定的挂载点。通过使用mount命令,管理员可以访问和管理存储设备上的文件和目录,包括硬盘驱动器、CD或DVD驱动器、闪存驱动器等。 一、mount基本语法 mo…

非线性规划及其MATLAB实现

目录 引言 非线性规划的基本模型 非线性规划的求解方法 非线性规划的MATLAB实现 例子:多目标优化问题的非线性规划求解 表格总结:MATLAB常用非线性规划函数 实例:使用MATLAB求解非线性投资决策问题 结论 引言 非线性规划(…

Haskell中的数据交换:通过http-conduit发送JSON请求

无论是客户端与服务器之间的通信,还是服务之间的API调用,都需要一种高效、可靠的方法来传输数据。在众多编程语言中,Haskell以其强大的类型系统和函数式编程特性,为构建可靠和高效的数据交换提供了坚实的基础。本文将介绍如何在Ha…

基于ssm+vue+uniapp的食堂线上预约点餐系统小程序

开发语言:Java框架:ssmuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:M…

亚信安慧AntDB-M 只读事务提交优化

一、事务操作介绍 数据库系统一般有三种开启和提交事务方法: 配置autocommit1时,隐式开启事务,每执行一条DML的SQL语句,数据库系统会隐式的自动执行commit逻辑提交事务,不需要用户输入commit执行提交。 配置autocomm…

Qt第三课 ----------按钮的控件属性

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

视频推拉流/直播点播EasyDSS平台安装失败并报错“install mediaserver error”是什么原因?

TSINGSEE青犀视频推拉流/直播点播EasyDSS平台支持音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务,在应用场景中可实现视频直播、点播、转码、管理、录像、检索、时移回看等。此外,平台还支持用户自行上传视频文件,也可…

openeuler-无法dnf安装包问题

有个openEuler release 22.09系统机器,需要dnf安装些包等 [rootlydb ~]# more /etc/openEuler-release openEuler release 22.09 [rootlydb ~]# dnf -y install lrzsz OS …

【C++】Stack

个人主页~ Stack 一、Stack的介绍和使用1、stack的介绍2、stack的使用3、stack的模拟实现 二、容器适配器1、什么是适配器2、容器适配器的使用 三、deque1、原理介绍2、deque的使用3、deque的缺陷 一、Stack的介绍和使用 1、stack的介绍 stack详细解释 stack是一种容器适配器…

onlyoffice 使用记录(前端开发角度)

前端和Web文档生成器服务器交互 对于与 Web 文档生成器服务的交互,使用 POST 请求。 请求参数在请求正文中以 JSON 格式输入。 请求被发送到 https://documentserver/docbuilder 地址,其中 documentserver 是安装了 ONLYOFFICE 文档服务器的服务器的名称…

创新实验报告VC++案例开发十二生肖的俄罗斯方块智力游戏完整代码设计方案

一.项目名称 十二生肖俄罗斯方块 二.开发背景: 俄罗斯方块是一个很低古老的一个小游戏,到但今日它还有很大的魅力。 三.技术路线或工作原理: 采用的软件及开发平台 Micosoft Visual 6.0 项目的总体方…