STM32中断系统详解

系列文章目录

STM32单片机系列专栏

C语言术语和结构总结专栏


文章目录

1. 中断基本概念

2. STM32中断

3. NVIC的基本组件

3.1 NVIC的基本组件

3.2 NVIC的优先级

4. EXTI外部中断

4.1 基本概念

4.2 基本结构

5. AFIO


1. 中断基本概念

中断(Interrupt)

  • 中断是一个信号,表示一个事件需要立即得到处理。这个信号可以由硬件(外部中断)或软件(内部中断)生成。在STM32微控制器中,中断可以由很多源触发,包括外部引脚(例如用户按下按钮),或者内部源如定时器溢出或数据接收完成。
  • 当中断发生时,如果它被使能(即允许中断),外部设备或内部模块(如计时器)会打断CPU的当前执行任务,保存当前的状态,强制CPU转而处理一个特定的任务(即中断服务程序)。
  • 中断服务完成后,CPU会从中断返回,恢复之前的状态,并继续执行之前被打断的任务。

中断优先级(Interrupt Priority)

  • 在系统中同时存在多个中断源时,必然存在一个优先级的概念。当两个或多个中断几乎同时发生时,CPU需要决定先服务哪一个中断。
  • 在STM32中,这由NVIC来管理。每个中断源都可以配置一个优先级,数字越低,优先级越高。当低优先级的中断正在被处理时,高优先级的中断发生将会打断当前中断服务程序,CPU将先去执行高优先级的中断服务程序。

中断服务程序(Interrupt Service Routine,ISR)

  • 中断服务程序是响应中断信号而执行的函数。这些函数是预先定义的,目的是对特定的中断事件做出快速反应。
  • 在编写ISR时需要特别注意效率,因为ISR的执行时间会影响系统的响应时间。另外,ISR应尽量简短,并避免执行复杂的任务或长时间的等待。

中断嵌套

  • 当一个中断程序正在运行时,又有了新的更高优先级的中断申请中断,CPU会暂停当前中断程序,转而去处理新的中断程序,处理完后依次进行返回。

中断标志

  • 每个中断源都有一个中断标志,该标志当中断事件发生时被设置。在处理中断时,通常需要在ISR中清除这个标志,否则中断请求会持续存在,导致中断服务程序不断被调用。

中断请求(Interrupt Request,IRQ)

  • 当外设需要CPU的注意时,它会发送一个中断请求到NVIC。如果这个中断被使能,且优先级满足要求,NVIC会通知CPU来处理这个请求。

2. STM32中断

中断源:

  • STM32提供多达68个可配置的中断源(不同的型号拥有的中断源数量也不一样),这意味着它可以响应来自68种不同来源的事件。这些中断源包括但不限于外部中断线(EXTI)、定时器(TIM)、模拟-数字转换器(ADC)、通用同步/异步收发器(USART)、串行外设接口(SPI)、I2C总线(I2C)、实时时钟(RTC)等。

NVIC(Nested Vectored Interrupt Controller):

  • NVIC是ARM Cortex-M内核的一部分,负责管理所有中断。它允许每个中断源都有自己的优先级设置,以及嵌套中断,即一个高优先级的中断可以打断正在运行的低优先级中断服务程序。
  • NVIC支持每个中断源的优先级分为16个或更多的优先级。这些优先级中,数值较小的优先级高,允许更高优先级的中断打断正在执行的较低优先级中断服务程序。

3. NVIC的基本组件

ARM Cortex-M微控制器,如STM32系列,包含一个称为嵌套向量中断控制器(NVIC)的高级中断管理器。NVIC是中断管理和优先级系统的核心,它允许每个中断线配置优先级和控制中断处理。

 

3.1 NVIC的基本组件

中断向量表(Interrupt Vector Table):

这是一个存储在固定内存位置的表,其中包含了所有中断和异常处理程序的入口地址。当特定的中断被触发时,处理器使用这个表来确定应该跳转到哪个地址来执行相应的中断服务程序(ISR)。

中断号(Interrupt Number):

每一个中断源都被分配了一个唯一的标识号。在STM32中,这个号码用于识别来自不同外设(如EXTI, TIM, ADC, USART等)的中断。

优先级寄存器(Priority Registers):

NVIC允许为每个中断分配一个优先级。中断的优先级确定了中断的响应顺序,高优先级中断可以打断低优先级中断的服务程序。在多任务系统中,这允许重要的任务可以优先于其他较不紧急的任务被处理。

中断使能寄存器(Interrupt Set-Enable Registers):

