目录
[五、库函数开发(STM32 HAL 库 / 标准库)](#五、库函数开发(STM32 HAL 库 / 标准库))
前言
前两篇讲解了单片机硬件基础与片上外设,本篇重点讲中断体系、中断优先级、低功耗模式、寄存器与库函数差异,属于从简单点灯到做实际项目的进阶理论,也是面试高频考点。
一、中断系统
1.什么是中断;
- CPU 正在执行主循环代码,外部 / 内部事件到来,暂停当前任务,跳转去执行中断服务函数,处理完再回到原来代码继续运行。 不用循环轮询,提升程序实时性。
2.中断分类:
- 内部中断:定时器溢出、ADC 转换完成、串口接收完成等片内外设产生
- 外部中断 EXTI:GPIO 引脚电平变化触发,按键、外部信号触发
3.中断服务函数:
- 中断发生后执行的函数,执行时间要尽可能短,不要写延时、复杂运算、大循环。
- 只做标记、赋值,复杂逻辑放到 while (1) 主循环处理。
二、中断优先级
- 抢占优先级:高抢占优先级可以打断正在执行的低抢占优先级中断。
- 响应优先级:抢占优先级相同时,先执行响应优先级高的;不能打断正在运行的同抢占级别的中断。
- 开发注意
- 不要设置过多高抢占优先级中断,防止程序卡死。
- 重要实时任务分配高抢占优先级。
- 中断嵌套慎用,新手尽量减少多层嵌套。
三、低功耗模式
单片机不止可以全速运行,支持多种省电模式,电池供电项目必用。
- 运行模式:CPU、外设全部工作,功耗最高。
- 睡眠模式:CPU 停止,外设、时钟继续工作,中断唤醒。
- 停止模式:大部分时钟关闭,仅保留部分外设,功耗大幅降低,外部中断唤醒。
- 待机模式:功耗最低,仅备份寄存器工作,复位或者特定中断唤醒。
使用要点:进入低功耗前关闭不用外设;唤醒依靠中断;电池产品重点使用。
四、寄存器开发
- 寄存器就是芯片内部的配置寄存器,每一位对应一个功能开关、参数。 直接读写寄存器地址完成配置,不需要封装库。
- 优点:执行效率极高,代码量小,理解芯片底层工作。
- 缺点:可读性差,需要查阅大量参考手册,开发速度慢,容易写错位。
- 适用:对时序、性能要求极高的场景。
五、库函数开发(STM32 HAL 库 / 标准库)
- 库函数是厂商封装好的函数,内部帮我们操作寄存器,开发者调用 API 即可。
- 优点:代码可读性好,开发速度快,不用死记寄存器,新手主流开发方式。
- 缺点:会有少量额外开销,部分特殊功能需要自己操作寄存器补充。
- 新手建议:优先学 HAL 库,有空回头看寄存器,理解底层原理。
六、寄存器与库函数怎么选
- 入门阶段:优先库函数,快速做项目。
- 进阶阶段:看懂库函数源码,对应手册看懂寄存器。
- 极致性能:关键时序部分直接操作寄存器。
七、常见异常问题
- 中断函数写长延时、大循环 → 系统卡顿、丢数据。
- 中断优先级配置错误,出现中断卡死。
- 忘记开启外设时钟,外设完全不工作。
- 低功耗模式下忘记配置唤醒源,芯片无法唤醒。
