126、飞控中的中断优先级与嵌套

📅 2026/6/18 1:01:11
126、飞控中的中断优先级与嵌套
飞控中的中断优先级与嵌套一次炸机事故的复盘去年夏天,我在调试一架四轴飞行器的悬停模式。电机突然失控,飞机直接侧翻炸机。黑匣子日志显示:IMU数据读取正常,但PWM输出在某个时刻出现了长达2ms的“空白期”。排查到最后,发现是SPI中断和定时器中断发生了优先级冲突——SPI中断处理时间过长,导致定时器中断被延迟,PWM更新错过了关键周期。那次之后,我花了整整一周重新梳理飞控的中断系统。今天这篇笔记,就是那次事故的产物。中断优先级:不是数字越小越好很多初学者看到STM32的NVIC优先级分组,第一反应是“抢占优先级数字越小越优先”。这个理解没错,但飞控场景下,你需要思考的是:哪些中断绝对不能被打断?我的经验排序(从高到低):电机PWM更新中断(通常是高级定时器更新中断)—— 优先级最高,因为它是飞控的“心跳”。一旦延迟,电机响应就会滞后,轻则抖动,重则炸机。IMU数据就绪中断(SPI或I2C触发)—— 次高。IMU数据是姿态解算的原料,延迟意味着姿态估计误差累积。遥控器信号捕获中断(PPM或SBUS)—— 中等。遥控信号丢失可以触发安全保护,但短暂延迟不会直接炸机。串口通信中断(如MAVLink)—— 最低。数据包丢失可以重传,优先级最低。这里踩过坑:别把