1. 硬件准备与连接原理
CH340作为一款经典的USB转TTL芯片,成本仅需几元钱却能实现与STLink相同的程序烧录功能。我实测过市面上常见的蓝色CH340G模块,稳定性完全不输专业下载器。关键在于理解其与STM32的通信机制:
1.1 串口交叉接线原理
TXD(发送端)与RXD(接收端)必须交叉连接的本质是数据流向匹配。当CH340的TXD发出数据时,必须接入STM32的RXD引脚才能正确接收。我曾因接反导致通信失败,用逻辑分析仪抓包发现双方TXD同时输出导致信号冲突。正确的接法应该是:
- CH340_TXD → STM32_RXD(PA10)
- CH340_RXD → STM32_TXD(PA9)
1.2 电源配置要点
开发板上的3.3V和5V选择常让新手困惑。STM32F103的IO口耐压5V,但核心供电必须3.3V。我的经验是:
- 使用跳线帽短接VCC和3V3(禁用5V)
- CH340的VCC引脚可不接(仅需共地)
- 开发板需单独供电(USB或外接电源)
特别注意:某些CH340模块的5V输出直接来自USB,若误接可能烧毁3.3V器件
1.3 BOOT模式配置
STM32的启动模式由BOOT0/BOOT1引脚决定。烧录时需要:
- BOOT0=1(从系统存储器启动)
- BOOT1=0(保持默认)
- 完成烧录后必须将BOOT0恢复为0(从主闪存启动)
我习惯用拨码开关快速切换,比跳线帽更可靠。曾因忘记复位BOOT0导致程序不运行,排查半天才发现问题。
2. 软件环境搭建
2.1 驱动安装避坑指南
CH340驱动安装失败是常见问题,特别是在Win10/Win11系统。建议:
- 从官网下载最新驱动(v3.5以上版本)
- 若提示"预安装成功但设备未启动",需:
- 禁用驱动程序强制签名(开机按F8)
- 手动指定inf文件路径
- 设备管理器出现"USB-SERIAL CH340"即成功
2.2 FlyMcu配置详解
这款免安装的串口烧录工具虽然界面简陋但非常实用。关键配置项:
- 波特率:建议115200(与STM32默认波特率匹配)
- 校验位:None
- 数据位:8
- 停止位:1
- 编程后执行:勾选(自动跳转到用户程序)
实测发现:某些国产CH340芯片在230400波特率下会出现数据丢失
2.3 Keil生成HEX文件
很多初学者会漏掉这个关键步骤:
- 点击魔术棒→Output选项卡
- 勾选"Create HEX File"
- 重新编译工程
- HEX文件默认生成在Objects文件夹
我建议在Post-build栏添加以下命令,自动复制HEX文件到固定目录:
code复制copy .\Objects\*.hex ..\HexOutput\
3. 完整烧录流程
3.1 分步操作指南
-
硬件连接:
- 接好交叉串口线
- 开发板上电
- BOOT0置1(BOOT1保持0)
-
软件操作:
- 打开FlyMcu
- 选择生成的HEX文件
- 点击"开始编程"
-
状态确认:
- 进度条走完显示"编程成功"
- 将BOOT0拨回0
- 按下复位键
3.2 常见错误排查
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 连接超时 | 串口线接反 | 交换TXD/RXD |
| 校验错误 | 波特率不匹配 | 尝试降低波特率 |
| 无响应 | BOOT模式错误 | 确认BOOT0=1 |
| 编程失败 | 电源不稳定 | 外接稳压电源 |
3.3 性能优化技巧
-
在FlyMcu的"配置"选项卡中:
- 启用"加速编程"(缩短30%时间)
- 设置"重试次数"为3次(提高可靠性)
-
对于大容量程序:
- 勾选"分段编程"
- 设置每包256字节
4. 进阶应用与替代方案
4.1 命令行烧录方法
对于批量生产环境,推荐使用stm32flash工具:
bash复制stm32flash -w firmware.hex -v -g 0x0 /dev/ttyUSB0
优势:
- 支持自动波特率检测
- 可集成到CI/CD流程
- 提供校验和验证
4.2 其他烧录工具对比
| 工具 | 优点 | 缺点 |
|---|---|---|
| STLink | 支持调试 | 价格高 |
| JLink | 速度快 | 需要驱动 |
| CH340 | 成本低 | 仅限烧录 |
4.3 自制自动复位电路
通过添加三极管和电容,可实现BOOT0自动切换:
- 编程时:CH340_DTR拉低触发BOOT0=1
- 完成后:DTR恢复高电平,BOOT0=0
- 无需手动操作跳线帽
具体电路可参考开源项目《STM32自动下载器设计》
我在实际项目中总结出一个经验:对于需要频繁烧录的开发阶段,建议保留SWD接口作为备用;量产时再用CH340方案降低成本。曾遇到串口烧录失败的情况,幸好留有SWD接口才能紧急修复。
