1. 课程导论与开发环境搭建
各位同学好,我是你们这门课的老周。做嵌入式十几年了,踩过的坑比吃过的盐还多。今天咱们先不急着写代码,把地基打牢。选错芯片、搭错环境,后面全白干——我见过太多人在这上面浪费两周时间。
1.1 STM32选型指南:别让芯片成为瓶颈
选型这事儿,说白了就是「够用就好,留有余量」。我刚开始带项目时总喜欢堆料,结果成本压不下来,老板脸都绿了。
STM32家族很庞大,但咱们做裸机驱动和状态机,重点关注这几个系列:
| 系列 | 内核 | 主频 | 典型场景 | 我的建议 |
|---|---|---|---|---|
| F0 | Cortex-M0 | 48 MHz | 简单控制、替代8位机 | 成本敏感项目首选 |
| F1 | Cortex-M3 | 72 MHz | 工业控制、电机驱动 | 经典款,资料最多 |
| F4 | Cortex-M4 | 168 MHz | 音频处理、复杂算法 | 带FPU,适合数学运算 |
| G0/G4 | Cortex-M0+/M4 | 64-170 MHz | 新设计、低功耗 | 性价比高,推荐新项目 |
| H7 | Cortex-M7 | 480 MHz | 高性能、图形界面 | 裸机慎用,建议上RTOS |
1.2 HAL库 vs LL库:到底选哪个?
这个问题几乎每期课程都有人问。我的回答很直接:做产品用LL库,做原型用HAL库。
为什么会这样?咱们看个对比:
| 维度 | HAL库 | LL库 |
|---|---|---|
| 代码量 | 大,封装层多 | 小,接近寄存器 |
| 执行效率 | 中等,有额外开销 | 高,几乎无开销 |
| 易用性 | 高,API直观 | 低,需要懂寄存器 |
| 调试难度 | 容易,有超时机制 | 较难,需自己处理 |
| 适合场景 | 快速原型、复杂外设 | 性能敏感、裸机驱动 |
我记得有一次做电机控制项目,用HAL库的PWM输出,频率一高就丢脉冲。查了两天,发现是HAL库在中断里做了太多状态检查。换成LL库,直接操作寄存器,问题秒解。从那以后,凡是时序敏感的外设,我都用LL库。
1.3 裸机 vs RTOS:别被「实时系统」四个字唬住
很多新手一上来就问:「老师,是不是必须上RTOS?」我的回答是:先问自己三个问题。
- 任务数量: 超过5个独立任务了吗?
- 实时性要求: 有没有毫秒级以下的硬实时需求?
- 资源限制: RAM够不够?RTOS内核至少占2-4KB RAM。
如果三个答案都是「否」,那裸机完全够用。咱们这门课讲的就是裸机状态机——说白了,就是用状态机来模拟多任务调度。我做过一个智能家居网关,8个状态机轮转,跑在F103上,稳如老狗。
裸机的优势很明显:
- 零上下文切换开销——中断响应就是纳秒级
- 内存占用极低——几百字节RAM就能跑
- 调试简单——没有优先级反转、死锁这些头疼问题
但裸机也有短板:任务多了代码会乱。所以咱们这门课的核心就是——用状态机把裸机代码写出RTOS的架构感。
1.4 开发环境搭建:Keil / IAR / STM32CubeIDE
工具链这事儿,没有绝对的好坏,只有习惯。我三个都用过,说说真实感受。
Keil MDK
老牌工具,ARM的亲儿子。编译快,调试稳,但License贵得离谱。个人学习可以用社区版,限制32KB代码——说实话,咱们这门课的代码量,32KB够用了。
IAR Embedded Workbench
优化能力最强,同样的代码能比Keil小10%-15%。但界面丑,快捷键反人类。我当年第一次用IAR,找个「Build」按钮找了五分钟。
STM32CubeIDE
免费、开源、基于Eclipse。集成了CubeMX,图形化配置外设。缺点是比较吃内存,8GB以下的老电脑会卡。我个人建议:新项目用CubeIDE,维护老项目用Keil。
搭建步骤其实大同小异:
- 下载安装对应IDE(CubeIDE直接去ST官网,免费)
- 安装芯片支持包(Keil需要手动装Pack,CubeIDE自动下载)
- 配置调试器(ST-Link / J-Link / DAP-Link)
- 新建工程,选芯片,配时钟
- 写个点灯程序,验证环境
1.5 调试器配置:别让硬件成为拦路虎
调试器是嵌入式开发的「眼睛」。没有它,你就是在盲写代码。我见过有人用串口打印来调试中断——嗯,也不是不行,但效率低到令人发指。
主流调试器对比:
| 调试器 | 速度 | 价格 | 兼容性 | 推荐指数 |
|---|---|---|---|---|
| ST-Link/V2 | 4 MHz | 免费(开发板自带) | 仅ST芯片 | ⭐⭐⭐⭐⭐ |
| J-Link EDU | 10 MHz | 约300元 | 全ARM芯片 | ⭐⭐⭐⭐ |
| DAP-Link | 2 MHz | 约30元 | 全ARM芯片 | ⭐⭐⭐ |
配置要点:
- 速度别拉满: 我习惯用1MHz,稳定第一。4MHz以上容易受干扰。
- 复位方式: 选「硬件复位」或「SYSRESETREQ」,别用「软件复位」——有时候会卡死在启动文件里。
- Flash下载算法: 选对芯片型号,不然下载到一半报错。
1.6 本章知识体系总览
下面这张图,把咱们第一章的核心逻辑串起来了。你想想看,选型、库选择、OS决策、环境搭建——每一步都影响后面的开发效率。