STM32外部中断事件控制器-EXTI

news2024/11/15 21:11:37

EXTI简介:

        EXTI 是 External Interrupt 的缩写,表示外部中断事件控制器。EXTI 可以监测指定 GPIO 口的电平信号变化,并在检测到指定条件时,向内核的中断控制器 NVIC 发出中断申请。NVIC 在裁决后,如果满足条件,会中断CPU的主程序,使 CPU 转而执行 EXTI 对应的中断服务程序。
        EXTI 支持的触发方式:上升沿、下降沿、双边沿或软件触发。
        EXTI 支持所有的 GPIO 口,但需要注意的是,相同的 Pin 不能同时触发中断。例如,PA0 和 PB0 不能同时被配置为中断源。
        EXTI 提供了 16 个 GPIO_Pin 的中断线,以及额外的中断线如 PVD 输出、RTC 闹钟、USB 唤醒和以太网唤醒。

EXTI的基本结构:

EXTI框图:

EXTI有关寄存器函数:

         HAL_GPIO_EXTI_IRQHandler——用于处理外部中断请求(External Interrupt)

(EXTI的中断服务函数)

        它的主要作用是处理通过 GPIO 引脚触发的外部中断事件。

具体说明:
        1. 函数含义:HAL_GPIO_EXTI_IRQHandler`是 与 GPIO 外部中断相关的中断处理函数。当某个 GPIO 引脚配置为外部中断模式,并且在引脚上发生中断事件(如上升沿或下降沿),这个函数会被调用。

        2. 主要功能:这个函数的主要功能是调用相应的中断回调函数(HAL_GPIO_EXTI_Callback),以处理特定的中断事件。它内部首先会清除中断标志位,防止中断重复触发,随后会调用由用户实现的回调函数,这样用户可以在这个回调函数中编写具体的中断处理逻辑。

        3. 使用场景:
   - 当你需要响应外部信号(例如按键、传感器信号等)时,可以将某个 GPIO 引脚配置为外部中断模式。当信号触发中断时,系统会自动调用 `HAL_GPIO_EXTI_IRQHandler` 来处理这个中断。
   - 例如,如果一个按钮连接到某个 GPIO 引脚,当用户按下按钮时引脚电平变化,产生一个中断,这时 `HAL_GPIO_EXTI_IRQHandler` 函数会被执行,从而调用用户定义的中断回调函数来处理按钮按下的事件。

示例代码:

void EXTI0_IRQHandler(void)
{
    // 调用 HAL 库的中断处理函数
    HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
}

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    if (GPIO_Pin == GPIO_PIN_0)
    {
        // 在这里处理按钮按下的事件
        // 例如:点亮一个 LED
        HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);
    }
}

       

 __HAL_GPIO_EXTI_GET_IT是 STM32 HAL 库中的一个宏定义,用于获取指定 GPIO 引脚的中断标志位(Interrupt Flag)。

        它的主要作用是检查某个引脚是否触发了中断,判断这个引脚的中断事件是否已经发生。

(简单来说就是查询挂起寄存器的状态,并返回挂起寄存器的值)

具体说明:
1. 宏定义含义:`__HAL_GPIO_EXTI_GET_IT` 是一个宏,用于检查 EXTI(External Interrupt/Event Controller) 中的中断挂起寄存器(Pending Register),判断指定的 GPIO 引脚是否触发了中断。简单来说,它返回一个布尔值,表示该引脚的中断标志是否被置位。

2. 使用场景:
   - 当你在处理中断时,需要确定是哪一个引脚产生了中断,`__HAL_GPIO_EXTI_GET_IT` 可以用于判断特定引脚是否触发了中断。
   - 这在需要处理多个引脚的中断或需要手动检查某个中断状态时非常有用。

3. 使用方式:
   - 该宏的输入是某个 GPIO 引脚号(例如 `GPIO_PIN_0`, `GPIO_PIN_1` 等),它返回一个值,用于指示这个引脚的中断标志位是否被置位。

代码示例:
下面是一个使用 `__HAL_GPIO_EXTI_GET_IT` 的简单例子,展示如何在中断处理程序中使用这个宏来检查某个引脚的中断标志。

void EXTI0_IRQHandler(void)
{
    // 检查引脚 GPIO_PIN_0 是否触发了中断
    if (__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_0) != RESET)
    {
        // 处理 GPIO_PIN_0 的中断事件
        HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);

        // 清除中断标志位
        __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_0);
    }
}

在这个例子中:
- `__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_0)` 用于检查 `GPIO_PIN_0` 是否触发了中断。如果返回值不是 `RESET`,则说明该引脚的中断标志已经被置位。
- 如果中断确实发生了,执行相应的中断处理逻辑(例如,切换 LED 的状态)。
- 最后,通过调用 `__HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_0)` 来清除中断标志位,防止中断被重复触发。

void HAL_GPIO_EXTI_Callback——回掉函数

如果外部触发了中断,我们就需要回调中断处理函数

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

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

相关文章

峟思振弦式钢筋计在恶劣环境下的工作性能分析

在土木工程领域,尤其是建筑、桥梁、隧道等复杂结构的监测中,振弦式钢筋计作为一种高精度、高稳定性的测量仪器,扮演着至关重要的角色。尤其在恶劣环境下,其卓越的工作性能更是备受关注。本文将从耐久性、实时监控、安全性评估及适…

Vue 3 + GSAP:解锁高性能动画的神奇组合

在一个偶然的场景使用了 GSAP(GreenSock Animation Platform),感觉挺好玩的,在此浅浅记录一下。 GSAP 是一个功能强大的 JS 动画库,常用于创建高性能、流畅的动画。它不仅支持基本的动画,还提供了时间轴控…

SpringBoot日常:集成代码覆盖率测试工具JaCoCo

文章目录 简介开始集成1、pom添加依赖2、pom添加插件3、业务代码4、单元测试代码5、开始测试6、查看结果 如何排除不需要的路径?设置覆盖率目标并验证JACOCO的不足JACOCO改进版super-Jacoco代码覆盖率的知识扩展 简介 JaCoCo(Java Code Coverage&#x…

一把手告诉你联盟营销白帽电商广告借力NewsBreak头条优势

揭秘美国NewsBreak头条新闻推广联盟营销白帽电商广告优势 在当今数字化浪潮中,电商行业竞争日益激烈,各大平台纷纷寻求创新的推广方式以吸引更多商家入驻并提升用户购物体验。NewsBreak,作为美国一款领先的新闻聚合平台,凭借其庞…

静态代理与动态代理的区别与选择

在当今软件开发领域,代理模式作为一种重要的设计模式,广泛应用于增强现有对象功能、控制访问权限以及实现远程调用等场景。本文旨在深入探讨静态代理与动态代理之间的核心区别,帮助开发者理解两者在实现机制、灵活性、性能表现及适用场景上的…

HTML静态网页成品作业(HTML+CSS)——西点蛋糕介绍(5个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有5个页面。 二、作品演示 三、代…

MyBatis缓存机制 ▎特殊符号处理

前言: MyBatis 的缓存机制通过一级缓存和二级缓存显著提升系统性能。一级缓存在 SQL 会话中减少重复查询,二级缓存跨会话共享查询结果,但引入了数据一致性和内存管理的挑战。开发者需平衡性能与数据准确性。此外,MyBatis 还提供了多种方法来…

力扣经典题目之->二叉树的前序遍历

一:题目 解释: 1: 题目的要求就是我们return 一个数组,该数组里面的元素及其顺序就是 前序遍历二叉树 的元素及其顺序 比如:示例1的树,前序遍历的顺序应该是1 2 3,那么return 的数组里面的元素…

Java面试题--JVM大厂篇之JVM大厂面试题及答案解析(8)

💖💖💖亲爱的朋友们,热烈欢迎你们来到青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而我的博…

Linux开发环境搭建,虚拟机安装

开发环境搭建 一、VMware Workstation Pro软件简介 VMware Workstation Pro 是 VMware (威睿公司)发布的一代虚拟机软件,中文名称一般称 为 "VMware 工作站 ". 它的主要功能是可以给用户在单一的桌面上同时运行不同的操作系统…

安装WMware和Ubuntu并使用xShell连接

0、我的电脑配置 设备名称 hello 处理器 Intel(R) Core(TM) i7-10700K CPU 3.80GHz 3.79 GHz 机带 RAM 16.0 GB (15.9 GB 可用) 设备 ID 541EC230-9910-418C-9043-5FBBF8ED320C 产品 ID 00330-80000-00000-AA846 系统类型 64 位操作系统, 基于 x64 的处理器 笔和触控 没有可…

秃姐学AI系列之:残差网络 ResNet

目录 残差网络——ResNet 残差块思想 ResNet块细节 ResNet架构 总结 代码实现 残差块 两种 ResNet 块的情况 ResNet 模型 QA 由上图发现,只有当较复杂的函数类包含较小的函数类时,才能确保提高它们的性能。 对于深度神经网络,如果…

QGIS制图流程

在之前我们推送了QGIS的软件安装、插件安装、数据导入等基础操作,今天我们介绍一下QGIS的制图功能。QGIS的制图与ArcGIS Pro存在一定的区别,但是思路上相似。我们教程内容主要是参考QGIS官方文档: https://docs.qgis.org/3.34/en/docs/user_…

Android 中ebpf 的集成和调试

1. BPF 简介 BPF,是Berkeley Packet Filter的简称,最初构想提出于 1992 年。是一种网络分流器和数据包过滤器,允许早操作系统级别捕获和过滤计算机网络数据包。它为数据链路层提供了一个原始接口,允许发送和接收原始链路层数据包…

安卓中回调函数的使用

在Android开发中,回调函数是一种常见的编程模式,用于在某个任务完成时异步接收通知或数据。它们通常用于处理用户界面事件、完成网络请求、数据库操作或其他长时间运行的任务。回调(Callback)是一种允许某段代码通知另一段代码执行…

机器人学——机械臂轨迹规划-2

直线轨迹 线段转折点速度不连续 加速度状态讨论 double dot 多段直线轨迹,转折点利用二次方程转为圆弧 关键步骤 第一个线段处理 Vt V0 at , 此处的V0 0 , 利用函数连续性,左右速度相等,联立求解 sgn(x):符号函数 最后一个线段…

dubbo:dubbo服务负载均衡、集群容错、服务降级、服务直连配置详解(五)

文章目录 0. 引言1. dubbo负载均衡1.1 负载均衡算法1.2. dubbo负载均衡使用1.3 自定义负载均衡策略 2. dubbo服务容错2.1 8种服务容错策略2.2 自定义容错策略 3. dubbo服务降级(mock)4. dubbo服务直连5. 总结 0. 引言 之前我们讲解了dubbo的基本使用&am…

内部类java

内部类就是定义在一个类里面的类,里面的类可以理解成(寄生),外部类可以理解成(寄主)。 //外部类 public class people{//内部类public class heart{} } 内部类的使用场景、作用 1.当一个事物的内部&…

STM32学习笔记3---ADC,DMA

目录 ADC模拟数字转换器 规则组的四种转换模式 AD单通道 AD多通道 常用代码函数相关 DMA直接存储器 存取(访问) 两个应用 DMA存储器到存储器的转运 ADCDMA ADC模拟数字转换器 stm32数字电路,只有高低电平,无几V电压的概念…

MySQL:常用函数

MySQL:常用函数 日期时间函数字符串函数数学函数加密函数 在MySQL中,存在许多现成的函数,可以简化部分操作,本博客讲解MySQL中的常用函数。 日期时间函数 current_date current_date函数用于输出当前的日期: curren…