STM32 外部中断

news2024/11/24 11:14:30

STM32 外部中断

中断系统

  • 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行

    • 中断就是在正常主程序执行的某个时刻,发生了中断触发条件,比如对于外部中断来说,可以是引脚发生了电平跳变,对于定时器来说,可以是定时时间到了。当这些事件发生时,情况比较紧急,比如外部中断来了,如果不及时处理,下一个跳变信号就跟着过来了。比如串口接收中断来了,如果不及时读取接收到的数据,那下一个数据再过来,就会把原来的数据覆盖掉。
    • 所以我们希望当中断满足条件时,CPU能够立刻停下当前执行的程序,转而去处理这些中断事件的程序。比如,外部中断来了,我想要计次,那就变量++,串口中断来了,我就把接收到的数据转存起来。当这些紧急事件处理完成后,CPU还能回到原来停下的地方继续运行。
    • 使用中断系统,能够极大地提高程序的效率,比如如果没有中断系统,为了防止外部中断被忽略或者串口数据被覆盖,那主程序就只能不断地查询是否有这些事件发生,不能再干其他事情了。比如没有定时器中断,那主程序只有靠Delay函数,才能实现定时的功能。但有了中断系统之后,主程序就可以放心执行其他事情,有中断的时候再去处理,这样效率就会大大提升。
  • 中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源

    • 中断优先级是根据程序设计的要求,自己设置的,中断优先级是为了在多个中断同时申请时,判断一下,应该先处理哪个,如果事件非常紧急,那就把优先级设置高一些,如果不是那么紧急,那就可以把优先级设置低一些,这样可以更好地安排这些中断事件,防止紧急的事件被别的中断耽误。
  • 中断嵌套:当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回

    • 这种把中断程序再次中断的现象,就叫做中断嵌套,中断嵌套也是为了照顾非常紧急的中断的,如果CPU已经在执行某个中断程序了,这时又发生了一个非常紧急的中断,那这个中断就可以把当前的中断程序进行二次中断,这样新的紧急中断就可以立即被执行了。能否进行中断嵌套,也是由中断优先级来决定的。

中断执行流程

在这里插入图片描述

在这里插入图片描述

STM32中断

  • 68个可屏蔽中断通道(中断源),包含EXTI、TIM、ADC、USART、SPI、I2C、RTC等多个外设

  • 使用NVIC统一管理中断,每个中断通道都拥有16个可编程的优先等级,可对优先级进行分组,进一步设置抢占优先级和响应优先级

在这里插入图片描述

在这里插入图片描述

NVIC基本结构

  • NVIC嵌套中断向量控制器,用来统一分配中断优先级和管理中断的,NVIC是一个内核外设,是CPU的小助手。

    • STM32的中断非常多,如果把这些中断全部接到CPU上,那PCU还得引出很多线进行适配,设计上就很麻烦,并且如果很多中断同时申请,或者中断很多产生了拥堵,CPU也会很难处理,毕竟CPU主要是用来运算的。
    • NVIC有很多输入口,有多少个中断线路,都可以接过来,比如这里可以接到EXTI、TIM、ADC、USART等等。

    /n表示一个外设可能会同时占用多个中断通道,所以这里有n条线。然后,NVIC只有一个输出口,NVIC根据每个中断的优先级分配中断的先后顺序。之后,通过这一个输出口告诉CPU你该处理哪个中断。对于中断先后顺序分配的任务,CPU不需要知道。

在这里插入图片描述

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(Extern Interrupt)外部中断

  • EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序

  • 支持的触发方式:上升沿/下降沿/双边沿/软件触发

  • 支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断

    • 比如PA0和PB0不能同时使用,或者PA1、PB1、PC1这样的,端口GPIO_Pin一样的,只能选1个作为中断引脚。所以如果有多个中断引脚,要选择不同Pin的引脚。比如PA6和PA7、PA9和PB15、PB0和PB1这样的都可以。
  • 通道数:16个GPIO_Pin(对应GPIO_Pin_0~GPIO_Pin_15),外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒,总共20个中断线路。

    • 外部中断可以从低功耗的停止模式下唤醒STM32。
      • 对于PVD电源电压检测,当电源从电压过低恢复时,就需要PVD借助一下外部中断退出停止模式。
      • 对于RTC闹钟来说,为了省电,RTC定一个闹钟之后,STM32会进入停止模式,等闹钟响的时候再唤醒,这也需要借助外部中断。
      • USB唤醒、以太网唤醒也是同样的作用。
  • 触发响应方式:中断响应/事件响应

    • 如果选择中断响应,就是申请中断,让CPU执行中断函数
    • 如果选择事件响应,那外部中断的信号就不会通向CPU了,而是通向其他外设,用来触发其他外设的操作。比如触发ADC转换、触发DMA等。
    • 中断响应是正常的流程,引脚电平变化触发中断,事件响应不会触发中断,而是触发别的外设操作,属于外设之间的联合操作。

