当前位置: 首页 > news >正文

STM32-外部中断浅析

本篇解释了STM32中断原理

MCU为什么需要中断

中断,是嵌入式系统中很重要的一个功能,在系统运行过程中,当出现需要立刻处理的情况时,暂停当前任务,转而处理紧急任务,处理完毕后,恢复之前的任务。

中断的优势:
在MCU和外设之间进行平衡
MCU的处理速度远高于外设,如果没有中断机制,系统将不得不定期检查外部设备状态,这是一种资源浪费。中断机制避免了不必要的轮询,仅在设备就绪时才进行处理。

快速响应外部事件:
在实时系统中,中断机制使得计算机能够即时响应外部事件,很多场景下,信号不会等待MCU处理完才消失,如果单个时间窗口没有对信号进行采集,原始信号就被新的信号覆盖了,因此中断对于实时数据处理至关重要。

STM32 如何实现中断

在这里插入图片描述
在这里插入图片描述
外部中断控制器框图
上图为STM32的外部中断控制器框图,可以从右至左来理解这个框图,从输入线为起点,信号从IO口到达边沿检测电路,边沿检测电路可以通过两个寄存器进行配置。
这两个寄存器用于设置中断的触发条件(上升沿触发,下降沿触发,上升沿下降沿同时触发),可以理解为这里就是设置条件,一旦输入满足条件,边沿检测电路就放行信号,否则不做任何动作。

接着往左,软件中断寄存器和边沿检测电路的输出通过OR门连接在了一起,这也意味着可以通过软件来触发这条输入线的中断。即使外部条件未满足,软件中断事件寄存器被设置,也能触发中断。这个经常被用于通过软件实现故障注入,以测试系统的功能是否满足需求。

接着往左,触发的中断信号会指向请求挂起寄存器,这里就等于高速NVIC,我要中断,请批准。
而它左侧的中断屏蔽寄存器则是用于设置,要不要开启对中断的响应。
当中断屏蔽寄存器没有被开启时,即使有对应的中断,NVIC也不会响应这个中断请求。
如果一路畅通无阻,信号就会进入NVIC中断控制器,在经过优先级排序后被MCU进行处理了。

往下看,会看到中断请求信号与事件屏蔽寄存器通过AND门连接在一起,这里是用于以中断触发事件。即可以通过脉冲发生器快速的去控制其他外设,比如点亮LED灯,拉低某个PIN脚的电平。

至此,中断信号的输入到中断请求的输出就梳理清楚了。
接下来看看在处理中断信号输入中STM32做了哪些设计,

AFIO

外部中断/事件线路映像(AFIO)
AFIO在STM32中主要完成选择中断引脚和引脚功能的重映射两种功能。由于芯片空间有限,为了更好的提高效率节省资源,并不是每一根引脚都有其对应的中断线,他们是共用的关系。
1.中断引脚选择
在这里插入图片描述
在MCU无法将每一个外部引脚都连接至内核的情况下,PIN脚以组的形式共用中断线(图中的EXTI0),可以看到PA0-PG0都连接至EXTI0,AFIO通过配置寄存器来选择具体哪个引脚连接至中断线。

2.引脚功能的重映射
在这里插入图片描述
STM32中,部分引脚能够通过AFIO进行重定义,以实现当前引脚下所能配置的其他功能,这一部分内容暂且不表。

NVIC

嵌套向量中断控制器(NVIC)是外设和MCU之间的桥梁,负责接收来自外设的中断,并根据中断优先级交给MCU进行处理

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Android Settings应用 PreferenceScreen 条目隐藏实现和简单分析
  • 102.qt qml-最全Table交互之多列固定、行列拖拽、自定义委托、标题交互使用教程
  • PostGIS2.4服务器编译安装
  • 宝塔面板运行Admin.net框架
  • linux ssh 远程执行shell 获取返回值
  • Objective-C 中的 isa 不再是简单的结构体指针
  • 树莓派pico入坑笔记,dht11使用及温湿度表制作
  • C语言从头学31——与字符串变量相关的几个函数
  • 各地户外分散视频监控点位,如何实现远程集中实时监看?
  • 大整数加法C++
  • STM32H7之DMD2D是个啥
  • 如何理解李彦宏说的”不要卷模型,要卷应用
  • 绝区伍--2024年AI发展路线图
  • 模拟防止重复提交
  • 用智能方法设计量子点半导体光放大器
  • 网络传输文件的问题
  • [nginx文档翻译系列] 控制nginx
  • docker-consul
  • JavaScript 基础知识 - 入门篇(一)
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • 编写符合Python风格的对象
  • 从输入URL到页面加载发生了什么
  • 大主子表关联的性能优化方法
  • 对超线程几个不同角度的解释
  • 给github项目添加CI badge
  • 给初学者:JavaScript 中数组操作注意点
  • 机器学习中为什么要做归一化normalization
  • 深入浏览器事件循环的本质
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 思维导图—你不知道的JavaScript中卷
  • 自定义函数
  • 阿里云重庆大学大数据训练营落地分享
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • !!java web学习笔记(一到五)
  • ## 1.3.Git命令
  • #QT 笔记一
  • (4)Elastix图像配准:3D图像
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (超详细)语音信号处理之特征提取
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (算法设计与分析)第一章算法概述-习题
  • (转)四层和七层负载均衡的区别
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • (自用)gtest单元测试
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .net core 连接数据库,通过数据库生成Modell
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • @SpringBootApplication 注解