【STM32 CubeMX】STM32中断体系结构
文章目录
- 前言
- 一、中断体系的比喻
- 二、中断的内部结构
- 2.1 EXTI
- 触发方式
- 2.2 NVIC
- 2.3 cpu与中断
- 2.4 外部中断控制器框图
- 上升沿触发选择寄存器
- 屏蔽/使能寄存器
- 等待处理寄存器
- 2.5 中断优先级
- 总结
前言
一、中断体系的比喻
STM32中断体系如下图所示:
一座大型建筑物,比如一座高楼大厦,代表整个 STM32 芯片。在这座建筑物中,有许多房间和走廊,每个房间都代表一个特定功能的模块或外设,比如 GPIO、UART 等。
GPIO(通用输入输出):想象每个房间都有窗户,用于与外界交流。这些窗户可以用来输入信息(外部信号)或输出信息(驱动外部设备)。GPIO 窗户可以被打开或关闭,以允许或阻止信息的流动。
EXTI(外部中断):有些房间有特殊的门,称为 EXTI 门。当外部事件发生时,比如有人敲门,这些门会触发一个中断,通知系统发生了某些重要的事情。
NVIC(中断向量控制器):NVIC 就像一个大厅,里面有一个信息中心,负责管理整栋大楼中发生的所有事件和紧急情况。当有门被触发时,信息中心负责通知大楼的其他部分,告诉它们如何处理这个事件。
UART(通用异步收发传输器):想象一个房间里有一个电话,可以用来和外界通信。UART 中断就像是电话铃声响起,通知你有人在打电话,你需要停下手头的工作去接听电话。
综合以上,整个 STM32 中断结构就像一座大楼,有许多房间(外设模块)和走廊(数据总线),以及信息中心(NVIC)来管理这些房间和走廊中发生的事件。GPIO、EXIT、NVIC、UART 等都是这座大楼中不同的部分,各自承担着不同的功能,共同构成了 STM32 的中断系统。
二、中断的内部结构
2.1 EXTI
中断的框图如下:
我们可以通过设置寄存器进而来设置指定的引脚接到exti中断上
比如我们可以设置EXTI0这四位寄存器来设置哪个引脚有EXIT,通过指定的值
比如:设置PA[X]我们要使用0x0000
如果我们设置0000,他就有下面这样的情节
比如说,PA0接上一个开关
你可以去配置是按下中断还是松开时中断,在EXTI这里。
你可以去配置触发方式:
- 上升沿触发
- 下降沿触发
- 双边沿触发
我们还要去使能EXTI,使能他是否能发给下一级的NVIC
触发方式
上升沿触发就是从低电平变成高电平
下降沿触发就是从高电平变成低电平
双边沿就是上升和下降都触发
2.2 NVIC
NVIC:Nested vectored interrupt controller,嵌套向量中断控制器。
在上面这个图中,有这么多中断,比如EXTI,UART串口等等
NVIC就是去控制这些中断谁先得到cpu的执行
我们可以配置里面的优先级
我们还可以进一步使能,是否传递给CPU
2.3 cpu与中断
cpu中有一个总开关,我们可以去配置CPU让他处理中断/紧张处理中断
cpu是怎么处理中断的?
在NVIC中,有一个向量表,里面存储着这些中断函数的地址,当CPU检测到中断,NVIC会发一个id给CPU,然后根据id,使用id,在NVIC的向量表里找到对应项,然后调用函数
2.4 外部中断控制器框图
PA0进来,其中Edge detect circuit为边缘检测电路
他就可以去检测上升下降沿了
上升沿触发选择寄存器
其中bit0如果写入1的话就代表使能上升沿触发
如果是0就是静止。那么对于下降沿也是一样的
屏蔽/使能寄存器
以EXTI0为例子,我们可以写bit0,来屏蔽(写0)/使能(写1)
等待处理寄存器
如果某一个EXTI发生了,在他对应的bit位会设置成1
比如EXTI0发送了,那么这个寄存器的bit0会设置成1表示中断已经发生了
2.5 中断优先级
在 NVIC 里,对于每一个中断,都有一个 8 位的寄存器被用来表示它的优先级。这个 8
位的寄存器,被分为 2 部分,分别表示:分组优先级(也叫抢占优先级)、子优先级。
分组优先级被用来判断:当前正在处理的中断,能否被打断。比如当前正在处理 EXT0
中断,它的分组优先级为 3;如果这时候发生了 EXT1 中断,它的分组优先级为 4(数值越
高,优先级越低),那么 EXT1 的中断就无法打断 EXT0,等 EXT0 的中断处理完毕,EXT1 的
中断才能被处理。但是,如果 EXT1 的分组优先级为 2,那么当前的 EXT0 中断就被“抢占”,
先执行 EXT1 的中断处理函数,再继续执行“被抢占的 EXT0”中断函数。
子优先级被用来判断:两个中断同时发生时,谁先被处理。还是以 EXT0、EXT1 为例,
如果它们同时发生了,那么分组优先级高的中断先被处理;如果分组优先级相同,那么子
优先级高的先被处理;如果连子优先级也相同,那么编号小的 EXT0 先被处理。
注意:如果 EXT0、EXT1 的分组优先级相同,是不会发生“抢占”的。比如 EXT0 中断
正在被处理,EXT1 紧接着被触发了,即使 EXT1 的子优先级高于 EXT0,EXT1 也不会抢占
EXI0。当 EXT0 被处理完毕,才轮到 EXT1 被处理。
总结
相关文章:

