【STM32】中断优先级管理 NVIC

这篇文章是对 Cortex-M3 内核中断系统 和 STM32F1 系列 NVIC(嵌套向量中断控制器) 的解析说明。我将从结构清晰、层次分明的角度,对 NVIC 中断优先级分组的概念和 STM32F103 的实际情况做一个系统性的总结与叙述。

参考资料:

STM32F1xx官方资料:《STM32中文参考手册V10》---- 第9章 中断和事件
附图:
在这里插入图片描述

为什么一定需要中断?

中断的本质是打破“顺序执行”的限制,使 CPU 能在关键事件发生时立即响应,从而实现多任务、高实时性和高效率运行。

如果没有中断会发生什么?

假设没有中断,CPU 想要获取外设状态(比如按键、串口、传感器数据),怎么办?

那我们只能使用轮询(Polling):

while (1) {if (UART_GetFlag() == 1) {// 接收到数据}
}
使用这种方式的缺点:
CPU效率低	一直忙等,浪费资源
实时性差		响应时间取决于轮询频率
多任务困难	轮询一个设备时,其他任务无法执行
数据易丢失	如果轮询间隔太长,可能错过事件而中断则具备解决这些问题的优势:
高实时性		外设事件立即响应
高效率		CPU 空闲时间可执行主任务
多任务协作	支持 RTOS、任务调度
异步处理		外设与主程序解耦
可靠性提升	不易丢数据、不依赖轮询频率

引入中断的优势: 中断机制允许 CPU “只在需要时被打断”,避免无效等待。

中断触发后:

  1. CPU 自动跳转到中断服务函数(ISR)
  2. ISR 执行完毕后自动返回原来任务
  3. 响应迅速,处理高效

几乎所有操作皆离不开中断:

按键响应			用户按键瞬间触发		EXTI 外部中断
串口通信			接收到数据立即处理		USART 中断
定时任务			每秒触发一次事件		TIM 定时器中断
CAN 总线			收到帧立即解析		CAN 中断
操作系统调度		多任务切换			SysTick 定时器中断
没有中断有中断
一切顺序执行支持事件驱动
必须轮询外设被动等待变主动响应
单任务运行支持多任务调度
类比你每分钟看一次手机有没有来电(轮询) 手机响了你立刻接听(中断)
效率浪费精力,不及时 高效、及时响应

中断机制是从串行思维 → 并发思维的转变,是现代计算系统的基石。

中断是嵌入式系统中不可或缺的机制,它让 CPU 不再“苦等”,而是“即来即办”,极大提升了系统的实时性、效率与响应能力。


一、Cortex-M3 内核支持的中断资源(理论上限)
项目数量
核心中断(系统异常)16 个(含 HardFault、SysTick、PendSV 等)
外部中断(可屏蔽)最多 240 个
可编程中断优先级级别256(8位)

这表示 Cortex-M3 可以 支持 256 级中断优先级(理论),但 MCU 厂商会根据芯片实际资源进行裁剪。

二、STM32F103 实际中断资源(裁剪后)
项目STM32F103xxSTM32F107xx
内核中断16 个16 个
外部中断(可屏蔽)60 个68 个
可用中断优先级位数4 位(即 16 级)同上
总中断源数16(系统) + 60(外部) = 7684

STM32 只是用了 Cortex-M3 的一部分功能,比如只用了 4位中断优先级 而不是 8 位。

NVIC 优先级的两个概念

那么有几十个中断,怎么管理这么多的中断呢?于是,我们需要对NVIC中断优先级分组。

中断管理方法:首先,对STM32中断进行分组,组0~4。同时,对每个中断设置一个抢占优先级和一个响应优先级值。

分组配置是在寄存器 SCB->AIRCR 中配置:
在这里插入图片描述

综上↓:

CM3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。
STM32并没有使用CM3内核的全部东西,而是只用了它的一部分。
STM32有84个中断,包括16个内核中断和68个可屏蔽中断,具有16级可编程的中断优先级。
STM32F103系列上面,又只有60个可屏蔽中断(在107系列才有68个)
NVIC 中断优先级的两个维度:抢占优先级 & 响应优先级
  1. 抢占优先级(Preemption Priority)
    • 控制中断是否能“打断”其他中断
    • 数字越小,优先级越高
  2. 响应优先级 / 子优先级(Sub Priority)
    • 控制多个中断“同时触发”时谁先执行
    • 不影响中断嵌套

中断优先级比较规则总结:
1.高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。
2.抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断。
3.抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行。
4.如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行;
中断优先级分组(Priority Group)

STM32 使用 AIRCR 寄存器 配置优先级分组,分组如下:

分组抢占优先级位数子优先级位数描述
Group 00 bit4 bit全子优先级,无嵌套
Group 11 bit3 bit最多两级嵌套
Group 22 bit2 bit推荐使用,嵌套+排序
Group 33 bit1 bit高嵌套,低排序
Group 44 bit0 bit全抢占优先级,满嵌套

在这里插入图片描述
设置方式:

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  // 2位抢占 + 2位子优先级

这是中断优先级分组函数: void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);

