本文是《STM32 模块化开发实战指南》第 5 篇,聚焦于 STM32 裸机开发中最核心也最容易被忽视的部分——中断服务机制。我们将介绍如何正确、高效地设计中断处理函数(ISR),实现数据与事件从中断上下文传递到主逻辑的通道,并构建一个清晰、可维护、非阻塞的事件通知机制。
一、为什么裸机项目中的 ISR 会失控?
常见“错误用法”:
-
在 ISR 中执行复杂操作(如
printf()
、长循环、malloc 等) -
在 ISR 中调用多层函数导致栈溢出
-
在 ISR 中修改共享变量却没有保护
-
ISR 中与主循环耦合严重,增加调试难度
中断本质上是“异步打断主流程”的机制,它应当只承担“快速收集数据、标记状态、通知主循环”的职责。
二、设计目标:让 ISR 只做最少事
中断服务函数设计三原则:
-
✅ 快:执行时间必须极短,最多几微秒
-
✅ 小:尽量不调用其他函数,或仅调用专用轻量函数
-
✅ 可控:不要直接控制主流程,通过队列/标志间接通知