【STM32 CubeMX】STM32中断体系结构
文章目录 前言一、中断体系的比喻二、中断的内部结构2.1 EXTI触发方式 2.2 NVIC2.3 cpu与中断2.4 外部中断控制器框图上升沿触发选择寄存器屏蔽/使能寄存器等待处理寄存器 2.5 中断优先级 总结 前言 一、中断体系的比喻 STM32中断体系如下图所示: 一座大型建筑物…...

JAVA高并发——JDK的并发容器
文章目录 1、超好用的工具类:并发集合简介2、线程安全的HashMap3、深入浅出ConcurrentHashMap3.1、ConcurrentHashMap的内部数据结构3.2、put()方法的实现3.3、get()方法的实现 4、有关List的线程安全5、高效读写的队列:深度剖析ConcurrentLinkedQueue类…...

代码随想录算法训练营day17||二叉树part04、110.平衡二叉树 、257. 二叉树的所有路径 、404.左叶子之和
注意:迭代法,可以先过,二刷有精力的时候 再去掌握迭代法。 110.平衡二叉树 (优先掌握递归) 再一次涉及到,什么是高度,什么是深度,可以巩固一下。 题目:给定一个二叉树&am…...

three.js 3D可视化地图
threejs地图 可视化地图——three.js实现 this.provinceInfo document.getElementById(provinceInfo); // 渲染器 this.renderer new THREE.WebGLRenderer({antialias: true }); this.renderer.setSize(window.innerWidth, window.innerHeight); this.container.appendChild…...

Unity所有关于旋转的方法详解
前言:欧拉角和四元数的简单描述 我们在Inspector面板上看到的rotation其实是欧拉角, 我们将Inspector面板设置成Debug模式,此时看到的local Rotation才是四元数。 Unity中的欧拉旋转是按照Z-X-Y顺规执行的旋转,一组欧拉旋转过程中…...

Vue3
目录 一、 Vue3简介 1. 性能的提升 2. 源码的升级 3. 拥抱TypeScript 4. 新的特性 二、 创建Vue3工程 1. 基于 vue-cli 创建 2. 基于 vite 创建(推荐) 3. 一个简单的效果 三、Vue3核心语法 1. OptionsAPI 与 CompositionAPI (1)Options API …...

浅谈业务场景中缓存的使用
浅谈缓存 一、背景二、缓存分类1.本地缓存2.分布式缓存 三、缓存读写模式1.读请求2.写请求 四、缓存穿透1.缓存空对象2.请求校验3.请求来源限制4.布隆过滤器 五、缓存击穿1.改变过期时间2.串行访问数据库 六、缓存雪崩1.避免集中过期2.提前更新缓存 七、缓存与数据库一致性1.设…...

