NVIC全称Nested vectored interrupt controller,即嵌套向量中断控制器,用来决定中断的优先级。
NVIC在 ARM Conrtex-M 内核中,用一个 8 位的寄存器来配置,总共可以配置2^8=256级中断,但是 ST 公司在生产 STM32 的时候,发现一个小小的单片机根本用不了这么多,纯属浪费,所以将该寄存器的低 4 位全部置0,只使用高 4 位来配置,这样一来 STM32 就只有2^4=16级中断啦。
简化为16级中断后,ST发现 STM32 内部这么丰富的外设,还是不方便配置,干脆人工给这4位来个分组,划分出了5个分组:
| 优先级分组 | 抢占优先级占的位数 | 子优先级占的位数 |
| NVIC_PriorityGroup_0 | 0 bit | 4 bit |
| NVIC_PriorityGroup_1 | 1 bit | 3 bit |
| NVIC_PriorityGroup_2 | 2 bit | 2 bit |
| NVIC_PriorityGroup_3 | 3 bit | 1 bit |
| NVIC_PriorityGroup_4 | 4 bit | 0 bit |
再次强调一下,这5种中断分组规则是人为的,用哪种规则,之后设置具体的优先级时对应就行,STM32默认使用的规则是 NVIC_PriorityGroup_0 。
STM32 的CPU判断优先级的方法如下:
先判断抢占优先级,数字越小,优先级越高;
若抢占优先级相同,判断子优先级,同样,数字越小,优先级越高;
本文详细介绍了STM32微控制器中NVIC的工作原理,包括嵌套向量中断控制器的作用,STM32如何简化中断优先级配置,以及ST公司为STM32设定的5种优先级分组规则。此外,还解释了STM32如何通过抢占优先级和子优先级判断中断的执行顺序。
1万+

被折叠的 条评论
为什么被折叠?



