凡亿教育-香老板
凡事用心,一起进步
打开APP
公司名片
凡亿课堂 | 面试指南
当前位置: 首页 面试指南
STM32中断优先级与NVIC怎么配置?中断嵌套与延迟怎么理解?嵌入式面试
浏览量:282
2026-09-16 10:00:53
一句话答案

STM32 中断优先级分抢占优先级和子优先级:抢占高的可以打断抢占低的(嵌套),同抢占级子优先级只决定同时挂起时谁先执行;HAL 库用 NVIC_SetPriority() 配置,分组用 NVIC_PriorityGroupConfig()。

本文概述

中断是单片机核心,面试常考:抢占优先级和子优先级区别、中断嵌套、中断延迟、中断里不能做什么。回答要能讲清分组机制、现场算优先级、并说中断服务程序的禁忌。

核心要点

  • STM32 优先级分抢占优先级和子优先级;抢占高可嵌套,子优先级不嵌套只决定顺序

  • 优先级分组(NVIC_PriorityGroup)决定几位给抢占、几位给子优先级,F1 默认 Group4(4 位抢占)

  • 中断延迟:从中断触发到 ISR 第一条指令,几到几十时钟周期

  • ISR 里要短:不能延时、不能用 printf、不能等信号量太久,用标志位通知主循环

  • 中断向量表位置、中断使能/清除挂起、中断标志清除时机容易出错

示波器显示 STM32 中断响应波形,开发板连接调试器,屏幕显示中断优先级配置代码

面试官:STM32 抢占优先级和子优先级有什么区别?写代码怎么配?

面试官考察点

这是必考题。面试官看:①是否理解嵌套机制;②分组怎么配;③现场能不能写出配置代码。只说「数字越小优先级越高」不够。

回答思路

先讲两个优先级的区别(能否嵌套),再讲分组,最后给配置代码和实际例子。

参考回答

核心区别。

对比项抢占优先级子优先级
能否打断其他中断能(高抢占可嵌套低抢占)不能
同时挂起时高抢占先执行同抢占级时高子优先级先执行
数值0 最高0 最高

举个例子。串口中断抢占=2、ADC 中断抢占=1、定时器中断抢占=2:

  • ADC 在跑时串口来了 → ADC 抢占 1 比串口 2 高,串口等 ADC 跑完;

  • 串口在跑时定时器来了 → 抢占都是 2,不嵌套,定时器等串口跑完;

  • 串口和定时器同时来 → 比子优先级,子优先级高的先跑。

分组。STM32 用 NVIC_PriorityGroupConfig() 把 4 位优先级分成抢占位和子位:

  • Group 4:4 位抢占(0~15)、0 位子优先级,F1 默认;

  • Group 3:3 位抢占(0~7)、1 位子优先级;

  • 系统只允许一个分组,所有中断共用;HAL_Init() 里默认 Group4。

配置代码。

HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
HAL_NVIC_SetPriority(USART1_IRQn, 2, 0); // 抢占2、子0
HAL_NVIC_EnableIRQ(USART1_IRQn);

ISR 里的禁忌。

  • 不能写 HAL_Delay()(它靠 SysTick,会卡死);

  • 不能 printf(耗时太长,且要加互斥可能死锁);

  • 不能长时间循环或等硬件;

  • 做法:ISR 里只清标志、读数据、置 flag,复杂处理放主循环或任务。

面试官可能追问

追问 1:中断延迟由什么决定?
内核响应(取向量、压栈)+ 指令对齐 + 当前是否在另一个中断中。F1 大概 12 周期,72MHz 约 167ns。
追问 2:中断里为什么不能用 HAL_Delay?
HAL_Delay 靠 SysTick 中断计数,如果你当前中断优先级比 SysTick 高,SysTick 永远进不来,就死等了。
追问 3:中断标志什么时候清?
进 ISR 后尽快清标志,否则退出后会立刻再次进入。但要先读数据(如 USART_DR),因为读操作本身会清 RXNE。
追问 4:FreeRTOS 里中断优先级要注意什么?
FreeRTOS 管的中断要设优先级 ≥ configMAX_SYSCALL_INTERRUPT_PRIORITY,高于这个优先级的中断不能调 FreeRTOS API。
追问 5:中断向量表放哪里?
启动文件里(如 startup_stm32f103xx.s),中断触发时内核自动从向量表取 ISR 地址。改向量表位置要改 SCB->VTOR。

常见失分表达

✗ 优先级数字越大越高 — STM32 数字越小优先级越高,搞反了系统会乱。
✗ 中断里慢慢处理没关系 — ISR 太长会导致低优先级中断延迟、系统跑飞。
✗ 所有中断优先级随便设 — 不分组、不区分抢占/子优先级,中断嵌套行为不可控。

准备动作

1
在 CubeMX 里配两个中断,改抢占/子优先级,实验嵌套行为
2
准备一个 ISR 里调用 HAL_Delay 卡死的排查案例
3
搞清楚 Group4 下有几个抢占级、几个子优先级
4
了解 FreeRTOS 中断优先级约束

核心关键词

NVIC抢占优先级子优先级中断嵌套ISR优先级分组


声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。仅供学习交流使用,不构成商业目的。版权归原作者所有,如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时删除。 侵权投诉

相关文章

试简要说明Linux系统在目标板上的启动过程?

2024-10-16 17:07:10

射频开关怎么选?插损、隔离度、功率容量、控制方式怎么看?射频面试

2026-10-10 23:10:04

高速连接器在PCB上的布局位置怎么确定?PCB面试要从信号入口讲到阻抗过渡

2026-08-04 15:59:25

一块板能焊好,却不好返修:PCB布局的维修空间到底应该怎么评审?

2026-10-28 20:35:25

8个常⻅的硬件知识点

2024-03-15 17:06:50