第1章:开发环境搭建
做嵌入式开发,第一步就是搭环境。这事儿看着简单,但我在带团队时发现,很多人卡就卡在环境配置上。今天咱们就把Keil、IAR、STM32CubeIDE这三个主流IDE,还有调试器、版本管理这些事儿,一次性说清楚。
1.1 IDE的选择与配置
先说IDE。我个人习惯是:项目初期用STM32CubeIDE做快速原型验证,量产阶段切到Keil或IAR。为什么?因为CubeIDE免费,但编译优化和调试体验,说实话,跟商业版还是有差距。
Keil MDK配置要点
Keil是老牌工具了。我建议你装5.38以上版本,对Cortex-M4/M7支持更好。安装时注意:
- 勾选「C51」和「ARM」两个编译器套件
- Device Database一定要更新到最新
- Pack Installer里把STM32F4/F7/H7系列都装上
嗯,这里有个坑。我曾经在项目中期发现Keil编译报错,查了半天,原来是Pack版本跟芯片不匹配。所以建议你装完立刻用Pack Installer更新所有包。
IAR Embedded Workbench配置
IAR的编译器优化做得确实好。同样的代码,IAR能比Keil多优化10%-15%的代码尺寸。配置时注意:
- License选「Full」模式,别选「Evaluation」
- Toolchain选ARM 8.50以上版本
- Project -> Options -> C/C++ Compiler -> Optimizations 里,我一般选「High - Balanced」
STM32CubeIDE配置
这个IDE是ST官方出的,免费且集成CubeMX。配置很简单:
- 从ST官网下载最新版,目前是1.15.0
- 安装时选「STM32CubeIDE + CubeMX」完整包
- Workspace路径别用中文,别问我为什么知道
说实话,CubeIDE的代码生成功能确实方便。但要注意,它生成的HAL库代码有时会带一些冗余初始化。我一般会手动删掉没用的外设配置,能省下不少Flash空间。
1.2 编译器优化选项
编译器优化,说白了就是让代码跑得更快或者更小。但优化不是免费的,它可能引入bug。我见过有人开了-O3优化,结果程序跑飞了,查了三天才发现是优化把某个volatile变量给优化掉了。
| 优化级别 | 说明 | 适用场景 |
|---|---|---|
| -O0 | 不优化,调试最方便 | 开发调试阶段 |
| -O1 | 基本优化,代码尺寸略减 | 功能验证阶段 |
| -O2 | 较高优化,性能提升明显 | 性能敏感场景 |
| -Os | 侧重代码尺寸优化 | Flash空间紧张时 |
| -O3 | 激进优化,可能有风险 | 慎用,需充分测试 |
我个人建议:血糖仪这种医疗设备,用-Os就够了。为什么?因为血糖仪的算法不算复杂,但Flash空间往往很紧张。我曾经在一个项目里,用-Os比-O2省了8KB的Flash,刚好够塞进一个OTA升级模块。
1.3 调试器使用
调试器是嵌入式开发的「眼睛」。J-Link和ST-Link我都用过,说说区别。
J-Link
J-Link是SEGGER家的,稳定性和速度都没得说。配置时注意:
- 驱动装J-Link Software Pack,别用Windows自动更新的
- SWD模式比JTAG模式少用两根线,我一般用SWD
- 速度选4MHz以上,不然调试时卡顿明显
我记得有一次调试一个时序敏感的外设,J-Link的实时数据跟踪(RTT)功能帮了大忙。它能边跑边输出日志,不影响程序执行时序。这个功能在Keil和IAR里都支持。
ST-Link
ST-Link是ST自家的调试器,便宜但功能够用。配置要点:
- ST-Link固件要更新到最新,V2.J37以上
- 在CubeIDE里选「ST-Link (OpenOCD)」作为调试器
- 如果遇到连接失败,先检查驱动,再检查接线
1.4 版本管理(Git)
Git这东西,说实话,很多嵌入式工程师不重视。但我告诉你,没有Git的项目,迟早要出问题。我曾经接手过一个项目,代码存在U盘里,版本号叫「最终版v3_真的最终版_别改了」。你想想看,这能靠谱吗?
血糖仪项目建议这样用Git:
- 主分支(main)只放经过评审和测试的代码
- 开发分支(develop)放日常开发代码
- 功能分支(feature/xxx)开发新功能
- 修复分支(hotfix/xxx)修紧急bug
具体操作上,我建议:
# 初始化仓库
git init
git add .
git commit -m "初始提交:STM32CubeMX生成的工程框架"
# 创建开发分支
git checkout -b develop
# 开发新功能
git checkout -b feature/adc-calibration
# ... 写代码 ...
git add .
git commit -m "完成ADC校准功能,误差小于1%"
git checkout develop
git merge feature/adc-calibration
# 发布版本
git checkout main
git merge develop
git tag v1.0.0
嗯,这里要注意。Git的.gitignore文件一定要配好。我见过有人把编译生成的.o文件和.bin文件都提交到仓库里,结果仓库越来越大,克隆一次要等半天。血糖仪项目的.gitignore至少应该忽略:
- build/ 目录
- *.o, *.d, *.hex, *.bin 等编译产物
- IDE的临时文件(如Keil的*.uvguix.*)
- CubeMX生成的临时文件
好了,这一章的内容就这些。下一章咱们聊聊血糖仪的系统架构设计,那才是真正有意思的部分。