Itext生成pdf文件,html转pdf时中文一直显示不出来
之前使用freemark模板渲染ftl页面,转出的pdf中,css2有些样式好像不支持,比较常用的居中样式都没有效果,text-align:center 改造成使用html页面来转pdf,css2的样式可以生效,itext是不支持css3的弹性布局的ITextRenderer pdfRendere…...

题目 1138: C语言训练-求矩阵的两对角线上的元素之和
问题描述: 求矩阵的两对角线上的元素之和 样例输入: 3 1 2 3 4 5 6 7 8 9 样例输出: 25 问题分析: 因为奇数阶矩阵的主对角线和副对角线上的元素有重复,偶数阶矩阵的主对角线和副对角线上的元素无重复&#x…...

第6讲自定义icon实现
自定义icon实现 component下新建SvgIcon目录,再新建index.vue 定义svg-icon组件 <template><svg class"svg-icon" aria-hidden"true"><use :xlink:href"iconName"></use></svg> </template>&…...

花费200元,我用全志H616和雪糕棒手搓了一台可UI交互的视觉循迹小车
常见的视觉循迹小车都具备有路径识别、轨迹跟踪、转向避障、自主决策等基本功能,如果不采用红外避障的方案,那么想要完全满足以上这些功能,摄像头、电机、传感器这类关键部件缺一不可,由此一来小车成本也就难以控制了。 但如果&a…...

AUTOSAR OS TASK
什么是TASK? 我们在裸机中跑代码,程序永远只能单活动流水执行,当程序需要等待的时候,CPU就一直在waiting状态,无法高效的利用CPU,这个时候就引入了并发运行需求。一个系统能同时执行多个不同活动的系统叫做并发系统。其中这个系统中的每个并发执行的活动都由TASK(任务)…...

陇剑杯 2021刷题记录
题目位置:https://www.nssctf.cn/上有 陇剑杯 2021 1. 签到题题目描述分析答案小结 2. jwt问1析1答案小结 问2析2答案小结 问3析3答案 问4析4答案 问5析5答案 问6析6答案 3. webshell问1析1答案 问2析2答案 问3析3答案 1. 签到题 题目描述 此时正在进行的可能是_…...