EXTI基本结构

  • GPIO外设,比如GPIOA、GPIOB、GPIOC等等,每个GPIO外设有16个引脚,所以进来16根线。但是EXTI模块只有16个GPIO通道,所以会有一个AFIO中断引脚选择的电路模块。
  • AFIO就是一个数据选择器,它可以在GPIO外设的16个引脚里选择其中一个连接到后面EXTI的通道里,所以相同的Pin_x不能同时触发中断,因为PA0,PB0,PC0这些,通过AFIO选择之后,只有其中一个能接到EXTI的通道0上。同理,PA1、PB1、PC1这些,也只能有一个,连接到通道1上。
  • 通过AFIO选择之后的16个通道,就接到了EXTI边沿检测及控制电路上。同时PVD、RTC、USB、ETH这四个外设也是并列接进来的。这些加起来,就组成了EXTI的20个输入信号。
  • 然后经过EXTI电路之后,分为了两路输出
    • 通向NVIC,用于触发中断
      • 为了节省资源,外部中断的9~5和15~10,分到了一个通道里,也就是说外部中断的9~5和15~10会触发同一个中断函数。在编程的时候,我们在这两个中断函数里,需要再根据标志位来区分到底是哪个中断进来的。
    • 通向其他外设,这就是用来触发其他外设操作的,也就是事件响应。

在这里插入图片描述

AFIO复用IO口

  • AFIO主要用于引脚复用功能的选择和重定义,也就是数据选择器的作用

  • 在STM32中,AFIO主要完成两个任务:复用功能引脚重映射(将默认复用功能的引脚转换到重定义的位置上来)、中断引脚选择

在这里插入图片描述

EXTI框图

  • 20根输入线首先进入边沿检测电路,在上面的上升沿寄存器和下降沿寄存器可以选择是上升沿触发还是下降沿触发或者双边沿触发。
  • 接着触发信号进入到或门的输入端,同时,软件中断事件寄存器也接在或门上,也就是任意一个为1,或门就可以输出1。
  • 触发信号通过或门后,兵分两路
    • 一路触发中断,触发中断首先会置一个请求挂起寄存器,相当于一个中断标志位,我们可以读取这个寄存器判断是哪个通道触发的中断,如果中断挂起寄存器置1,就会和中断屏蔽寄存器共同进入一个与门,然后至NVIC中断控制器。这里的与门实际上就是开关的作用,中断屏蔽寄存器给1,那请求挂起寄存器的输入就是直接输出,也就是允许中断。相反,中断屏蔽寄存器给0,就是不允许中断。
    • 一路触发事件,事件屏蔽寄存器进行开关控制,最后通过一个脉冲发生器,到其他外设。脉冲发生器就是给一个电平脉冲,用来触发其他外设的动作。

/20表示20根线,也就是20个通道,上面是外设接口和APB总线,我们可以通过总线访问这些寄存器。

在这里插入图片描述

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

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

相关文章

ABeam ESG News | 深化校企合作,ABeam中国ESG与可持续发展负责人做客上海财经大学ESG主题讲座回顾

ABeam上海财经大学 近日,ABeam中国ESG与可持续发展负责人杨丽楠女士受邀来到上海财经大学,作为外语学院30周年院庆系列学术活动的分享嘉宾,为近200名学生开展了ESG主题专场讲座。本次讲座探讨了ESG(环境、社会和治理)因…

使用CFimagehost源码搭建无需数据库支持的PHP免费图片托管私人图床

文章目录 1.前言2. CFImagehost网站搭建2.1 CFImagehost下载和安装2.2 CFImagehost网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测…

前端实现锥形渐变

锥形渐变 使用conic-gradient即可解决 渐变效果 width: 150px 和 height: 150px 设置元素的宽度和高度为 150 像素,使其呈现为一个正方形。border-radius: 50% 设置元素的圆角半径为 50%,使其呈现为一个圆形。border: 2px solid #000 设置元素的边框为…

研发效能认证学员作品:如何做好敏捷实践丨IDCF

作者:徐渊峰(现就职兴业数字金融服务(上海)股份有限公司 研发管理部) 研发效能(DevOps)工程师(中级)认证、A-CSM认证、ITIL4 认证、信息系统项目管理师 引言 有句话是…

k8s-16 k8s调度

调度器通过 kubernetes 的 watch 机制来发现集群中新创建且尚未被调度到 Node上的 Pod。调度器会将发现的每一个未调度的 Pod 调度到一个合适的 Node 上来运行。 kube-scheduler 是 Kubernetes 集群的默认调度器,并且是集群控制面的一部分如果你真的希望或者有这方面…

跳过开屏广告

前段时间各大知名启屏广告自动跳过 APP,诸如李跳跳、叮小跳、蹦跶、大圣净化、一指禅等因收到律师函而停止更新维护的事情闹得人心惶惶 不少粉丝就开始担心起来「今后怎么办啊?」的问题 My My Love,Joshua Radin - Wax Wings 1 自定义规则 虽然 APP 被迫下架这事令人神伤,…

超多目标演化算法及其应用研究

超多目标优化的分类 基于算法的核心思想,我们将超多目标演化方法分为以下几类: 基于松弛的支配定义的方法(Relaxed domainance )、试图通过放松传统的支配定义来提升算法的选择压力 基于多样性的方法(Diversity &…

HCIP第一课--HCIA复习

目录 1. OSI 模型 OSI 模型: 开放式系统互联参考模型 2. 网络名词注解: 【1】封装,解封装 【2】TCP/IP: 【3】IEEE802.3数据链路层分类: 【4】访问一个谷歌(百度)服务器的流程? 【5】DHCP…

【Linux】使用timer_create()创建定时器发送信号并使用sigaction()处理信号

0x00 前言 最后更新时间&#xff1a;2023-10-16 0x01 主要函数及结构体介绍 1.sigaction函数 #include <signal.h> int sigaction(int signum, const struct sigaction *act,struct sigaction *oldact);功能&#xff1a; 用于改变进程接收到特定信号后的行为。 参数…

【Linux】chown命令使用

Linux chown&#xff08;英文全拼&#xff1a;change owner&#xff09;命令用于设置文件所有者和文件关联组的命令。 Linux/Unix 是多人多工操作系统&#xff0c;所有的文件皆有拥有者。利用 chown 将指定文件的拥有者改为指定的用户或组&#xff0c;用户可以是用户名或者用户…

分享微信聊天记录备份的2个方法!

很多时候&#xff0c;我们可能会因为一些原因不小心把微信聊天记录给弄丢&#xff0c;比如&#xff1a;卸载微信、清理了微信缓存、手滑误删、删除了微信好友等等。这对于常年使用微信的用户来说&#xff0c;无疑是一件头疼的事情。 为了防止意外发生导致数据丢失&#xff0c;…

Idea安装和使用教程

在本文中&#xff0c;我们将提供关于如何安装 IntelliJ IDEA 的详细步骤。如果您是初学者或只是想尝试一下 IDEA&#xff0c;我们建议您下载 Community 版。如果您需要更多高级功能&#xff0c;可以选择 Ultimate 版。 步骤一&#xff1a;下载 IntelliJ IDEA 首先&#xff0c;…

什么是运输报告?海运运输鉴定报告必须提供吗?MSDS+UN38.3报告是?

什么是运输报告&#xff1f;海运运输鉴定报告必须提供吗&#xff1f;MSDSUN38.3报告是&#xff1f; 什么是运输报告&#xff1f;海运运输鉴定报告必须提供吗&#xff1f;MSDSUN38.3报告是什么有什么区别&#xff1f; 运运输鉴定报告必须提供吗&#xff1f;一般MSDS、货物运输…

虹科方案 | 加州理工学院利用HK-TrueNAS开展地震研究

文章来源&#xff1a;虹科网络基础 阅读原文&#xff1a;https://mp.weixin.qq.com/s/jDzfSD4Px8sWecDyK8FiVw 客户背景 加州理工学院(CalTech)是世界顶尖的理工类科学研究型学府之一。加州理工学院地震实验室是加州理工学院地质与行星科学部(GPS)的一个分支机构&#xff0c;成…

云安全—云计算基础

0x00 前言 学习云安全&#xff0c;那么必然要对云计算相关的内容进行学习和了解&#xff0c;所以云安全会分为两个部分来进行&#xff0c;首先是云计算先关的内容。 0x01 云计算 广泛传播 云计算最早大范围传播是2006年&#xff0c;8月&#xff0c;在圣何塞【1】举办的SES&a…

40.同时最大在线人数问题求解(炸裂map)

思路分析&#xff1a; &#xff08;1&#xff09;对登录、登出数据构建map结构map(1, login_ts, -1, logout_ts)&#xff0c;使用炸裂函数对该map做炸裂处理 &#xff08;2&#xff09;炸裂后成为了两列&#xff0c;一列存储1or-1表示登录登出&#xff08;k&#xff09;&#x…

C++指针解读(9)-- void指针和NULL

1、void指针的概念 void * 这种指针称为“空类型指针”&#xff0c;它不指向任何具体类型的数据&#xff0c;只提供一个纯地址。void 指针必须强制类型转换成具体类型的指针才有意义。 int i 3; void* p &i;//printf(" %d\n", *p); //报错 printf(" %d\…

8月19日PMP成绩,预计10月16日公布!附查询入口、流程

PMP的考试成绩一般在考后6-8周即可查询&#xff0c;8月PMP的成绩预计会在北京时间10月16日晚上公布&#xff0c;具体时间以官方公告为准。 如何查询8月考试成绩&#xff1f; 渠道一&#xff1a;收到PMI邮件提醒 当你注册PMI所使用的邮箱收到一封PMI发来的&#xff0c;标题为…

测试培训机构「某峰」测评调查报告

测试培训机构「某峰」测评调查报告 ⭐文章简介一、机构测评之受访者介绍二、老师傅-机构测评10问&#xff01;第1问 你从哪里了解到这个培训机构&#xff1f;第2问 你为什么选择这家培训机构&#xff0c;它吸引你掏毛爷爷的点有哪些&#xff1f;第3问 回顾一下&#xff0c;从咨…