第三章 软件工具链:串口驱动与烧录工具
做嵌入式开发,有一半的时间在跟工具链较劲。这不是夸张,我早期带团队时,新人入职第一周往往不是学代码,而是装驱动、配环境。串口驱动装不上、烧录工具连不上——这些问题几乎每个人都遇到过。
这一章,咱们就把工具链捋清楚。从驱动到烧录工具,我会把常见的坑和我的习惯做法都告诉你。
本章核心脉络:串口驱动(CH340 / CP2102)→ 烧录工具(STM32CubeProgrammer / esptool.py / Arduino IDE)→ 驱动验证 → 常见故障排查
3.1 串口驱动安装:CH340 与 CP2102
串口驱动是烧录的第一步。没有驱动,电脑认不出你的板子。市面上最常见的两种 USB 转串口芯片就是 CH340 和 CP2102。当然还有 FTDI,但前两者在国产开发板上几乎占到了 90%。
CH340 驱动
CH340 是南京沁恒的产品,便宜、量大。淘宝上十几块的 STM32 最小系统板,十有八九用的就是它。
- Windows:去沁恒官网下载 CH340 驱动,或者直接用驱动精灵。安装后插上板子,设备管理器里会出现 "USB-SERIAL CH340" 的 COM 口。
- macOS:需要安装 CH340 的 macOS 驱动。注意 macOS Catalina 之后有安全提示,要去「安全性与隐私」里允许加载。
- Linux:内核自带驱动,插上就能识别为 /dev/ttyUSB0。不需要额外安装。
我的习惯:Windows 下装完 CH340 驱动后,我会立刻去设备管理器看一眼。如果显示的是黄色感叹号,多半是驱动版本不对。换一个旧版本驱动试试,CH340 的驱动兼容性有时候挺玄学的。
CP2102 驱动
CP2102 是 Silicon Labs 的芯片,比 CH340 稳定一些,价格也贵一点。很多正点原子、野火的板子用的就是它。
- Windows:去 Silicon Labs 官网下载 CP210x 驱动。安装后设备管理器显示 "Silicon Labs CP210x USB to UART Bridge"。
- macOS:同样需要下载对应驱动。我遇到过 macOS 升级后驱动失效的情况,重新安装一遍就好。
- Linux:内核自带,即插即用。
注意:CH340 和 CP2102 的驱动不能混用。我曾经见过有人把 CP2102 的驱动强行装给 CH340,结果设备管理器里显示 "Unknown Device"。说白了,芯片型号要对上。
3.2 驱动验证:确认你的串口在工作
驱动装完,怎么知道它真的能用了?别急着打开烧录工具,先做两步验证。
- 看设备管理器(Windows)或 ls /dev/tty*(Linux/macOS)。确认出现了对应的 COM 口或 tty 设备。
- 用串口助手测试:打开一个串口助手(比如 SSCOM、Putty),选择对应的 COM 口,波特率设 115200,打开串口。如果板子有上电打印信息,你应该能看到乱码或正常输出。
为什么先做这个?因为烧录工具连不上时,你至少能确认是驱动问题还是工具问题。我在项目中遇到过好几次,折腾半天烧录工具,最后发现是驱动没装对——白白浪费了两个小时。
3.3 烧录工具概览
驱动搞定后,就该上烧录工具了。不同芯片厂商有自己的工具,但核心逻辑是一样的:通过串口把固件写到芯片的 Flash 里。
| 工具名称 | 适用芯片 | 操作方式 | 我的评价 |
|---|---|---|---|
| STM32CubeProgrammer | STM32 全系列 | GUI + 命令行 | 功能全面,但启动慢 |
| esptool.py | ESP32 / ESP8266 | 命令行 | 轻量、稳定,我常用 |
| Arduino IDE | Arduino 系列 + ESP32 | GUI 一键烧录 | 适合快速验证 |
3.3.1 STM32CubeProgrammer
ST 官方工具,支持串口、USB DFU、SWD 等多种烧录方式。串口烧录时,需要把 BOOT0 拉高、BOOT1 拉低,让芯片进入系统存储器模式。
基本用法:
# 命令行烧录(串口)
STM32_Programmer_CLI -c port=COM3 -w firmware.hex -v
参数说明:-c port=COM3 指定串口,-w 写入固件,-v 校验。我个人习惯每次都加 -v,烧录完自动校验,省得心里不踏实。
避坑指南:我曾经遇到过 STM32CubeProgrammer 连不上芯片,提示 "No STM32 target found"。检查了半天,发现是 BOOT0 没拉高。嗯,这种低级错误犯过一次就不会再犯了。
3.3.2 ESP32 esptool.py
esptool.py 是乐鑫官方的烧录工具,基于 Python。它轻量、跨平台,而且支持脚本化操作。我经常在 CI 流水线里用它做自动化烧录。
安装:
pip install esptool
烧录命令:
# 擦除 Flash
esptool.py --port COM3 erase_flash
# 烧录固件
esptool.py --port COM3 --baud 921600 write_flash 0x1000 firmware.bin
注意波特率。默认 115200 太慢,我一般用 921600,只要线材质量不太差,都能稳定跑。
重要:ESP32 烧录前需要让芯片进入下载模式。通常是按住 BOOT 键、按一下 EN 键、松开 BOOT 键。这个顺序不能错。我见过有人按了十几次都进不去,最后发现是 BOOT 键没按到底。
3.3.3 Arduino IDE
Arduino IDE 虽然简单,但背后调用的也是 avrdude 或 esptool.py 这类工具。它把底层细节封装了,适合快速原型验证。
用 Arduino IDE 烧录 ESP32 的步骤:
- 在「文件 → 首选项」里添加 ESP32 开发板管理器地址。
- 在「工具 → 开发板」里选择对应的 ESP32 型号。
- 选择正确的 COM 口。
- 点击「上传」按钮。
Arduino IDE 会自动处理编译和烧录。但说实话,如果做产品级开发,我还是更推荐用 esptool.py 或 STM32CubeProgrammer——Arduino IDE 的日志输出太简略了,出了问题很难排查。
3.4 常见故障与排查思路
工具链的问题,说来说去就那么几类。我整理了一个速查表,你遇到问题时可以对着看。
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 设备管理器无新 COM 口 | 驱动未安装 / 线材问题 | 重装驱动,换 USB 线 |
| COM 口有黄色感叹号 | 驱动版本不匹配 | 换旧版驱动或官方驱动 |
| 烧录工具连不上芯片 | BOOT 模式不对 / 波特率不匹配 | 检查 BOOT 引脚,降低波特率 |
| 烧录到一半卡死 | 电源不稳定 / 线材干扰 | 换短 USB 线,外接电源 |
| 校验失败 | Flash 损坏 / 固件地址错误 | 重新擦除 Flash,检查地址 |
核心原则:遇到烧录问题,先确认驱动,再确认硬件连接,最后才怀疑工具本身。这个顺序不要搞反。