STM32-----NVIC

发布者:HeavenlyJoy444最新更新时间:2024-10-15 来源: cnblogs关键字:STM32  NVIC 手机看文章 扫描二维码
随时随地手机看文章

NVIC——Nested Vectored
Interrupt Controller(嵌套中断向量控制器)


STM32有43个channel的settable的中断源:AIRC(Application Interrupt and
Reset
Register)寄存器中有用于指定优先级的4bits。这4个bits用于分配pre-emption优先级和sub优先级,在STM32的固件库中定义如下:


//-------------------------------Preemption Priority Group
------------------------------------------------


#define NVIC_PriorityGroup_0 ((u32)0x700) //0
bits for pre-emption priority 4 bits for subpriority


#define NVIC_PriorityGroup_1 ((u32)0x600) //1
bits for pre-emption priority 3 bits for subpriority


#define NVIC_PriorityGroup_2 ((u32)0x500) //2
bits for pre-emption priority 2 bits for subpriority


#define NVIC_PriorityGroup_3 ((u32)0x400) // 3
bits for pre-emption priority 1 bits for subpriority


#define NVIC_PriorityGroup_4 ((u32)0x300) //4
bits for pre-emption priority 0 bits for subpriority


形象化的理解是:你是上帝,造了43个人,这么多人要分社会阶级和社会阶层了;因为“阶级”的词性比较重;“阶层”比较中性,所以pre-emption优先级->阶级;每个阶级内部,有一些阶层,sub优先级->阶层;


如果按照NVIC_PriorityGroup_4这么分,就分为了16个阶级每个阶级有0个阶层;阶级高的人,可以打断阶级低的正在做事的人(嵌套),最多可以完成1个中断和15级嵌套。每个阶级你来指定这43人中,谁进入该阶级;


一个人叫EXTI0_IRQChannel,你指定他进入“阶级8”,则


NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;


NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority
= 8;//指定抢占式优先级别1,可取0-15


在同一阶级内部,一个人在做事的时候,另外一个人不能打断他;(pre-emption优先级别相同的中断源之间没有嵌套关系)。还有,如果他们两个同时想做事,因为没有阶层,那么就根据Vector table中的物理排序,让排名靠前的人去做。


又有1个人SPI1_IRQChannel,设定如下


NVIC_InitStructure.NVIC_IRQChannel = SPI1_IRQChannel;


NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority
= 0; //指定抢占式优先级别1,可取0-15


SPI1_IRQChannel的阶级高,EXTI0_IRQChannel做事的时候可以打断(嵌套)。


如果按照NVIC_PriorityGroup_3这么分,就分为了8个阶级(1个阶级是1个preemption优先级),每个阶级内有2个阶层(sub优先级);高阶级的人,可以打断低阶级的正在做事的人(嵌套),最多可以完成1个中断和7级嵌套。每个阶级(每个preemption优先级),你来指定这43人中,谁进入该阶级;


一个人叫EXTI0_IRQChannel,你指定他进入“阶级3”,则:


NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;


NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority
= 3; // 指定抢占式优先级别1,可取0-7


还需要指定他的阶层:


NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 指定响应优先级别0,可取0-1


另有1个人叫EXTI9_5_IRQChannel,他的阶级和阶层设定如下


NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;


NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority
= 3; // 指定抢占式优先级别0,可取0-7


NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // 指定响应优先级别1


那么这两个人是同一阶级的兄弟,一个人在做事的时候,另外一个人不能打断他(preemption优先级别相同的中断源之间没有嵌套关系)。如果他们两个同时想做事,因为前者的阶层高,所以前者优先。


还有一个人叫USART1_IRQChannel,他的阶级和阶层设定如下


NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;


NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority
= 2; // 指定抢占式优先级别0,可取0-7


NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // 指定响应优先级别1


USART1_IRQChannel的优先级最高,当前面两个人做事的时候,他都可以打断(嵌套)。


依次类推:如果按照NVIC_PriorityGroup_0这么分,那么没有阶级,只有16个阶层了。需要给各个人指定阶层编号。sub优先级的范围0-15当一个人做事的时候,另外的人不能打断他(就没有嵌套了);当多人同时想做事的时候,按照阶层编号的排序,排名靠前的先做事。阶层编号一样的人同时想做事,那么按照Vector Table硬件排序,排名靠前的先做。


关键字:STM32  NVIC 引用地址:STM32-----NVIC

上一篇:STM32独立看门狗IWDG
下一篇:STM32 PWM问题

推荐阅读最新更新时间:2026-03-25 10:38

