理解STM32的中断优先级

STM32提供68个中断通道,每一个中断通道对应一个中断源,这里的中断源是指引发中断的外设(例如,I2C,UART,EXTI等等)。每一个中断源又可以包括多种中断发生情况,例如UART发送数据完毕,接收到数据等情况均可能引起UART中断源向STM32内核提出中断处理请求。

STM32的中断优先级可以分为抢占式优先级和非抢占式优先级控制两部分。

为了符合COTEX-M3标准,STM32的中断源优先级寄存器采用8位的方式存储,但是只是用了高4位,低4位保留未用。高4位又被分为了两段:抢占式优先级控制段和非抢占式优先级控制段。STM32提供了一个函数

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_x);

用于将这4位进行控制段分配划分,如下表,函数参数就是表的编号列。

理解STM32的中断优先级_第1张图片

对于一个特定的系统,只能在系统启动初调用该函数一次,指定优先级段分配方式。之后其他中断源配置均使用函数

NVIC_Init(&NVIC_InitStructure);--------------------------------------------优先级分组

进行中断源进行具体的优先级配置。涉及到的配置参数如下:

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;-----抢占式优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;---------------非抢占式优先级


关于抢占式优先级和非抢占式优先级的情况说明:

优先级分组确定的情况下

1.只有具备不同抢占式优先级的中断源可以产生嵌套中断,低优先级中断执行过程可以被高优先级中断打断。优先级的值约小,优先级越高。

2.相同的抢占式优先级中断同时发生优先响应非抢占式优先级等级较高的中断。

3.抢占式优先级和非抢占式优先级均相同的中断源同时发生时,优先响应中断顺序号较低的中断。

你可能感兴趣的:(调试记录)