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.mzph.cn/diannao/5970.shtml

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

相关文章

专注 APT 攻击与防御—工具介绍Veil-Evasion

专注 APT 攻击与防御 - Micro8 系列教程项目地址:https://github.com/Veil-Framework/Veil-Evasion 1、Veil-Evasion Veil-Evasion 是与 Metasploit 生成相兼容的 Payload 的一款辅助框架,并可以绕过大多数的杀软。 Veil-Evasion 并没有集成在kali&am…

Java零基础入门到精通_Day 9

1.ArrayList 编程的时候如果要存储多个数据,使用长度固定的数组存储格式,不一定满足我们的需求,更适应不了变化的需求,那么,此时该如何选择呢? 集 合 集合类的特点:提供一种存储空间可变的存储模型,存储的…

微调Mistral 7B以实现命名实体识别 (NER)

文章来源:fine-tuning-mistral-7b-for-named-entity-recognition-ner 2024 年 4 月 19 日 在自然语言处理(NLP)领域,命名实体识别(NER)被认为是一项关键任务,应用范围广泛,包括信息…

WPF基础应用

WPF参考原文 MVVM介绍 1.常用布局控件 1.1 布局控件 WPF(Windows Presentation Foundation)提供了多种布局容器来帮助开发者设计用户界面,以下是一些常用的布局: Grid: Grid是最常用的布局容器之一,它允许你通过定…

ArcGIS小技巧—基于点数据的密度分析(含练习数据)

关于空间点数据的密度分析,Arcgis Map中提供了基础的点密度分析和核密度分析。核密度分析可以通过手动设置搜索半径,调整密度分布的合理性。 但有时由于实际工作的需要,我们需要对研究范围做特定划分,比如根据格网规则划分做密度…

计算机毕业设计hadoop+spark+hive知识图谱音乐推荐系统 音乐数据分析可视化大屏 音乐爬虫 LSTM情感分析 大数据毕设 深度学习 机器学习

黄河科技学院本科毕业设计 任务书 工 学部 大数据与计算机应用 科教中心 计算机科学与技术 专业 2018 级普本1/专升本1班 学号 学生 指导教师 毕业设计题目 基于实时音乐数据挖掘的个性化推荐系统设计与优化 毕业设计工作内容与基本…

Arcgis 数据分类+批量制作

1、计算统计数据 2、更改符号系统–做分类 右击图层属性–符号系统–已分类–分类 改为手动—设置分类 完成

vscode 插件 code settings sync(配置云端同步)

vscode 插件 code settings sync(配置云端同步) 电脑A和B,vscode配置都在A电脑上,此时你想要将A电脑的vscode配置同步到B电脑的vscode中 第一步:A电脑和B电脑都需要在VSCode中安装下图插件 code settings sync 第二步&…

钉钉手机端调试前端H5项目流程

此流程以Vue项目为例 一、操作步骤 在根目录下 vue.config.js 文件中将 devServer.host 设置为 0.0.0.0 // vue.config.js module.exports {devServer: {host: 0.0.0.0,...},...}本地启动项目,获取 Network App running at:- Local: http://localhost:8080/ -…

吴恩达深度学习笔记:深度学习的 实践层面 (Practical aspects of Deep Learning)1.9-1.10

目录 第二门课: 改善深层神经网络:超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)第一周:深度学习的 实践层面 (Practical aspects of Deep Learning)1.9 归一…

msmpi 高性能并行计算 移植并行细胞自动机报错

报错情况如图 代码来源 元胞自动机生命游戏C语言并行实现 – OmegaXYZ 稍微修改,因为相对路径在 msmpi 10.1.1 中失效 Microsoft Windows [版本 10.0.22000.2538] (c) Microsoft Corporation。保留所有权利。C:\Users\ASUS>mpiexec -n 9 "C:\Users\ASUS\D…

MacBook Pro 原生安装 Ubuntu 24.04 ARM 版

趁着休假整理家里闲置的设备,看到了一台许久不用的 M2 芯片的 MacBook Pro,想着或许应该把它改造成 ARMv64 的 CI/CD 构建机,于是就有了这篇文章。 本篇文章适用于 M1、M2 全系列的设备,包括:MacBook Air、MacBook Pr…

JMeter性能压测脚本录制

第一步:电脑打开控制面板设置代理服务器 第二步:jmeter的测试计划添加一个HTTP(S)脚本记录器 在脚本记录器里配置好信息,然后保存为脚本文件(.*表示限定) 此方框内容为项目地址(可改…

单链表经典算法

一,移除链表元素 思路一 遍历数组,如果遇到链表中的元素等于val的节点就执行删除操作 typedef struct ListNode ListNode;struct ListNode* removeElements(struct ListNode* head, int val) {if(headNULL){return NULL;} ListNode*pnewhead(ListNode*)m…

大数据之数据仓库技术:ETL工具和Kettle简介

大数据之数据仓库技术:ETL工具和Kettle简介 ETL简介ETL工具和KettleKettle家族 Kettle资源KettlePack 任务调度工具 ETL简介 ETL(Extract-Transform-Load): 在大数据技术领域内,用来描述将数据从 来源端 经过 抽取(extract), 转换(transform), 加载(loa…

【Vue】结合ElementUI实现简单数据请求和页面跳转功能

一、准备工作 1、创建一个Vue-cli程序 之前的博客有。各位看官姥爷,可以自查。 2、安装ElementUI 在创建Vue-cli程序的过程中,需要在控制台执行以下指令: #安装 element-ui npm i element-ui -S #安装 SASS 加载器 cnpm install sass-loa…

毫米波雷达多人呼吸心跳检测MATLAB仿真

本文基于TI的IWR1642毫米波雷达 2T4R MIMO阵列,通过实际采集数据算法仿真,实现多人呼吸心跳检测。 文章末尾给出了本文的仿真代码。 主要内容包含: (1)雷达参数设定 (2)ADC数据导入 &#xff08…

一对一WebRTC视频通话系列(一)—— 创建页面并显示摄像头画面

本系列博客主要记录WebRtc实现过程中的一些重点&#xff0c;代码全部进行了注释&#xff0c;便于理解WebRTC整体实现。 一、创建html页面 简单添加input、button、video控件的布局。 <html><head><title>WebRTC demo</title></head><h1>…

【算法基础实验】图论-深度优先搜索和深度优先路径

深度优先(DFS) 理论基础 深度优先搜索&#xff08;DFS, Depth-First Search&#xff09;是图和树的遍历算法中的一种&#xff0c;它从一个节点开始&#xff0c;沿着树的边走到尽可能深的分支&#xff0c;直到节点没有子节点为止&#xff0c;然后回溯继续搜索下一个分支。DFS …

ubuntu外置网卡配置AP模式

外置网卡RTL8811CU设置 UBUNTU使用RTL8811CU网卡&#xff08;包含树莓派&#xff09; 外置网卡配置AP模式流程 1. 检查网卡支持情况&#xff08;是否支持AP模式&#xff09; iw list找到以上部分&#xff0c;发现支持AP 2. 安装依赖 sudo apt-get update sudo apt-get in…