STM32 嵌套向量中断控制器NVIC学习
STM32中有两个优先级的概念:抢占式优先级和响应优先级(也叫副优先级)。 他们的特性是: 1:高抢占式优先级的中断可以嵌套在低抢占式优先级的中断中:,即低抢占式优先级的中断可以被高抢占式优先级的中断打断; 2:当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。 3:如果两个具有相同抢占式优先级的中断同时到达,那么系统给先处理高响应优先级的中断; 3:如果两个中断的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。 总的来看,它们的级别关系是: 抢占式优先级 响应优先级
[单片机]
牛人对STM32NVIC_PriorityGroupConfig使用及优先级分组方式理解
STM32有43个channel的settable的中断源;AIRC(Application Interrupt and Reset Register)寄存器中有用于指定优先级的4 bits。这4个bits用于分配preemption优先级和sub优先级,在STM32的固件库中定义如下 /* Preemption Priority Group -------------------------------------------------*/ #define NVIC_PriorityGroup_0 ((u32)0x700) /* 0 bits for pre-emption priority
[单片机]
STM32中断NVIC、EXTI外部中断
eg:STM32F407ZGT6 1:NVIC(嵌套向量中断控制器) 在参考手册的描述中(我就直接Copy了哈): 嵌套向量中断控制器 NVIC 包含以下特性: ● STM32F405xx/07xx 和 STM32F415xx/17xx 具有 82 个可屏蔽中断通道, STM32F42xxx和 STM32F43xxx 具有多达 86 个可屏蔽中断通道(不包括 Cortex™-M4F 的 16 根中 断线) ● 16 个可编程优先级( 使用了 4 位中断优先级) ● 低延迟异常和中断处理 ● 电源管理控制 ● 系统控制寄存器的实现 嵌套向量中断控制器 (NVIC) 和处理器内核接口紧密配合,可以实现低延迟的中断处理和晚
[单片机]
<font color='red'>STM32</font>中断<font color='red'>NVIC</font>、EXTI外部中断
STM32(五)- NVIC与EXTI
一、基础知识 中断结构框图 中断类型: (1)系统异常,体现在内核水平 (2)外部中断,体现在外设水平 NVIC:嵌套向量中断控制器,属于内核外设,管理包括内核和片上所有外设的中断相关功能。 两个重要库文件:core_cm3.h(内核外设的寄存器定义)和misc.h 1 typedef struct 2 { 3 __IO uint32_t ISER ; /*! Offset: 0x000 Interrupt Set Enable Register/中断使能寄存器 */ 4 uint32_t RESERVED0 ; 5 __IO uint32_t
[单片机]
<font color='red'>STM32</font>(五)- <font color='red'>NVIC</font>与EXTI
关于STM32 NVIC配置的解释
大部分学习用的开发板在配置各个外设的中断优先级时,习惯在每个外设的初始化文件里都进行NVIC group配置,例如在ADC和Usart都有NVIC的配置如下: ADC中: void ADC_NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); NVIC_InitStructure.NVIC_IRQChannel =ADC1_2_IRQn; //开启ADC_Channel8中断 NVIC_InitStructure.NVIC_IRQChannelPreemp
[单片机]
STM32 NVIC 中断
***************************** STM32 NVIC 中断 一、STM32 的中断分组:STM32 将中断分为 5 个组,组 0~4。该分组的设 置是由 SCB- AIRCR 寄存器的 bit10~8 来定义的。具体的分配关系如表所示: 组…,…,. bit 分配情况 …,…,…,…分配结果 0 …,…,…,…,…,…0:4 …,…,…,…0 位抢占优先级,4 位响应优先级 1 …,…,…,…,…,…1:3 …,…,…,…1 位抢占优先级,3 位响应优先级 2 …,…,…,…,…,…2:2 …,…,…,…2 位抢占优先级,2 位响应优先级 3…,…,…,…,…,…3:1…,…,…,… ,3 位抢占优
[单片机]
STM32中断及NVIC概述
参考资料《STM32F4xx 中文参考手册》第十章-中断和事件、《 ARM Cortex™-M4F 技术参考手册》-4.3 章节:NVIC 和 4.4章节:SCB—4.4.5的 AIRCR。 对51单片机有一定了解的都知道51单片机有5个中断源,2个优先级,通过对IP这个寄存器赋值来进行中断优先级的处理而STM32的中断非常强大,每个外设都可以产生中断,那么STM32如何进行中断优先级的分配呢,这时就用到了NVIC(嵌套向量中断控制器), 支持为数众多的系统异常和外部中断。 下表即为STM32F42系列的中断向量表(了解即可),即中断类型 灰色部分即为内核的系统异常,灰色以外的其他部分即为片上所有外
[单片机]
<font color='red'>STM32</font>中断及<font color='red'>NVIC</font>概述
STM32中断向量嵌套NVIC理解
一,中断优先级: 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。 当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。 既然每个中断源都需要被指定这两种优先级,就需要有相应的寄存器位记录每个中断的优先级;在Cortex-M3中定义了8个比特位用于设置中断源
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved