STM32中断优先级与NVIC怎么配置?中断嵌套与延迟怎么理解?嵌入式面试

浏览量:3
时间: 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优先级分组


声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。仅供学习交流使用,不构成商业目的。版权归原作者所有,如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时删除。侵权投诉
相关推荐HOT
单片机工程师跳槽面试要重点准备什么?5大技术方向梳理

分类:单片机工程师面试准备经验级别:中级难度:中级题型:跳槽准备/知识梳理📖 本文概述单片机工程师想跳槽,技术面到底该复习什么?很多人东看一点西看一点,效率很... 详情>>

2026-08-08 16:45:41
LDO输出振荡或不稳定,硬件面试应该怎样定位?

题库分类:电源设计 适合经验:0-3年、3-5年 难度:中高级 题型:器件与调试题 面试题LDO输出... 详情>>

2026-07-29 13:58:05
STM32外部中断EXTI怎么配置?嵌入式面试中断线映射与优先级设置

STM32外部中断EXTI怎么配置?嵌入式面试中断线映射与优先级设置分类:嵌入式单片机经验级别:中级难度:中等题型:实操配置题本文概述STM32外部中断是嵌入式... 详情>>

2026-08-22 14:02:19
RS485接口电路硬件设计要注意什么?

📂 分类:硬件设计📊 经验级别:中级⭐ 难度:★★★☆☆📝 题型:接口设计题本文概述RS485接口硬件设计的核心是保证通信可靠性和抗干扰能力,关键要点包括... 详情>>

2026-08-11 11:20:01
FPGA建立时间和保持时间违例怎么优化 - FPGA设计面试题详解

分类:FPGA设计经验级别:2-5年经验难度:中高级题型:技术分析题本文概述:建立时间和保持时间是FPGA时序设计的基础概念,也是面试必考题。核心结论是:建立时... 详情>>

2026-08-18 21:09:04
开班信息