使用MCP进行代码执行:构建更高效的智能体——TaoToken统一Key接入实战
2026/10/9 12:52:43
NVIC(Nested Vectored Interrupt Controller,嵌套向量中断控制器)优先级分组是 STM32 中用于管理中断优先级的重要机制,通过分组决定抢占优先级和子优先级各占多少比特位2。以下是具体介绍2:
NVIC_PriorityGroupConfig()函数配置。具体如下:在 NVIC 优先级分组 2(2 位抢占优先级 + 2 位子优先级)下,抢占优先级(Preemption Priority)和子优先级(Sub Priority)的取值范围均为0~3(2 位二进制数的所有组合),二者的所有组合共形成4(抢占)× 4(子)= 16 种具体优先级配置。
下表列出了所有组合,包含 “抢占优先级、子优先级、对应的 IP 寄存器 4 位值(二进制 / 十进制)”,其中:
[抢占优先级(2位)][子优先级(2位)],即(抢占优先级 << 2) | 子优先级。| 序号 | 抢占优先级(2 位) | 子优先级(2 位) | IP 寄存器 4 位值(二进制) | IP 寄存器值(十进制) |
|---|---|---|---|---|
| 1 | 0 | 0 | 00 00 | 0 |
| 2 | 0 | 1 | 00 01 | 1 |
| 3 | 0 | 2 | 00 10 | 2 |
| 4 | 0 | 3 | 00 11 | 3 |
| 5 | 1 | 0 | 01 00 | 4 |
| 6 | 1 | 1 | 01 01 | 5 |
| 7 | 1 | 2 | 01 10 | 6 |
| 8 | 1 | 3 | 01 11 | 7 |
| 9 | 2 | 0 | 10 00 | 8 |
| 10 | 2 | 1 | 10 01 | 9 |
| 11 | 2 | 2 | 10 10 | 10 |
| 12 | 2 | 3 | 10 11 | 11 |
| 13 | 3 | 0 | 11 00 | 12 |
| 14 | 3 | 1 | 11 01 | 13 |
| 15 | 3 | 2 | 11 10 | 14 |
| 16 | 3 | 3 | 11 11 | 15 |
优先级高低对比示例:
代码配置示例(以配置 7 为例):若需将某中断(如定时器 1 更新中断)配置为 “抢占 1,子 2”,代码如下:
// 1. 先设置分组2(整个程序仅需调用1次) NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 2. 配置具体中断优先级(定时器1更新中断) NVIC_InitTypeDef NVIC_InitStruct; NVIC_InitStruct.NVIC_IRQChannel = TIM1_UP_IRQn; // 中断通道:定时器1更新 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1; // 抢占优先级1 NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2; // 子优先级2 NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; // 使能中断 NVIC_Init(&NVIC_InitStruct);注意事项:
NVIC_PriorityGroupConfig()会导致优先级混乱;