1. 项目概述
最近在调试一块STM32F103C8T6最小系统板时,发现板载的USB转串口芯片坏了。作为一名电子工程师,这种情况太常见了——要么是芯片烧了,要么是虚焊了。好在手头正好有CH340G的USB转TTL模块,价格不到5块钱,却能解决大问题。
CH340系列芯片是国内厂商沁恒推出的USB转串口芯片,稳定性不错,价格低廉,在创客圈和电子爱好者中广泛使用。而STM32F103C8T6则是ST公司经典的Cortex-M3内核单片机,64KB Flash,20KB RAM,性价比极高。本文将详细介绍如何用这个廉价但可靠的组合完成程序烧录。
2. 硬件准备与连接
2.1 所需材料清单
- CH340G USB转TTL模块(其他版本如CH340C/T等也适用)
- STM32F103C8T6最小系统板(或自制开发板)
- 杜邦线若干(建议使用不同颜色区分信号)
- 微型USB数据线(用于给CH340供电)
- 可选:100nF电容(用于NRST引脚滤波)
2.2 引脚连接详解
CH340模块与STM32的连接需要特别注意电平匹配和信号流向:
| CH340引脚 | STM32引脚 | 备注 |
|---|---|---|
| TXD | PA10 (USART1_RX) | 数据从CH340发送到STM32 |
| RXD | PA9 (USART1_TX) | 数据从STM32发送到CH340 |
| GND | GND | 必须共地 |
| 3.3V | 3.3V | 可选,可为STM32供电 |
重要提示:CH340模块上通常有一个跳线帽选择3.3V或5V输出电平。STM32是3.3V器件,务必确保跳线选择3.3V模式,否则可能损坏芯片!
2.3 Bootloader模式设置
STM32需要通过Boot引脚进入系统存储器启动模式才能通过串口烧录:
- 将BOOT0跳线接高电平(接3.3V)
- BOOT1保持低电平(接地)
- 按下复位键(或重新上电)
成功进入Bootloader后,STM32的USART1将等待接收编程指令。此时PC端会识别到CH340的串口设备,但不会看到STM32本身的USB设备(如果板载的话)。
3. 软件环境配置
3.1 驱动程序安装
CH340在Windows 10/11下通常能自动识别,但较老系统可能需要手动安装:
- 从沁恒官网下载最新驱动(版本号建议≥3.5)
- 插入CH340模块后,在设备管理器中查看端口号(如COM3)
- 测试串口通信:使用Putty等工具发送AT指令,检查回显
3.2 烧录工具选择
推荐使用开源的STM32Flash工具,支持命令行操作:
bash复制# 安装命令(Linux)
sudo apt install stm32flash
# Windows用户可直接下载预编译二进制
或者使用ST官方工具STM32CubeProgrammer(功能更全面):
- 下载安装STM32CubeProgrammer
- 选择"UART"连接方式
- 配置正确的COM端口和波特率(默认115200)
3.3 编译生成二进制文件
以Keil MDK为例,生成烧录文件:
- 在Options for Target → Output中勾选"Create HEX File"
- 编译项目后得到.hex文件
- 也可生成.bin文件(需在User选项卡添加转换命令)
4. 实际烧录操作
4.1 使用stm32flash命令行工具
bash复制# 基本烧录命令
stm32flash -w firmware.hex -v -g 0x0 /dev/ttyUSB0
# 参数说明:
# -w 指定hex文件路径
# -v 校验写入内容
# -g 从指定地址开始执行(0x0表示从Flash启动)
# 最后指定串口设备(Windows用COMx)
常见问题处理:
- 如果报错"can't init device",检查BOOT引脚设置和串口权限
- 波特率不匹配可添加-b选项,如-b 115200
4.2 使用STM32CubeProgrammer图形界面
- 打开软件选择UART模式
- 配置连接参数:
- Port: COMx (查看设备管理器)
- Baud rate: 115200
- Parity: Even
- Stop bits: 1
- 点击"Connect"按钮
- 成功连接后,选择"Erase & Program"选项卡
- 加载hex/bin文件,勾选"Verify programming"
- 点击"Start Programming"
4.3 烧录后操作
- 将BOOT0重新接回低电平
- 复位STM32,程序将从Flash正常启动
- 如需调试,可连接SWD接口(但需要额外调试器)
5. 常见问题排查
5.1 无法识别串口
- 检查CH340驱动是否安装成功(设备管理器有无黄色感叹号)
- 尝试更换USB端口或数据线
- Linux下检查用户是否在dialout组:
sudo usermod -a -G dialout $USER
5.2 连接Bootloader失败
- 确认BOOT0=1,BOOT1=0的接线正确
- 检查TX/RX是否交叉连接(CH340的TXD接STM32的RXD)
- 尝试降低波特率:
stm32flash -b 57600 /dev/ttyUSB0 - 测量NRST引脚电压,确保复位电路正常
5.3 程序烧录后不运行
- 检查启动模式是否切换回BOOT0=0
- 验证编译时的Flash地址设置(通常应为0x08000000)
- 使用ST-Link Utility读取Flash内容,确认烧录成功
6. 进阶技巧与优化
6.1 自动复位电路设计
为避免手动操作BOOT引脚,可以设计自动复位电路:
- 在CH340的DTR引脚和STM32的NRST之间串联100Ω电阻
- 在NRST和地之间接100nF电容
- 配置烧录工具使用DTR控制复位(stm32flash支持-R选项)
6.2 波特率优化
虽然默认115200波特率可用,但可以尝试更高波特率加速烧录:
- 修改stm32flash命令:
-b 460800 - 在STM32CubeProgrammer中手动输入更高波特率
- 注意:过高波特率可能导致通信不稳定
6.3 多平台支持
MacOS用户可以使用brew安装工具:
bash复制brew install stm32flash
Linux下可能需要设置udev规则避免权限问题:
bash复制echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="1a86", MODE="0666"' | sudo tee /etc/udev/rules.d/99-ch340.rules
7. 替代方案对比
虽然CH340方案成本低,但存在一些局限性:
| 方案 | 优点 | 缺点 |
|---|---|---|
| CH340+UART | 成本极低,接线简单 | 需手动切换Boot模式,速度较慢 |
| ST-Link | 支持调试和烧录,速度快 | 需要专用调试器,成本高 |
| USB DFU | 无需额外硬件 | 需要修改代码支持DFU功能 |
对于频繁开发的场景,建议还是配备ST-Link调试器。但作为应急方案或批量生产时的低成本烧录方式,CH340+串口的组合非常实用。
