STM32中断系统详解

news2024/10/6 4:06:13

系列文章目录

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.coloradmin.cn/o/1638716.html

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

相关文章

信息技术内涵及意义

一、信息技术及其演进趋势 (一)信息技术概况概念 信息技术(Information Technology,IT)指“应用在信息加工和处理中的科学、技术与工程的训练方法与管理技巧;上述方法和技巧的应用;计算机及其…

mac idea 下载spring 源码遇到的问题

一、Kotlin: warnings found and -Werror specified 这个问题网上看了很多文章多说是缺少cglib、objenesis包。然后执行了 实际还是没有什么用 解决: 最后自己看了一下前面一个警告。说的就是版本太低。所以我觉得是这个前置问题导致的 然后搜索了改这个Kotlin版本…

《ElementUI 基础知识》el-tabs header 监听鼠标中键滚动时左右滑动(ElementPlus同样适用)

前言 收到需求,可监听 el-tabs 头在鼠标 hover 时。滑动鼠标中键,可左右滑动! 效果 鼠标中键上下滑动时;向上滑,向左移动;向下滑,向右移动; 实现 代码56 - 60行,添加…

前端开发框架Vue

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl Vue概述 Vue.js(简称Vue)是由尤雨溪(Evan You)创建并维护的一款开源前端开发框架。Vue以其轻量级、易上手和高度灵活的特点&…

【Transformer系列(1)】self-attention自注意力

一、self-attention流程 自注意力机制和注意力机制的区别在于,注意力机制中的Q(查询向量),K(键向量),V(值向量)是同源的,而一般的注意力机制,Q和…

【MATLAB】GUI初步设计

MATLAB界面设计 前言一、基本步骤1.1 创建GUI文件1.2 界面设计 总结 前言 为了完成图像处理的作业,简直就是生活不易啊 找到一个很棒的教学视频 基于MATLAB的GUI界面设计流程讲解 一、基本步骤 1.1 创建GUI文件 由于在写博文之前我已经创建好文件了,…

Istio基础知识

一、什么是Istio Istio 提供⼀种简单的⽅式来为已部署的服务建⽴⽹络,该⽹络具有 负载均衡、服务间认证、监控等功能,只需要对服务的代码进⾏⼀点或不需要做任何改动。想要让服务⽀持 Istio,只需要在您的环境中部署⼀个特殊的 sidecar 代 理&…

【Linux驱动】USB协议

🐱作者:一只大喵咪1201 🐱专栏:《Linux驱动》 🔥格言:你只管努力,剩下的交给时间! USB协议 😼认识USB🙀USB的电气信号低速和全速信号电平低速和全速的数据信…

2024-5-1我把QQ群聊天记录分析工具重写了一下

【下载地址】 https://www.lanzoub.com/b00rn0g47e 密码:9hww 【项目背景】 2020年我用Tkinter写过一个QQ群聊天记录分析的工具exe,后续也写过一个纯JS前端的版本,前阵子有个用户反馈不能用了,顺便看能不能加入一个分析关键词的功能&…

基于Python的在线学习与推荐系统设计与实现(论文+源码)-kaic

题目:在线学习与推荐系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本在线学习与推荐系统就是在这样的大环境下诞生&#xff0…

安装库后JupyterLab一直报ModuleNotFoundError问题解决

背景: 先安装的Python3.10,安装在默认路径: C:\Users\#用户名省略#\AppData\Local\Programs\Python\Python310\ 后安装的Anaconda,更改过路径在D盘: D:\ProgramData\anaconda3 此时C盘Python安装路径下Scripts文件…

十二、视觉内容生成模型

1 判别式模型和生成式模型 1. 判别式模型 学习策略函数 Y f ( X ) Yf(X) Yf(X)或者条件概率 P ( Y ∣ X ) P(Y|X) P(Y∣X)不能反映训练数据本身的特性学习成本低,需要的训练样本少无法转为生成式 2. 生成式模型 学习联合概率密度分布 P ( X ∣ Y ) P(X|Y) P(X∣…

【通信中间件】Fdbus HellWorld实例

Fdbus实例教程 Fdbus简介 Fdbus 全称 Fast Distributed Bus(高速分布式总线),提供IPCRPC功能。适用于多种OS: LinuxQNXAnroidOSWindow Fdbus本质是Socket,IPC基于Unix domain socket,RPC基于TCP。使用G…

Elasticsearch 索引 blocks:深入探讨数据保护

Elasticsearch 作为搜索和分析数据的首选分布式引擎在技术领域脱颖而出,尤其是在处理日志、事件和综合文本搜索时。 它的与众不同之处在于它如何让你使用各种块选项调整对其索引的访问。 这对于那些负责技术项目的人(比如管理员和编码员)来说…

AI手机,走入小径分岔的花园

博尔赫斯在他的成名作《小径分岔的花园》里,描述了一种奇妙的世界观:一个可能性被选择之后,出现了许多不同的后世,许多不同的时间。 在现实世界中,选择不会如此神奇。但站在岔路口的抉择,也一定会带来结果的…

【Week-Y7】使用自己的数据集训练YOLO-v8

文章目录 一、官方环境配置与测试1. 配置环境2. 用官方图片测试(图片下载失败)3. 用本地图片测试,检查配置的环境是否可用 二、使用自己的数据集进行训练测试1. 执行split_train_val.py文件2. 执行python .\voc_label.py文件3. 创建fruit.yam…

本地搭建llama大模型及对话UI

环境说明:MBP 2023 M2Pro芯片 用到的工具/组件/技术:ollama、llama3:8b、docker、open-webui 1.下载ollama ollama官网下载地址:https://ollama.com/download 到ollama官网地址下载对应操作系统版本的ollama平台,按照安装指引…

python报错SyntaxError

如果报这个错, 在你的相应的demo.py文件首行输入下面的,可以多试一下,之后就好了。 这个解决方法也是参考其他大佬的做法,不知道为什么python中#是注释,这个也会起作用。 然后就神奇的发现问题解决了。发现下面的代码…

天地图路径规划功能实现

目录 1、天地图路径规划2、路径规划3、参数说明4、Demo 1、天地图路径规划 天地图Web服务API为用户提供HTTP/HTTPS接口,即开发者可以通过这些接口使用各类型的地理信息数据服务,可以基于此开发跨平台的地理信息应用。 Web服务API对所有用户开放。使用本…