目录

STM32中断

NVIC 中断控制器

NVIC优先级分组

EXTI 外部中断

AFIO 复用IO口

外部中断/事件控制器(EXTI)框图


STM32中断

        在STM32微控制器中,共有68个可屏蔽中断通道,涵盖了多个外设,如外部中断(EXTI)、定时器(TIM)、模拟数字转换器(ADC)、串行外设接口(USART)、串行外设接口(SPI)、I²C总线、实时时钟(RTC)等。
        这些中断通道的管理由嵌套向量中断控制器(NVIC)负责。NVIC提供了统一的中断管理机制,允许对每个中断通道设置16个可编程优先级。这些优先级可以通过分组进行配置,用户可以设定中断的抢占优先级和响应优先级,从而实现对中断的精细化控制。这种机制有助于在复杂系统中合理地调度中断,确保实时性和系统响应性。

NVIC 中断控制器

        NVIC(Nested Vectored Interrupt Controller)嵌套向量中断控制器,是 Cortex-M 内核中的一部分,用于管理中断的触发、优先级排序和 CPU 响应。
简而言之:
        NVIC 是 STM32 中用来 统一管理各个中断事件 的模块,决定了“谁能打断 CPU”、“什么时候打断”、“打断完谁先执行”。

NVIC 的核心功能

功能说明
中断使能/屏蔽可以启用或关闭某个中断源
中断优先级管理每个中断可以分配优先级(0~15)
中断响应控制控制 CPU 响应中断的方式
中断挂起清除手动触发/清除挂起中断

中断源外设
包括:
EXTI:外部中断(如按键触发)
TIM:定时器(溢出中断、PWM更新中断)
ADC:模数转换完成中断
USART:串口接收/发送完成中断
这些外设都可以产生中断信号。

黑色 “n” 路线:中断请求线
每个外设可能有多个中断类型(如 TIM1 有更新中断、比较中断等),这些中断通过中断请求线发给 NVIC。

NVIC 模块
NVIC 收到多个中断请求后:
根据中断源设置的优先级
决定哪个中断先被 CPU 响应处理
若一个中断发生时有更高级的中断,也可以实现嵌套中断
NVIC 的优先级从 0(最高)~15(最低)。图中绿色框优先级0~优先级15 表示优先级调度队列。

橙色区域:STM32 内核(CPU核心 + NVIC)
NVIC 是属于 Cortex-M 内核的一部分,图中 NVIC 模块包裹在内核块中,最终中断是由 CPU 执行对应的中断服务函数(ISR)

NVIC优先级分组

        NVIC的中断优先级由优先级寄存器的4位(0~15)决定,这4位可以进行切分,分为高n位的抢占优先级和低4-n位的响应优先级
        抢占优先级高的可以中断嵌套,响应优先级高的可以优先排队,抢占优先级和响应优先级均相同的按中断号排队

分组方式抢占优先级(高位)响应优先级(低位)
分组00 位,取值为 04 位,取值为 0~15
分组11 位,取值为 0~13 位,取值为 0~7
分组22 位,取值为 0~32 位,取值为 0~3
分组33 位,取值为 0~71 位,取值为 0~1
分组44 位,取值为 0~150 位,取值为 0

EXTI 外部中断

        EXTI(External Interrupt)外部中断 是STM32微控制器中用于监测外部信号并触发中断的一种机制。EXTI模块能够监测指定GPIO引脚的电平信号变化,并在GPIO引脚发生电平变化时立即向NVIC发出中断请求。当NVIC接收到该请求后,会根据中断优先级的设置决定是否中断当前的CPU主程序,并执行与该中断关联的中断服务程序。
EXTI的主要特点:
支持的触发方式:
上升沿触发: 当GPIO引脚的电平从低电平变为高电平时触发中断。
下降沿触发: 当GPIO引脚的电平从高电平变为低电平时触发中断。
双边沿触发: 当GPIO引脚的电平发生变化,无论是从低到高,还是从高到低时都会触发中断。
软件触发: 可以通过软件命令触发中断,不依赖GPIO引脚的电平变化。
支持的GPIO口:
        EXTI可以监测几乎所有的GPIO口,包括STM32的所有引脚。但是同一个GPIO引脚不能同时触发多个中断通道。一个引脚只能与一个中断通道绑定。
中断通道:
        EXTI模块支持最多16个GPIO引脚触发的外部中断,另外还包括一些特殊的触发源,如PVD(电压检测输出)、RTC闹钟、USB唤醒和以太网唤醒等。
触发响应方式:
        EXTI不仅支持传统的中断响应,还支持事件响应。在事件响应模式下,系统可以响应外部信号的变化,但并不一定中断当前的CPU任务。根据配置,可以选择不同的响应方式来满足不同的应用需求。

        总之,EXTI外部中断功能能够监测GPIO引脚的电平变化,并通过不同的触发方式(上升沿、下降沿、双边沿或软件触发)来生成中断请求,经过NVIC的裁决后,CPU可被打断并执行相关的中断服务程序。EXTI模块支持多种GPIO口,并能够处理多种外部信号触发,灵活地支持不同的响应模式。

从 GPIO 到中断触发的完整路径:
GPIOx → AFIO(引脚选择)→ EXTI(边沿检测)→ NVIC(优先级管理)→ CPU 执行中断服务函数

GPIO 外设输入端口(GPIOA、GPIOB、GPIOC…)
每个 GPIO 端口有 16 个引脚(0~15)
这些引脚可以作为普通输入,也可以配置为中断触发输入
但多个端口(如 PA0、PB0、PC0)不能同时映射到同一个 EXTI0 线,需要选择谁占用

AFIO 模块(Alternate Function IO)
AFIO:中断引脚选择器
它的作用是告诉 EXTI 哪个 GPIO 引脚连接到哪一条 EXTI 线。
关键点:
STM32F1 的 EXTI 有 16 条(EXTI0 ~ EXTI15)
每条 EXTI 线最多只能挂接一个引脚
AFIO_EXTICRx 寄存器用来设置:
例如 EXTI0 ← PA0 或 PB0 或 PC0,由软件配置

EXTI 模块(边沿检测与中断控制器)
EXTI = External Interrupt/Event Controller
它负责:
监控外部信号的上升沿 / 下降沿
将触发事件发出中断请求
将中断信号传递给 NVIC
还可以控制:
是否屏蔽中断(IMR)
是否只作为事件触发(EMR)

AFIO 复用IO口

        在 STM32 微控制器中,AFIO(Alternate Function I/O)模块是一个非常关键的外设控制单元,主要负责 引脚的复用功能选择与重定义。由于 STM32 的某些外设功能(如 USART、TIM、SPI 等)可以复用到多个不同的引脚上,因此需要通过 AFIO 模块来进行合理的映射和配置。
AFIO 主要完成以下两个核心任务:
        复用功能引脚的重映射:当默认的外设引脚与实际设计冲突时,可以通过 AFIO 对这些引脚的映射关系进行重新定义,将某个功能分配到另一个引脚上。例如,可以将 USART1 的 Tx/Rx 引脚从默认的 PA9/PA10 重映射到其他可选引脚。
        外部中断引脚的选择(EXTI 配置):STM32 的 EXTI(外部中断控制器)支持将 GPIOA、GPIOB、GPIOC 等多个端口的同一编号引脚(如 PA0、PB0、PC0)接到同一条 EXTI 线(如 EXTI0)。而 AFIO 则负责选择当前哪一个具体的引脚与某条 EXTI 中断线相连。

外部中断/事件控制器(EXTI)框图

这张图主要完成了两件事:
1. 检测外部输入信号是否发生边沿变化(上升/下降)
2. 如果检测到了,决定是否向 NVIC 发起中断或事件触发
整体流程:从输入引脚 → EXTI → 中断或事件
【1】边沿检测电路
来自 GPIO(或其他模块)的电平输入信号进入。
通过上升沿触发寄存器和下降沿触发寄存器设置:
是否对上升沿、下降沿敏感。
一旦检测到配置的边沿变化,输出一个触发信号。

【2】生成中断或事件请求
边沿检测信号经过两个分支:
A)进入中断控制通路(上面那条线)
请求挂起寄存器(PR):记录这次中A)进入中断控制通路(上面那条线)断事件发生了
中断屏蔽寄存器(IMR):决定这个中断能否被 NVIC 接收
如果没有被屏蔽 → 送到 NVIC,启动中断服务函数
B)进入事件控制通路(下面那条线)
事件屏蔽寄存器(EMR):决定是否产生“事件信号”
如果允许事件 → 送入 脉冲发生器(用于触发 DMA 或其他模块)

【3】软件触发支持
软件可直接写入 软件中断事件寄存器(SWIER),人为触发中断或事件,模拟一次外部信号触发。

【4】附加控制
所有寄存器都有 20 位(支持 EXTI0~EXTI19,F1 通常用前16个)
最终与门(AND)和或门(OR)控制是否允许请求生效

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

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

相关文章

WebApplicationType.REACTIVE 的webSocket

通用请求体类 Data ApiModel("websocket请求消息") public class WebSocketRequest<T> implements Serializable {private static final long serialVersionUID 1L;/*** 参考&#xff1a;com.mcmcnet.gacne.basic.service.common.pojo.enumeration.screen.AiB…

降本增效!自动化UI测试平台TestComplete并行测试亮点

在跨平台自动化测试中&#xff0c;企业常面临设备投入高、串行测试耗时长、测试覆盖率难以兼顾的困境。自动化UI测试平台TestComplete的并行测试引擎提供了有效的解决方案&#xff1a;通过云端海量设备池与CI/CD深度集成&#xff0c;实现多平台、多浏览器并行测试&#xff0c;显…

云、实时、时序数据库混合应用:医疗数据管理的革新与展望(上)

云、实时、时序数据库混合应用:医疗数据管理的革新与展望 1、引言 1.1 研究背景与意义 在信息技术飞速发展的当下,医疗行业正经历着深刻的数字化转型。这一转型不仅是技术层面的革新,更是关乎医疗体系未来发展方向的深刻变革。从医疗服务的提供方式,到医疗管理的模式,再…

代码随想录算法训练营十六天|二叉树part06

LeetCode 530 二叉搜索树的最小绝对差 题目链接&#xff1a;530. 二叉搜索树的最小绝对差 - 力扣&#xff08;LeetCode&#xff09; 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值之差…

自增主键为什么不是连续的?

前言 如果一个线程回滚&#xff0c;例如唯一键冲突的情况回滚时&#xff0c;回滚了sql语句&#xff0c;但是并没有把自增的值也-1。那么就会导致下一条插入的数据自增id出现了跳跃。 自增主键为什么不是连续的&#xff1f;前言执行时机为什么自增主键不是连续的为什么不回滚自…

OpenCV图像基本操作:读取、显示与保存

在图像处理项目中&#xff0c;图像的 读取&#xff08;imread&#xff09;、显示&#xff08;imshow&#xff09; 和 保存&#xff08;imwrite&#xff09; 是最基础也是最常用的三个操作。本文将详细介绍这三个函数的功能、用法和注意事项&#xff0c;并提供一个完整示例供读者…

.NET控制台应用程序中防止程序立即退出

在VB.NET控制台应用程序中防止程序立即退出&#xff0c;主要有以下几种常用方法&#xff0c;根据需求选择适合的方案&#xff1a; 方法1&#xff1a;等待用户输入&#xff08;推荐&#xff09; Module Module1Sub Main()Console.WriteLine("程序开始运行...") 这里是…

Vue3 + Three.js 极速入门:打造你的第一个3D可视化项目

文章目录前言一、环境准备1.1 创建Vue3项目1.2 安装Three.js二、Three.js核心概念速览三、实战&#xff1a;创建旋转立方体3.1 组件化初始化四、核心代码解析4.1 Vue3响应式整合技巧4.2 性能优化要点五、进阶功能扩展5.1 数据驱动控制5.2 加载3D模型六、常见问题解决七、资源推…

【设计模式】享元模式(轻量级模式) 单纯享元模式和复合享元模式

享元模式&#xff08;Flyweight Pattern&#xff09;详解一、享元模式简介 享元模式&#xff08;Flyweight Pattern&#xff09; 是一种 结构型设计模式&#xff08;对象结构型模式&#xff09;&#xff0c;它通过共享技术实现相同或相似对象的重用&#xff0c;以减少内存占用和…

驱动开发_2.字符设备驱动

目录1. 什么是字符设备2. 设备号2.1 设备号概念2.2 通过设备号dev分别获取主、次设备号的宏函数2.3 主设备号的申请静态申请动态分配2.4 注销设备号3. 字符设备3.1 注册字符设备3.2 注销字符设备3.3 应用程序和驱动程序的关系3.4 file_opertaions结构体3.5 class_create3.6 创建…

直播推流技术底层逻辑详解与私有化实现方案-以rmtp rtc hls为例-优雅草卓伊凡

直播推流技术底层逻辑详解与私有化实现方案-以rmtp rtc hls为例-优雅草卓伊凡由于我们的甲方客户要开始为我们项目产品上加入私有化的直播&#xff0c;这块不得不又捡起来曾经我们做直播推流的事情了&#xff0c;其实私有化直播一直并不是一件容易的事情&#xff0c;现在大部分…

一文读懂现代卷积神经网络—深度卷积神经网络(AlexNet)

目录 深度卷积神经网络&#xff08;AlexNet&#xff09;是什么&#xff1f; 一、AlexNet 的核心创新 1. 深度架构 2. ReLU 激活函数 3. 数据增强 4. Dropout 正则化 5. GPU 并行计算 6. 局部响应归一化&#xff08;LRN&#xff09; 二、AlexNet 的网络结构 三、AlexN…

JVM 垃圾收集算法全面解析

1. 引言1.1 为什么需要垃圾收集&#xff1f;在Java应用中&#xff0c;垃圾收集&#xff08;Garbage Collection&#xff0c;GC&#xff09;是一个至关重要的机制&#xff0c;它使得开发者不需要手动管理内存。与传统的语言&#xff08;如C或C&#xff09;不同&#xff0c;Java通…

Vmware中安装的CentOS7如何扩展硬盘大小

起初创建虚拟机时&#xff0c;大小设置不合理&#xff0c;导致我在尝试开源项目时空间不足重新扩展硬盘&#xff0c;不仅需要在虚拟机设置中配置&#xff0c;还需要在系统内重新进行分区一、虚拟机设置打开虚拟机设置→硬盘→扩展&#xff0c;将大小设置为自己期望的大小&#…

Python+MongoDB高效开发组合

如大家所知&#xff0c;Python与MongoDB的结合是一种高效的开发组合&#xff0c;主要用于通过Python进行数据存储、查询及管理&#xff0c;利用MongoDB的文档型数据库特性实现灵活的数据处理。下面让 Python 连接上 MongoDB&#xff1a;安装 PyMongo&#xff1a;pip3 install p…

【论文阅读】Masked Autoencoders Are Effective Tokenizers for Diffusion Models

introduce什么样的 latent 空间更适合用于扩散模型&#xff1f;作者发现&#xff1a;相比传统的 VAE&#xff0c;结构良好、判别性强的 latent 空间才是 diffusion 成功的关键。研究动机&#xff1a;什么才是“好的 latent 表征”&#xff1f;背景&#xff1a;Diffusion Models…

每日一SQL 【游戏玩法分析 IV】

文章目录问题案例执行顺序使用分组解决问题 案例 执行顺序 SQL 语句的执行顺序&#xff08;核心步骤&#xff09; 同一层级的select查询内部, 别名在整个 SELECT 计算完成前不生效 使用分组解决 select distinct s.product_id, Product.product_name from Sales sleft join …

内部文件审计:企业文件服务器审计对网络安全提升有哪些帮助?

企业文件服务器审计工作不仅对提升企业网络信息安全起到重要作用&#xff0c;还能对企业内部网络文件信息是否合规进行判断。因此企业文件服务器审计一直被高度重视。 一、文件服务器为何成为攻击焦点&#xff1f; 企业文件服务器通常集中存储财务报表、人事档案、研发资料、客…

FusionOne HCI 23 超融合实施手册(超聚变超融合)

产品介绍 FusionOne HCI作为实现企业信息一体化的IT基础设施平台&#xff0c;以“软硬件垂直深度集成和调优”、“快速部署”、“统一管理”的理念&#xff0c;提供应用融合部署&#xff0c;提升核心业务运作效率&#xff0c;降低整体采购成本。 FusionOne HCI代表了IT产品的…

AI算姻缘测算小工具流量主微信小程序开源

功能特点 响应式设计&#xff1a;完美适配各种移动设备屏幕尺寸 精美UI界面&#xff1a; 柔和的粉红色渐变背景 圆角卡片设计 精心设计的字体和间距 爱心图标点缀 动态效果&#xff1a; 点击按钮时的动画反馈 测算结果的平滑过渡动画 爱心漂浮动画 进度条动态填充 AI测算功能&a…