NVIC: Nested vectored interrupt controller, 嵌套中断向量控制器。
中断与异常:
所有能打断正常执行流的事件都称为异常。 异常与中断的区别在于, 中断请求是来自于Cortex内核外部, 比如各种片上外设, 外部中断请求等, 它们对于内核是”异步”的; 而异常则是由于Cortex内核在执行指令或者访问存储等操作时所产生的, 对于Cortex内核来说是属于”同步”的(可以参见Cortex M3权威指南), 异常和中断一般可以不加区分的使用。
Cortex内核可以支持多达240个外部中断, 编号16 – 255. 编号1 – 15的为系统异常, 编号0未被使用。
Cortex支行中断嵌套, 允许高优先级的中断抢占低优先级的中断。 Cortex M3/M4可支行多达256级的可编程优先级和128级的抢占, 但有3个系统异常优先级固定, 并且优先级为负数, 高于其它任何异常, 这三个异常分依次为 复位, NMI, Hard Fault.
NMI是Non-Maskable Interrupt(不可屏蔽中断)缩写, 在STM32F4中, NMI被连接到时钟安全系统CCS(Clock security system)异常上。
Hard Fault是总线fault, 存储管理fault, 用法fault所产生的结果, 详细信息可以参考Cortex M3权威指南。
优先级寄存器
如上所述, Cortex M3/M4支行多达256级的可编程优先级和128级抢占, 每个中断使用一个8位的寄存来配置优先级。 但实际一款芯片会根据情况做适当的精简, 裁剪掉表达优先级的几个低端有效位, 以减少优先级的级数。但是不管使用多少位来表达优先级, 都是以MSB对齐的, 这主要是为了避免程序在不同器件之间移植时不会出现优先级顺序的更改。
抢占优先级和响应优先级
响应优先级也叫做 亚优先级 或者 子优先级, 每一个中断都有这两种优先级属性。 当一个低优先级的中断正在执行时, 如果有更高优先级的中断请求, 系统将会响应这个中断, 即发生中断嵌套。
如果两个中断的优先级相同, 则后来的中断要等到先来的中断执行完毕后才会被响应。 但是如果两个中断同时到达(或者都在挂起状态), NVIC会根据它们响应优先级的高低来决定响应那一个。
如果它的的响应优先级也相同, 那么NVIC会根据它们在中断向量表中的排序先后来决定先响应那一个。
在STM32中使用了4bit来表达抢占优先级和响应优先级, 有以下5种分组方式:

