news 2026/6/10 15:49:06

简单理解:配置NVIC优先级分组2(2位抢占+2位子优先级)具体有哪几个?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
简单理解:配置NVIC优先级分组2(2位抢占+2位子优先级)具体有哪几个?

NVIC(Nested Vectored Interrupt Controller,嵌套向量中断控制器)优先级分组是 STM32 中用于管理中断优先级的重要机制,通过分组决定抢占优先级和子优先级各占多少比特位2。以下是具体介绍2:

  • 分组方式:STM32 支持 5 种优先级分组,通过NVIC_PriorityGroupConfig()函数配置。具体如下:
    • NVIC_PriorityGroup_0:0bit 抢占优先级、4bit 响应优先级,抢占优先级取值为 0,响应优先级取值为 0~15。
    • NVIC_PriorityGroup_1:1bit 抢占优先级、3bit 响应优先级,抢占优先级取值为 0~1,响应优先级取值为 0~7。
    • NVIC_PriorityGroup_2:2bit 抢占优先级、2bit 响应优先级,抢占优先级取值为 0~3,响应优先级取值为 0~3。
    • NVIC_PriorityGroup_3:3bit 抢占优先级、1bit 响应优先级,抢占优先级取值为 0~7,响应优先级取值为 0~1。
    • NVIC_PriorityGroup_4:4bit 抢占优先级、0bit 响应优先级,抢占优先级取值为 0~15,响应优先级取值为 0。
  • 优先级规则:组优先级高的中断能抢占组优先级低的中断,实现中断嵌套。若多个挂起异常共用相同的组优先级,则需使用次优先级来决定同组中的异常优先级。例如在 NVIC_PriorityGroup_2 中,抢占优先级为 0 的中断可以打断抢占优先级为 1、2、3 的中断,若两个中断抢占优先级都为 1,则子优先级低的(数值小)会先执行。

在 NVIC 优先级分组 2(2 位抢占优先级 + 2 位子优先级)下,抢占优先级(Preemption Priority)和子优先级(Sub Priority)的取值范围均为0~3(2 位二进制数的所有组合),二者的所有组合共形成4(抢占)× 4(子)= 16 种具体优先级配置

16 种优先级配置详情表

下表列出了所有组合,包含 “抢占优先级、子优先级、对应的 IP 寄存器 4 位值(二进制 / 十进制)”,其中:

  • IP 寄存器值:NVIC 的中断优先级控制寄存器(IP)用 4 位存储优先级,分组 2 下的格式为[抢占优先级(2位)][子优先级(2位)],即(抢占优先级 << 2) | 子优先级
  • 优先级规则:抢占优先级数值越小,优先级越高(可打断低抢占优先级中断);若抢占优先级相同,子优先级数值越小,优先级越高(仅决定同抢占级下的响应顺序,不可嵌套)。
序号抢占优先级(2 位)子优先级(2 位)IP 寄存器 4 位值(二进制)IP 寄存器值(十进制)
10000 000
20100 011
30200 102
40300 113
51001 004
61101 015
71201 106
81301 117
92010 008
102110 019
112210 1010
122310 1111
133011 0012
143111 0113
153211 1014
163311 1115

关键说明

  1. 优先级高低对比示例

    • 配置 1(抢占 0,子 0)优先级最高,可打断所有其他 15 种配置的中断;
    • 配置 16(抢占 3,子 3)优先级最低,无法打断任何其他配置的中断,且仅在所有高优先级中断未挂起时才响应;
    • 配置 5(抢占 1,子 0)和配置 7(抢占 1,子 2):抢占优先级相同,配置 5 的子优先级更高,若二者同时挂起,配置 5 先响应(不可嵌套)。
  2. 代码配置示例(以配置 7 为例):若需将某中断(如定时器 1 更新中断)配置为 “抢占 1,子 2”,代码如下:

    // 1. 先设置分组2(整个程序仅需调用1次) NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 2. 配置具体中断优先级(定时器1更新中断) NVIC_InitTypeDef NVIC_InitStruct; NVIC_InitStruct.NVIC_IRQChannel = TIM1_UP_IRQn; // 中断通道:定时器1更新 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1; // 抢占优先级1 NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2; // 子优先级2 NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; // 使能中断 NVIC_Init(&NVIC_InitStruct);
  3. 注意事项

    • 同一系统中仅能选择一种 NVIC 分组(如分组 2),多次调用NVIC_PriorityGroupConfig()会导致优先级混乱;
    • 抢占 / 子优先级不可超出 0~3 的范围,否则会出现未定义的中断响应行为。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 2:01:33

论文开题“黑科技”:书匠策AI如何让你的选题“一键开挂”

对于许多论文新手来说&#xff0c;开题报告往往是学术征程的第一道“拦路虎”——选题撞车、文献堆砌、逻辑混乱、格式错漏……这些问题像一团乱麻&#xff0c;让人无从下手。别担心&#xff01;今天要介绍的书匠策AI&#xff08;官网&#xff1a;www.shujiangce.com&#xff0…

作者头像 李华
网站建设 2026/6/10 10:59:25

太流批,桌面图标管理神器

今天给大家推荐两款软件&#xff0c;一款桌面图标管理工具&#xff0c;一款是文件/文件夹时间修改工具&#xff0c;有需要的小伙伴可以下载收藏。 第一款&#xff1a;DesktopOK 大家有没有这样的习惯&#xff1a;桌面的东西要在一个固定的地方你才能找得到&#xff0c;如果你要…

作者头像 李华
网站建设 2026/6/10 10:52:48

Excel时间差计算技巧解析

公式解析MID(B2,{1,7,13,19},5) 从B2单元格的指定位置提取时间片段。假设B2内容为"12:30-18:45,09:00-12:15"&#xff0c;该部分会分别提取&#xff1a;第1字符开始的5位&#xff1a;"12:30"第7字符开始的5位&#xff1a;"18:45"第13字符开始的5…

作者头像 李华
网站建设 2026/6/10 10:59:18

java+vue基于springboot的旅游攻略分享系统的设计与实现_e7z2r88l

目录 系统概述技术架构核心功能模块系统设计要点部署与优化 开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 系统概述 基于SpringBoot和Vue的旅游攻略分享系统是一个前后端分离的Web应用&#xff0c;旨在为用户提供旅游目的地…

作者头像 李华
网站建设 2026/6/10 10:49:25

5秒开服,你的应用部署还卡在“加载中”吗?

“测试环境又崩了&#xff01;”“扩容申请走流程要两天&#xff01;”“运维成本快赶超开发了&#xff01;”这些刺耳的抱怨&#xff0c;是否每天都在消耗你的团队精力&#xff1f;传统容器运维的沉重负担&#xff0c;正在一点点拖慢业务创新的步伐&#xff0c;让本该快速落地…

作者头像 李华