STM32中的NVIC_Configuration函数(中断配置)

在学习STM32的时候对这个函数表示疑惑,不知道它的优先级是怎么设置的,所以对它学习了一下

嵌套向量中断控制器NVIC

外部中断/事件控制器由20个产生事件/中断请求的边沿检测器组成,对于其它

产品,则有19个能产生事件/中断请求的边沿检测器。每个输入线可以独立地配置输入类型(脉冲

或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。每个输入线都可以独立地被屏

蔽。挂起寄存器保持着状态线的中断请求。

主要特性

EXTI控制器的主要特性如下:

● 每个中断/事件都有独立的触发和屏蔽

● 每个中断线都有专用的状态位

● 支持多达20个软件的中断/事件请求

● 检测脉冲宽度低于APB2时钟宽度的外部信 。参见数据手册中电气特性部分的相关参数。

优先级概念

STM32中有两个优先级的概念:抢占式优先级和响应优先级(也叫副优先级)。

他们的特性是:

1:高抢占式优先级的中断可以嵌套在低抢占式优先级的中断中:即低抢占式优先级的中断可以被高抢占式优先级的中断打断;

2:当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。

3:如果两个具有相同抢占式优先级的中断同时到达,那么系统给先处理高响应优先级的中断;

4:如果两个中断的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。

它们的级别关系是: 抢占式优先级 > 响应优先级 > 中断表中的排位顺序。只有在上一级优先级相同时下一级优先级才会起作用。

代码解析

NVIC_PriorityGroupConfig函数

可配置选项

第0组 NVIC_PriorityGroup_0 使用0bits表示抢占式优先级——NVIC_IRQChannelPreemptionPriority无效,4bits表示响应优先级–NVIC_IRQChannelSubPriority值可为0~15。因此,在这一组中的中断没有抢占式优先级,只有响应优先级,它们互相不可打断。

第1组  NVIC_PriorityGroup_1 使用1bits表示抢占优先级——NVIC_IRQChannelPreemptionPriority值可为0~1,使用3bits表示响应优先级NVIC_IRQChannelSubPriority值可为0~8。

第2组  NVIC_PriorityGroup_2 使用2bits表示抢占优先级——NVIC_IRQChannelPreemptionPriority值可为0~3,使用2bits表示响应优先级NVIC_IRQChannelSubPriority值可为0~3。

第3组  NVIC_PriorityGroup_3 使用3bits表示抢占优先级——NVIC_IRQChannelPreemptionPriority值可为0~7,使用1bits表示响应优先级NVIC_IRQChannelSubPriority值可为0~1。

第4组  NVIC_PriorityGroup_4 使用4bits表示抢占优先级——NVIC_IRQChannelPreemptionPriority值可为0~15,使用0bits表示响应优先级NVIC_IRQChannelSubPriority值可为0无效。

无论使用哪一组,其优先级总数(抢占优先级*响应优先级)都是16.

中断源设置NVIC_IRQChannel

中断根据不同芯片的设置大同小异,都可以在stmfxxx.h,比如我是stm32f407就在stm32f4xxx.h中

在具体的不用型 的芯片中在头部的宏定义都是有分类的

优先级设置 

优先级设置跟NVIC_PriorityGroupConfig嵌套向量中断控制器组选择、NVIC_IRQChannelPreemptionPriority、NVIC_IRQChannelSubPriority是有关系的

设置控制器组后要这么配置抢占优先级和子优先级看如下

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年7月22日
下一篇 2022年7月22日

相关推荐