可见STM32一共提供了16级中断优先级.
关键字:STM32 单片机 抢占优先级 响应优先级
引用地址:
STM32单片机中抢占优先级和响应优先级的表达方式解析
推荐阅读最新更新时间:2026-03-01 19:15
STM32单片机中抢占优先级和响应优先级的表达方式解析
NVIC: Nested vectored interrupt controller, 嵌套中断向量控制器。 中断与异常: 所有能打断正常执行流的事件都称为异常。 异常与中断的区别在于, 中断请求是来自于Cortex内核外部, 比如各种片上外设, 外部中断请求等, 它们对于内核是”异步”的; 而异常则是由于Cortex内核在执行指令或者访问存储等操作时所产生的, 对于Cortex内核来说是属于”同步”的(可以参见Cortex M3权威指南), 异常和中断一般可以不加区分的使用。 Cortex内核可以支持多达240个外部中断, 编号16 – 255. 编号1 – 15的为系统异常, 编号0未被使用。 Cortex支行中断嵌套, 允许
[单片机]
STM32 抢占优先级和响应优先级
一、抢占优先级和响应优先级 STM32 的中断向量具有两个属性,一个为抢占属性,另一个为响应属性,其属性编号 越小,表明它的优先级别越高。 抢占,是指打断其他中断的属性,即因为具有这个属性会出现嵌套中断(在执行中断 服务函数A 的过程中被中断B 打断,执行完中断服务函数B 再继续执行中断服务函数 A),抢占属性由NVIC_IRQChannelPreemptionPriority 的参数配置。 而响应属性则应用在抢占属性相同的情况下,当两个中断向量的抢占优先级相同时, 如果两个中断同时到达, 则先处理响应优先级高的中断, 响应属性由 NVIC_IRQChannelSubPriority 参数配置。例如,现在有三个中断向量
[单片机]
STM32 NVIC中断优先级:抢占优先级&响应优先级区别
首先,对STM32中断进行分组,组0~4。同时,对每个中断设置一个抢占优先级和一个响应优先级值。 分组配置是在寄存器SCB- AIRCR中配置: 抢占优先级 & 响应优先级区别: 1. 高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。 2. 抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断。 3. 抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个 先执行。 4. 如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先 执行; 等级越低,优先级越高。
[单片机]
【STM32单片机学习】第11章 基础重点—SysTick定时器
本章实验的目的让读者熟悉STM32F103的SysTick定时器,SysTick定时器和NVIC一样,都属于Cortex-M3的内核外设资源。SysTick定时器比较简单,借此机会感受HAL库和寄存器之间调用关系,以及SysTick定时器的中断处理。本章阅读提示:11.1 关于(介绍STM32的SysTick定时器工作方式和寄存器,需要理解)11.2 硬件设计(SysTick定时器不涉及硬件)11.3 软件设计(讲解如何配置SysTick定时器、SysTick定时器的中断函数如何处理,需要理解)11.4 实验效果(展示实验效果,操作即可) 11.1 关于SysTick定时器 SysTick定时器(又名系统滴答定时器)是存在于C
[单片机]
陈老师告诉你STM32单片机的DMA怎么使用
DMA技术的运用合乎真香定律,是提高单片机CPU程序执行效率的常用方法之一,但是在其运用前须要对很多的寄存器进行初始配置,对新手不够友好,今天我以串口为例,来带大家梳理一下DMA的运用方法,理清概念之间的关系,帮助大家更好的掌握和运用DMA技术. ///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程和毕业设计指导,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像白色字体加我也能领取哦,记得口令陈老师/// 串口是单片机最常用的外设,一般可用于达到多机的通讯功能.(串口USART1在单片机内部的位置如下图1处所示),CPU是控制和计算核心(如下图2处所示),DMA也能够认为是一个内部的控制器,(如下图3处所示)
[单片机]
【Linux】GCC+Makefile打造正点原子stm32单片机开发环境
arm-none-eabi-gcc+stlink-tool+Makefile 正点原子精英STM32F103ZET6开发板采用V3.5库的头文件 下载固件库:https://www.st.com/content/ccc/resource/technical/software/firmware/48/ab/e5/17/0d/79/43/74/stsw-stm32054.zip/files/stsw-stm32054.zip/jcr:content/translations/en.stsw-stm32054.zip 解压得到STM32F10x_StdPeriph_Lib_V3.5.0 新建文件夹:stm32,stm32/lib,s
[单片机]
STM32单片机开发入门[一]——开发软件安装与硬件准备
前言 本文将介绍STM32开发前常用的软硬件以及使用方式,帮助萌新在入门时找到一个学习的方向 一、软件部分 1.Keil MDK v5安装 Keil MDK v5是一个主流的嵌入式开发软件,包括了烧录调试等功能,但是代码补全方面功能稍弱,并没有vscode等编辑器或IDE那么智能,所以推荐将这个IDE作为一个单片机的烧录与调试软件使用,写代码时使用vscode打开项目文件夹,就可以愉快使用自动补全中的功能来敲代码了,下面介绍 Keil MDK v5的安装方式: 1.打开Keil官网的产品下载页面并点击MDK-arm: 2.填写个人信息并点击Submit(可以瞎写) 3.点击链接下载安装包 4.打开安装包,
[单片机]
STM32单片机使用注意事项
串口输入乱码 1.target 修改成 8.0 2.stm32Fxx.h 将 //#define HSE_VALUE ((uint32_t)25000000) /*! Value of the External oscillator in Hz */ 改成 #define HSE_VALUE ((uint32_t)8000000) /*! Value of the External oscillator in Hz */
[单片机]