void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)
{assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup;
}应用:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

举例分析强化理解

假定设置中断优先级组为2,然后设置中断3(RTC中断)的抢占优先级为2,响应优先级为1。 中断6(外部中断0)的抢占优先级为3,响应优先级为0。中断7(外部中断1)的抢占优先级为2,响应优先级为0。

  • 设置分组2(2位抢占 + 2位响应)
  • 中断配置如下:
中断号中断类型抢占优先级响应优先级
中断3RTC中断21
中断6外部中断0(EXTI0

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

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

相关文章

Angular2--高级特性(TODO)

1 基础 关于Angular的基础部分,几个核心部分和框架,在之前都写过了。Angular1--Hello-CSDN博客 Angular的几个核心部分和框架: 模板就是组件中的template,对应MVC的V。 组件类就是Component类,对应对应MVC的C。 服…

pikachu靶场通关笔记44 SSRF关卡02-file_get_content(三种方法渗透)

目录 一、SSRF 1、简介 2、原理 二、file_get_contents函数 1、功能 2、参数 3、返回值 4、file_get_contents与SSRF 三、渗透实战 1、基本探测 2、http协议 (1)访问upload-labs靶场 (2)访问yijuhua.txt 3、file协议…

Android 控件 - EditText 的 Hint(Hint 基本用法、Hint 进阶用法、单独设置 Hint 的大小)

一、EditText 的 Hint 1、基本介绍 在 Android 开发中,EditText 的 Hint 用于显示提示文本 提示文本当用户没有输入任何内容时显示,输入内容后自动消失 2、基本使用 (1)在 XML 布局文件中设置 在 XML 布局文件中设置 Hint …

PostgreSQL(知识片):索引关联度indexCorrelation

索引关联度的绝对值越大,说明这个索引数据越好。绝对值最大为1。 首先我们创建一个表:tbl_corr,包含列:col、col_asc、col_desc、col_rand、data,col_asc存储顺序数据,col_desc存储降序数据,col…

React纯函数和hooks原理

纯函数 JS 若满足其下条件 ,被称为纯函数 1。确定的输入一定产生确定的输出 2 不产生副作用 另外redux中的reducer也要求是纯函数 Fiber 架构和hooks原理 useRef 在组件的整个声明周期内保持不变 用法:1绑定dom元素 或者 绑定一个类组件 因为函数式…

养老专业实训室虚拟仿真建设方案:助力人才培养与教育教学革新

随着我国老龄化程度加深,养老服务行业人才需求激增。养老专业实训室虚拟仿真建设方案凭借虚拟仿真技术,为养老专业教育教学带来革新,对人才培养意义重大。点击获取实训室建设方案 一、构建多元化虚拟场景,丰富实践教学内容 模拟居…

LangChain 提示词工程:语法结构详解与完整实战指南

LangChain 提示词工程:语法结构详解与完整实战指南 我将为您系统性地解析 LangChain 中各类提示模板的核心语法结构,通过清晰展示语法与对应代码示例,帮助您彻底掌握提示工程的实现方法。所有示例均围绕报幕词生成场景展开。 在这里插入图片…

20250625解决在Ubuntu20.04.6LTS下编译RK3588的Android14出现cfg80211.ko的overriding问题

Z:\14TB\versions\rk3588-android14-FriendlyElec\mkcombinedroot\res\vendor_modules.load 【拿掉/删除这一项目!】 cfg80211.ko 20250625解决在Ubuntu20.04.6LTS下编译RK3588的Android14出现cfg80211.ko的overriding问题 2025/6/25 20:20 缘起:本文针对…

在WSL下搭建JavaWeb: JDBC学习环境

在WSL下搭建JavaWeb: JDBC学习环境 前言 ​ 笔者最近打算放松一下,接触一点经典的Java Web技术,自己在闲暇时间时玩一玩JavaWeb技术。这里开一个小系列整理一下最近学习的东西,以供参考和学习。 ​ 笔者的计划是使用VSCode写代码&#xff…

pscc系统如何部署,怎么更安全更便捷?

磐石云PSCC系统的安全高效部署需结合云原生架构与零信任安全模型,以下是经过大型项目验证的部署方案及最佳实践: 一、智能部署架构(混合云模式) 二、安全增强部署方案 1. 基础设施安全 网络隔离 采用 三层网络分区:互…

协程驱动的高性能异步 HTTP 服务器:基础实现与任务调度机制

一、引言:为什么用协程实现 HTTP 服务器? 传统 HTTP 服务器的编程模型大致分为: 多线程阻塞型:每连接一线程,简洁但扩展性差 事件驱动模型(如 epoll 状态机):高性能但逻辑复杂 回…

《视频:点亮数字时代的光影魔方》

视频的前世今生:从诞生到爆火 视频的发展历程是一部充满创新与变革的历史,它见证了科技的飞速进步和人类对信息传播与娱乐方式不断追求的过程。从早期的雏形到如今的全面普及,视频经历了多个重要阶段,每一个阶段都伴随着关键节点与…

秋招Day14 - MySQL - 运维

百万级别以上的数据如何删除? 这么大量的DELETE操作可能会导致长时间锁表 可以进行批量删除,把要删除的数据分为多个小批次处理。 也可以采用创建新表,把不需要删除的数据迁移过来,然后废弃旧表。需要检查新表空间是否足够、分…

(C++)vector数组相关基础用法(C++教程)(STL库基础教程)

源代码&#xff1a; #include <iostream> #include <vector> #include <string> using namespace std;int main(){char a;int b;int c;vector <char> numbers;cout<<"请输入一组字符&#xff08;按下#结束&#xff09;:\n";while(1){…

面试的问题

主题&#xff1a;LLM相关、多模态相关、python编程、java编程 参见&#xff1a;小红书面试相关的帖子 LLM相关&#xff1a; 02.大语言模型架构/1.attention/1.attention.md qzl66/llm_interview_note - Gitee.com 02.大语言模型架构/Transformer架构细节/Transformer架构细…

【EDA软件】【应用功能子模块网表提供和加载编译方法】

1.背景 使用者做FPGA应用开发&#xff0c;将开发成果交给自己的客户&#xff0c;但是并不想提供RTL源码以及加密的源码&#xff0c;只想提供网表文件。 2.方法 2.1 指定应用功能子模块设置为Top层&#xff1b; 2.2 运行综合&#xff0c;在outputs文件夹下会生成该应用功能子…

Spring:多数据源配置多个事务管理器DEMO

Spring配置文件&#xff1a; 配置2个事务管理器&#xff1a;txManager和txManager2 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLS…

通用 Excel 导出功能设计与实现:动态列选择与灵活配置

在企业级应用开发中&#xff0c;数据导出是高频需求。本文介绍一种支持动态列选择、灵活配置的通用 Excel 导出方案&#xff0c;通过前后端协同设计&#xff0c;实现导出字段、列顺序、数据格式的自定义&#xff0c;满足多样化业务场景。 一、功能架构设计 核心特性 动态字段…

安全壁垒 - K8s 的 RBAC、NetworkPolicy 与 SecurityContext 精要

安全壁垒 - K8s 的 RBAC、NetworkPolicy 与 SecurityContext 精要 如果说 Kubernetes 是我们构建云原生应用的“城市”,那么我们已经学会了如何规划道路(网络)、建设住宅(Pod 调度)、提供水电(存储)以及智能调节城市规模(自动伸缩)。现在,是时候为这座城市安装“城门…

服务器开放端口如何设置,本地内网开通应用端口让外网访问连接步骤

在互联网时代&#xff0c;服务器扮演着至关重要的角色&#xff0c;为了让本地搭建部署的服务器能够正常提供互联网服务&#xff0c;我们需要开放特定端口以供外部网络的客户端访问&#xff0c;本文将带领大家深入了解内网本地服务器如何设置端口开放给公网访问。 服务器开放端…