前端常见的设计模式
说到设计模式,大家想到的就是六大原则,23种模式。这么多模式,并非都要记住,但作为前端开发,对于前端出现率高的设计模式还是有必要了解并掌握的,浅浅掌握9种模式后,整理了这份文章。 六大原则&…...
OpenAI视频生成模型Sora的全面解析:从ViViT、扩散Transformer到NaViT、VideoPoet
前言 真没想到,距离视频生成上一轮的集中爆发(详见《Sora之前的视频生成发展史:从Gen2、Emu Video到PixelDance、SVD、Pika 1.0》)才过去三个月,没想OpenAI一出手,该领域又直接变天了 自打2.16日OpenAI发布sora以来(其开发团队包…...

3个密码学相关的问题
一、离散对数问题(Discrete Logarithm Problem, DLP) 问题描述:给定 有限阿贝尓群 G中的2个元素a和b,找出最小的正整数x满足:b a ^^ x (或者证明这样的x不存在)。 二、阶数问题(O…...

5G网络eMBB、uRLLC、mMTC
ITU(国际电信联盟)于2015年9月正式定义了5G的三大应用场景:eMBB(增强型移动宽带)、uRLLC(低时延高可靠通信)、mMTC(海量物联网通信)。 eMBB是4G MBB(移动宽带…...

matplotlib图例使用案例1.1:在不同行或列的图例上添加title
我们将图例进行行显示或者列显示后,只能想继续赋予不同行或者列不同的title来进行分类。比较简单的方式,就是通过ax.annotate方法添加标签,这样方法复用率比较低,每次使用都要微调ax.annotate的显示位置。比较方便的方法是在案例1…...

nginx 日志改为json格式
nginx 日志改为json格式 场景描述效果变更旧样式新样式 场景描述 正常使用nginx时,使用默认的日志输出格式,对于后续日志接入其他第三方日志收集、清洗环节,因分隔符问题可能不是很友好。 xxxx - - [19/Feb/2024:11:16:48 0800] "GET …...

【DDD】学习笔记-应用服务
Eric Evans 为运用领域驱动设计的系统架构划定了层次,在领域层和展现层之间引入了应用层(Application Layer):“应用层要尽量简单,不包含业务规则或者知识,而只为下一层(指领域层)中…...

【医学大模型】MEDDM LLM-Executable CGT 结构化医学知识: 将临床指导树结构化,便于LLM理解和应用
MEDDM LLM-Executable CGT 结构化医学知识: 将临床指导树结构化,便于LLM理解和应用 提出背景对比传统医学大模型流程步骤临床指导树流程图识别临床决策支持系统 总结解决方案设计数据收集与处理系统实施临床决策支持 提出背景 论文:https://arxiv.org/p…...

YOLOV8改进系列指南
基于Ultralytics的YOLOV8改进项目.(69.9) 为了感谢各位对V8项目的支持,本项目的赠品是yolov5-PAGCP通道剪枝算法.具体使用教程 专栏改进汇总 二次创新系列 ultralytics/cfg/models/v8/yolov8-RevCol.yaml 使用(ICLR2023)Reversible Column Networks对yolov8主干进行重设计,里…...

FlinkSql一个简单的测试程序
FlinkSql一个简单的测试程序 以下是一个简单的 Flink SQL 示例,展示了如何使用 Flink Table API 和 Flink SQL 进行基本的数据流处理。 定义数据实体 CC : - CC 类表示数据流中的元素,包含两个字段: character (字符&a…...

二、ActiveMQ安装
ActiveMQ安装 一、相关环境二、安装Java8三、下载安装包四、启动五、其他命令六、开放端口七、后台管理 一、相关环境 环境:Centos7.9安装ActiveMQ版本:5.15.9JDK8 二、安装Java8 安装教程:https://qingsi.blog.csdn.net/article/details/…...

通俗易懂的L0范数和L1范数及其Python实现
定义 L0 范数(L0-Norm) L0 范数并不是真正意义上的一个范数,因为它不满足范数的三角不等式性质,但它在数学优化和信号处理等领域有着实际的应用。L0 范数指的是向量中非零元素的个数。它通常用来度量向量的稀疏性。数学上表示为…...

如何在30天内使用python制作一个卡牌游戏
如何在30天内使用python制作一个卡牌游戏 第1-5天:规划和设计第6-10天:搭建游戏框架第11-20天:核心游戏机制开发第21-25天:游戏界面和用户体验第26-30天:测试和发布附加建议游戏类型游戏规则设计界面设计技术选型第6-…...

VsCode指定插件安装目录
VsCode指定插件安装目录 VsCode安装的默认目录是在用户目录(%HomePath%)下的.vscode文件夹下的extensions目录下,随着安装插件越来越多会占用大量C盘空间。 指定VsCode的插件目录 Vscode安装目录: D:\Microsoft VS Code\Code.exeVscode插件安装目录&a…...

解决npm淘宝镜像到期问题
1 背景 由于node安装插件是从国外服务器下载,如果没有“特殊手法”,就可能会遇到下载速度慢、或其它异常问题。 所以如果npm的服务器在中国就好了,于是我们乐于分享的淘宝团队干了这事。你可以用此只读的淘宝服务代替官方版本,且…...

【JAVA】java泛型 详解
java泛型 详解 一、参数化类型(Parameterized Type):二. 泛型类(Generic Class):三. 泛型方法(Generic Method):四. 通配符类型(Wildcard Type)&a…...

基于RBAC的权限管理的理论实现和权限管理的实现
权限管理的理论 首先需要两个页面支持,分别是角色管理和员工管理,其中角色管理对应的是角色和权限的配合,员工管理则是将登录的员工账号和员工所处的角色进行对应,即通过新增角色这个概念,让权限和员工并不直接关联&a…...