历史上的今天
今天是:2025年05月14日(星期三)
2021年05月14日 | STM32之NVIC知识讲解
2021-05-14 来源:eefocus
我们先来看一下Reference Datasheet中是如何说的:

SCB->AIRCR中目前只用到4位,也就是最高能有16级中断嵌套,如果全使用的话可以达到256级
选用优先级分组(实际就是选几位用于主优先级几位用于辅优先级)
注意,我们在一个工程中只能用一种分组方式
The table below gives the allowed values of the pre-emption priority and subpriority according
to the Priority Grouping configuration performed by NVIC_PriorityGroupConfig function
===========================================================================
NVIC_PriorityGroup | NVIC_IRQChannelPreemptionPriority | NVIC_IRQChannelSubPriority | Description
===========================================================================
NVIC_PriorityGroup_0 | 0 | 0-15 | 0 bits for pre-emption priority
|| | 4 bits for subpriority
----------------------------------------------------------------------------------------------------------------------------
NVIC_PriorityGroup_1 | 0-1| 0-7 | 1 bits for pre-emption priority
||| 3 bits for subpriority
----------------------------------------------------------------------------------------------------------------------------
NVIC_PriorityGroup_2 | 0-3 | 0-3 | 2 bits for pre-emption priority
|| | 2 bits for subpriority
----------------------------------------------------------------------------------------------------------------------------
NVIC_PriorityGroup_3 | 0-7 | 0-1 | 3 bits for pre-emption priority
| | | 1 bits for subpriority
----------------------------------------------------------------------------------------------------------------------------
NVIC_PriorityGroup_4 | 0-15| 0 | 4 bits for pre-emption priority
|| | 0 bits for subpriority
以上是我提取库中misc.h中的说明便于大家理解
如果要使用中断那就得把中断向量表先存储到存储器,我们先来一段程序看一下吧
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
#ifdef VECT_TAB_RAM
NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);
#else
NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);
#endif
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
这里边包含一个条件编译,如果我们要把中断向量表存储在RAM或者FLASH就要定义相关的宏
后边选用优先级分组的0组,也就是0位用于主优先级,4位用于辅优先级
主优先级可以中断嵌套(可以抢占)
辅优先级不可以中断嵌套,只能当前中断完成之后再相应优先级最高的
如果辅优先级相同则相应中断向量表靠前的
NVIC_IRQChannel 是说明用的哪种中断,包括所有的中断与异常(NVIC都管理,包括内核的)
讲到这里我们要提一下不可屏蔽中断,这个中断是不能屏蔽的NMI是不能屏蔽的,其他中断都是可以屏蔽的
下一篇:STM32编程小总结
史海拾趣
|
----89c52单片机部分——ISA接口的A,B部分.这是RTL8019网卡ISA的前半部分A1--A31(1...31),B1--B31(32...62)共62个引脚. DATA0--DATA7是网卡的8位数据总线,接单片机的P0口. RESDRV(33脚)(RESET)接单片机的T0(P3.4),单片机用P3.4来复位网卡。 IRQ9 ...… 查看全部问答> |
|
中心议题: 开关电源的原理及特点直流开关电源的保护 解决方案: 过电流保护电路过电压保护电路软启动保护电路过热保护电路 随着科学技术的发展,电力电子设备与人们的工作、生活的关系日益密切,而电子设备都离不开可靠的电源,因此直流开关电 ...… 查看全部问答> |
|
[诚寻] DSP开发 DSP测试 RF测试工程师 上海 15-22万 非诚勿扰 请自荐或是推荐的朋友发送简历到以下邮箱: Jerome.zhang@focu-search.com QQ:727190736 申请职位请务必在邮件中注明所申请职位的名称、目前的薪酬大致情况和期望、您目前的工作地点。 谢谢! 统招本科 硕士优先(本科3年左右 硕士2 ...… 查看全部问答> |
|
请教:为何keil 8编译后运行正常,模式0编译后结果错误? #include #include //包含_nop_()函数定义的头文件 /***************************************************** 基础函数功能:延时5ns (3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒 ************************************ ...… 查看全部问答> |
|
学模拟+《运放噪声优化》4 4.11离散噪声源构成的运放噪声模型 shiyongzhu 网友问我图4.11对应的噪声电压源和电流源,从那下载?我开始理解错了,刚才看了一下才知道。在TI官网上找到了,有点不太好找,为方便大家学习特此上传,希望有用,附图: … 查看全部问答> |
|
【转】HPS典型的启动流程与BOOT ROM执行流程的应用笔记 HPS典型的启动流程与BOOT ROM执行流程的应用笔记 HPS作为一个SoC器件,所有执行程序都要遵循严格的启动流程,本文针对对于HPS的启动引导流程不曾关注过或者不是十分清楚的开发人员。HPS的启动是多阶段的流程,每一个阶段都会完成自己相应的工作并把 ...… 查看全部问答> |