这些寄存器用于使能或禁用特定的中断。如果一个中断没有被使能,那么即使该中断被触发,处理器也不会响应它。

中断清除寄存器(Interrupt Clear-Enable Registers):

这些寄存器用于禁用中断,防止处理器响应已经发生的中断请求。

状态和控制寄存器(Status and Control Registers):

包含了用于控制中断状态的寄存器,如中断挂起(pending)和中断激活(active)状态标志。处理器通过检查这些状态来决定是否有中断需要处理。

3.2 NVIC的优先级

抢占优先级与响应优先级

  • 抢占优先级:决定了中断是否可以打断其他中断。一个中断可以打断抢占优先级更低(数字更大)的中断。
  • 响应优先级:在抢占优先级相同的情况下,用于决定中断处理的顺序。

优先级分组

在STM32微控制器中,NVIC允许把优先级分为几组,每组都包含一定数量的抢占优先级和响应优先级。分组方式有自己设定,具体分组情况如下:

分组方式抢占优先级响应优先级
分组00位,取值0(只有一个优先级)4位,取值0 - 15(16个子优先级)
分组11位,取值0 - 1(2个抢占优先级)3位,取值0 - 7(8个子优先级)
分组22位,取值0 - 32位,取值0 - 3
分组33位。取值0 - 71位,取值0 - 1
分组44位,取值0 - 150位,取值0

优先级分组的配置通常在系统初始化时进行设置,并且会影响整个系统中断响应的行为。开发者可以根据应用的需求和中断的特性来选择合适的优先级分组策略。例如,实时性要求高的系统可能会选择更多的抢占优先级来确保关键任务能够快速响应。

4. EXTI外部中断

4.1 基本概念

概述:

  • EXTI(External Interrupt)是用于处理从GPIO引脚或其他一些内置外设(如PVD、RTC和USB唤醒事件)传入的外部信号的中断系统。它可以被配置为响应特定的信号边沿(上升沿、下降沿或者两者)来触发中断。

触发机制:

  • 当配置的GPIO引脚检测到边沿变化时(例如从低电平变为高电平,或者相反),EXTI会产生一个中断请求。这个请求被发送到NVIC,由NVIC决定是否响应该中断。

触发响应方式:

  • 中断响应:正常流程,引脚电平变化触发中断。
  • 事件响应:外部中断的信号不会通向CPU,而是通向其他外设,不会触发中断,而且触发别的外设。

配置过程:

  • 开发者需要配置GPIO引脚作为外部中断输入,并指定响应的边沿类型。还需要在NVIC中启用对应的中断,并设置相应的优先级。STM32提供了多条EXTI线路,允许多个引脚或事件映射到不同的EXTI线路。这意味着STM32可以同时处理多个外部中断源。

通道数:

  • EXTI不仅限于16个GPIO_Pin,还可以管理来自于内置外设的中断,如电源电压检测(PVD)、实时时钟(RTC)的唤醒事件,或者USB的唤醒中断。
  • 但是相同的Pin不能同时触发中断,例如PA0,PB0,PC0中只有一个可以用于中断。

应用场景

  • 按键检测:当用户按下按钮时,产生一个中断,使CPU可以立即处理该事件。
  • 传感器信号:例如,当一个运动传感器检测到运动时,通过EXTI产生中断进行处理。
  • 低功耗模式唤醒:从休眠状态唤醒设备以响应外部事件。

4.2 基本结构

GPIOs:

  • 多个GPIO端口(如GPIOA、GPIOB、GPIOC等)可用作外部中断源。每个GPIO端口有多个引脚(通常为16个),每个引脚可以单独配置为中断输入。

AFIO(Alternate Function I/O):

  • AFIO是一个硬件模块,它可以映射或重新路由某些功能到不同的引脚。在中断上下文中,AFIO可用于选择哪个GPIO引脚将与哪个EXTI线路相关联。因为相同的Pin不能同时触发中断,例如PA0,PB0,PC0中只有一个可以用于中断。所以这就是AFIO的作用。

EXTI线路:

  • EXTI模块包含多个中断线路,每个线路对应于一个或多个GPIO引脚。例如,EXTI0可能对应于所有端口的第0个引脚(如GPIOA0、GPIOB0等)。这些EXTI线路可以单独配置来响应特定的事件(例如,上升沿或下降沿触发)。

NVIC(Nested Vectored Interrupt Controller):

  • 一旦外部事件触发了EXTI线路,相应的中断信号将被发送到NVIC。NVIC管理所有的中断请求,并根据设置的优先级决定执行哪个中断服务程序。

中断号:

  • 每个EXTI线路都分配有特定的中断号。这些号码用于在NVIC中识别不同的中断请求。
  • 这里注意,EXTI9 - 5会触发同一个中断函数,15 - 10也会触发同一个中断函数。

其他外设中断源:

  • 除了GPIO,还有其他外设(如PVD、RTC、USB、ETH等)可以作为中断源直接连接到EXTI。这意味着它们同样可以生成中断请求,尽管它们不通过GPIO路由。

5. AFIO

在STM32微控制器中,AFIO(Alternate Function I/O)是一个硬件模块,它允许用户重新映射内部外设到不同的引脚上。

例如,许多STM32设备的引脚都具有多个功能。一个GPIO引脚不仅可以作为普通的I/O引脚,也可以作为外部中断线(EXTI),或者作为其他复杂外设(如USART、SPI等)的通信引脚。AFIO就是用来配置这些复杂映射的。

对于外部中断来说,可能有多个GPIO引脚需要配置为中断输入,但实际上它们可能共享相同的中断线。举个例子,可能有PA0、PB0、PC0等,它们都希望能够映射到EXTI0中断线上。使用AFIO模块,你可以选择其中的任意一个来触发EXTI0中断。通常情况下,每个EXTI线路(如EXTI0、EXTI1、EXTI15)都可以连接到同一端口的相应引脚上(如PA0对应EXTI0,PA1对应EXTI1等)。但如果你想用PB0来触发EXTI0,就需要通过AFIO来进行重新映射。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

测试的分类(3)

目录 按照测试阶段测试 系统测试 冒烟测试和回归测试的区别 验收测试 单元测试, 集成测试, 系统测试, 回归测试之间的关系 是否按手工进行测试 手工测试 自动化测试 自动化测试和手工测试的优缺点 自动化测试优点 自动化测试缺点 手工测试优点 手工测试缺点 按照…

Oracle导出导入dmp等文件类型的多表数据的常用方法、遇见的常见问题和解决办法(exp无效sql???)

使用PLSQL执行导出表数据的时候有两种方法 1、使用Oracle命令【imp--exp】【impdp--expdp】 但是如果你的本机没有安装有Oracle数据库,使用的instant client远程连接服务器上的Oracle数据库时候,你没有Oracle数据库带有的exp.exe、imp.exe等扩展文件&a…

详解23种设计模式——工厂模式

工厂模式 | CoderMast编程桅杆工厂模式 设计思想 工厂模式是最常用的设计模式之一,属于创建型模式,将创建对象的权利交给了一个工厂类,从而提供了一种不使用构造方法的情况下创建对象的途径,无需指定要创建的具体类,将…

重仓比特币

作者:Arthur Hayes Co-Founder of 100x. 编译:liam ccvalue (下文中表达的任何观点均为作者的个人观点,不应作为投资决策的依据,也不应被视为参与投资交易的建议或意见)。 我们中断牛市常规节目,为您播报这…

Android14之修改编译vendor.img(二百零七)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

HTML列表、表格、表单

1.列表 列表分类&#xff1a;无序、有序、定义 2.无序列表&#xff08;unordered list&#xff09; ul嵌套li&#xff0c;ul是无序列表。li是列表条目。 ur标签里面只能包含li标签。 li里面可以包含任何内容。 3.有序列表&#xff08;ordered list&#xff09; <ol>…

OpenMesh 计算封闭网格体积

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 思路很是简单,就是计算一些四面体的有向体积(这些四面体均是基于网格中的三角形与原点组成的) ,至于体积的符号则来自于三角形是否指向原点方向来确定,即面片的法线方向(其中三角形的法线本身取决于顶点的顺序…

高频问题|如何给指定的表达式添加小括号避免优先级问题?

关注它&#xff0c;不迷路。 本文章中所有内容仅供学习交流&#xff0c;不可用于任何商业用途和非法用途&#xff0c;否则后果自负&#xff0c;如有侵权&#xff0c;请联系作者立即删除&#xff01; 1.问题 如题&#xff0c;如何给指定的表达式添加小括号避免优先级问题…

远程控制安卓手机:便捷、高效与安全的方法

在移动设备的领域里&#xff0c;远程控制安卓手机的能力也变得越来越重要。这种技术可以让我们在远程地点方便地操作手机&#xff0c;无论是处理紧急事务、帮助他人解决问题&#xff0c;还是仅仅为了享受科技带来的便利。本文将为你介绍2种便捷、高效且安全的方法&#xff0c;让…

MacOS通过命令行开启关闭向日葵远程控制的后台服务

categories: [Tips] tags: MacOS Tips 写在前面 经常有小伙伴问我电脑相关的问题, 而解决问题的一个重要途径就是远程了. 关于免费的远程工具我试过向日葵和 todesk, 并且主要使用向日葵, 虽然 MacOS 下要设置很多权限, 但是也不影响其丝滑的控制. 虽然用着舒服, 但是向日葵…

JS设计模式-透过现象看本质

JS设计模式-透过现象看本质 设计模式SOLID设计原则创建型构造器模式工厂模式 - 简单工厂工厂模式 - 抽象工厂&#xff08;开发封闭原则&#xff09;构造器和简单、抽象工厂的区别 单例模式原型模式 结构型装饰器模式适配器模式代理模式事件代理 - 事件冒泡虚拟代理 - 通过Image…

JAVA毕业设计136—基于Java+Springboot+Vue的房屋租赁管理系统(源代码+数据库)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootVue的房屋租赁管理系统(源代码数据库)136 一、系统介绍 本项目前后端分离&#xff0c;分为管理员、用户、工作人员、房东四种角色 1、用户/房东&#xff1a; …

开源博客项目Blog .NET Core源码学习(18:App.Hosting项目结构分析-6)

本文学习并分析App.Hosting项目中后台管理页面的_AminLayout.cshtml模版页面和登录页面。 _AminLayout.cshtml模版页面 后台管理页面中的大部分页面都使用_AminLayout.cshtml作为模板页面&#xff0c;如下图所示&#xff0c;后台页面的视图内容放置在表单中&#xff0c;使用la…

Java openrasp记录-01

例子1 https://github.com/anbai-inc/javaweb-expression 一个hook ognl、spel、MVEL表达式注入的例子 用的是asm5进行字节码修改 采用premain进行插桩&#xff0c;重写transform方法 expClassList是要hook的类&#xff0c;这里定义在MethodHookDesc 这里判断hook点通过类名…

Kafka 3.x.x 入门到精通(03)——对标尚硅谷Kafka教程

Kafka 3.x.x 入门到精通&#xff08;03&#xff09;——对标尚硅谷Kafka教程 2. Kafka基础2.1 集群部署2.2 集群启动2.3 创建主题2.4 生产消息2.4.1 生产消息的基本步骤2.4.2 生产消息的基本代码2.4.3 发送消息2.4.3.1 拦截器2.4.3.1.1 增加拦截器类2.4.3.1.2 配置拦截器 2.4.3…

RDD编程初级实践

参考链接 spark入门实战系列--8MLlib spark 实战_mob6454cc68310b的技术博客_51CTO博客https://blog.51cto.com/u_16099212/7454034 Spark和Hadoop的安装-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/138021948?spm1001.2014.3001.5501 1. spark-shell…

JAVAEE—HTTPS和ssl证书

0[toc] 什么是HTTPS HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层. HTTP 协议内容都是按照文本的方式明文传输的. 这就导致在传输过程中出现一些被篡改的情况而HTTPS则是新采用加密的方式进行传输 为什么需要HTTPS 为什么要使用HTTPS呢&#xff1f;这…

【SpringCloud】LoadBalance负载均衡服务调用快速入门

【SpringCloud】LoadBalance负载均衡服务调用快速入门 文章目录 【SpringCloud】LoadBalance负载均衡服务调用快速入门1. 概述2. 引入依赖3. 配置、验证3.1 配置3.2 验证 1. 概述 官网地址&#xff1a;点击跳转 Spring Cloud LoadBalancer 是由 SpringCloud 官方提供的一个开…

2024高级卫生职称考试报名时间汇总

20地报名时间汇总&#xff0c;其他时间安排见图 上海&#xff1a;4.23-5.24 黑龙江&#xff1a;4.23-5.24 陕西&#xff1a;4.23-5.24 重庆&#xff1a;4.23-5.24 浙江&#xff1a;4.23-5.24 20地报名时间汇总 甘肃&#xff1a;4.23-5.24 江西&#xff1a;4.28-5.10 河北&#…

五一劳动节活动策划案怎么写?

分享一个五一劳动节活动策划万能模板&#xff0c;直接照着写就好。 一、活动主题&#xff1a; 五一户外露营Party 二、活动时间&#xff1a; 五一节当天&#xff0c;上午点至下午点 三、活动地点&#xff1a; 城市郊外的公园或大型绿地 四、参与人员&#xff1a; 公司员…