1. 为什么 STM32/STM8 开发者至今还在用 Flash Loader Demonstrator
如果你手头有一块 STM32 最小系统板,或者一块 STM8 的开发板,恰好又没买 ST-Link、J-Link 这类调试器,那么 Flash Loader Demonstrator 大概率是你最早接触的下载工具之一。它通过串口(UART)与芯片内置的 Bootloader 通信,不需要额外的硬件调试器,只要一根 USB 转 TTL 线就能把程序烧进去。这个工具在 ST 官方已经停止更新很多年了,但直到现在,很多工厂产线、教学实验室、个人 DIY 玩家仍然在用它,原因很简单:免费、免安装驱动、支持全系列 STM32 和 STM8 的 UART Bootloader 协议。
Flash Loader Demonstrator v2.8.0 是这条工具链里比较成熟的一个版本,支持 Windows XP 到 Windows 10/11 的 32 位和 64 位系统。它主要解决三个问题:第一,在没有调试器的情况下完成固件烧录;第二,通过串口对芯片进行擦除、读写、校验;第三,配合 Boot0/Boot1 引脚配置,实现从系统存储器启动的 ISP 下载模式。适合谁用?适合刚入门 STM32 的学生、做小批量产线的工程师、以及手头只有串口工具的硬件爱好者。如果你正在搜“stm32无法识别usb设备”或者“stm32串口通信”这类问题,这个工具很可能就是你需要的那个“备胎方案”。
2. 工具核心机制与协议拆解
2.1 UART Bootloader 的通信原理
STM32 和 STM8 在出厂时,芯片内部都固化了一段 Bootloader 代码,存放在系统存储器(System Memory)区域。这段代码不可修改,上电时如果检测到 Boot0 引脚为高电平(STM32)或者特定配置(STM8),芯片就会从系统存储器启动,而不是从用户 Flash 启动。此时,Bootloader 会通过 USART1(STM32)或 UART(STM8)等待主机发送同步字节 0x7F,然后进入命令交互模式。
Flash Loader Demonstrator 做的事情,就是扮演“主机”角色,按照 ST 定义的协议格式发送命令帧。每一帧包含:命令字节、补码校验、数据长度、数据内容、校验和。芯片收到后执行对应操作,并返回 ACK(0x79)或 NACK(0x1F)。这个协议在 ST 的 AN3155 应用笔记里有完整定义,但实际用起来,你不需要背协议,工具已经封装好了。
注意:STM32 的 Bootloader 只支持 USART1,引脚通常是 PA9(TX)和 PA10(RX)。STM8 则根据型号不同,可能是 PD5/PD6 或者 PA1/PA2,具体要看数据手册的“Bootloader”章节。
2.2 为什么选 v2.8.0 而不是更新版本
ST 官方后来主推 STM32CubeProgrammer,功能更全,支持 ST-Link、USB DFU、UART 等多种方式。但 Flash Loader Demonstrator v2.8.0 有几个不可替代的优势:第一,体积小,解压即用,不需要安装 .NET 运行时或 Java 环境;第二,对老芯片的支持更稳定,比如 STM32F1 系列和 STM8S 系列,在 CubeProgrammer 里偶尔会出现握手失败,但在这个工具里基本一次成功;第三,界面简单,没有多余的选项,产线工人培训五分钟就能上手。
我实测过在 Windows 11 上运行 v2.8.0,需要右键属性里勾选“以兼容模式运行 Windows 7”,否则串口枚举可能会卡住。这个坑后面会详细说。
2.3 支持芯片范围与限制
这个工具支持的 STM32 系列包括:F0、F1、F2、F3、F4、L0、L1、L4、W1 等主流型号。STM8 方面,支持 STM8S、STM8L、STM8A 全系列。但要注意,不是所有 STM32 都带 UART Bootloader,比如 STM32F7 和 H7 的部分型号,Bootloader 只支持 USB DFU 或 SPI,UART 方式被阉割了。下载前一定要查对应型号的参考手册,确认“Bootloader”章节里有没有 USART 支持。
另外,芯片的 Flash 容量不同,擦除和写入的时间也不同。比如 STM32F103C8T6 只有 64KB Flash,全片擦除大概 2 秒;而 STM32F407ZGT6 有 1MB Flash,全片擦除要 10 秒以上。工具界面里会显示进度条,但不会告诉你具体耗时,心里要有数。
3. 实操前的硬件与软件准备
3.1 硬件连接清单
你需要准备以下东西:
- 一块 STM32 或 STM8 开发板(最小系统板即可)
- 一根 USB 转 TTL 串口线(CH340、CP2102、FT232 都可以,但建议用 CH340,便宜且稳定)
- 杜邦线若干(母对母或公对母,看你的板子接口)
- 跳线帽或镊子(用于短接 Boot0/Boot1 引脚)
接线方式以 STM32F103C8T6 为例:
| STM32 引脚 | USB 转 TTL 引脚 | 说明 |
|---|---|---|
| PA9 (TX) | RXD | 芯片发送,主机接收 |
| PA10 (RX) | TXD | 芯片接收,主机发送 |
| GND | GND | 共地,必须接 |
| 3.3V | 3.3V | 可选,如果板子已供电则不接 |
注意:千万不要把 USB 转 TTL 的 5V 接到 STM32 的 3.3V 引脚上,会烧芯片。CH340 模块上通常有 3.3V 和 5V 两个输出,选 3.3V。
3.2 Boot 引脚配置
STM32 进入 UART Bootloader 的条件是:Boot0 = 1,Boot1 = 0(对于 F1 系列,Boot1 是 PB2;对于 F4 系列,Boot1 是 BOOT1 选项位)。具体操作:
- 找到板子上的 Boot0 跳线帽,把它从 0 拨到 1。
- 确认 Boot1 为 0(如果板子上没有 Boot1 跳线,默认就是 0)。
- 按一下复位键,或者重新上电。
此时芯片就从系统存储器启动,等待串口命令。下载完成后,把 Boot0 拨回 0,再复位,芯片才会从用户 Flash 启动。
STM8 的配置略有不同:对于 STM8S003F3P6,需要把 PD5 和 PD6 作为 UART 引脚,同时确保选项字节里的 Bootloader 使能位是打开的。出厂默认是打开的,但如果你之前改过选项字节,可能需要用 ST-Link 恢复。
3.3 软件安装与驱动
Flash Loader Demonstrator v2.8.0 是绿色版,解压后直接运行Flash Loader Demonstrator.exe。但第一次运行前,要确保 USB 转 TTL 的驱动已经装好。CH340 驱动在 Windows 10/11 上通常会自动安装,如果没装,去沁恒官网下载。CP2102 去硅 labs 官网下载。装好后,在设备管理器里能看到“USB-SERIAL CH340 (COMx)”这样的条目,记住这个 COM 口号。
如果设备管理器里出现黄色感叹号,说明驱动没装好。这时候可以右键“更新驱动”,手动指向解压出来的驱动文件夹。我遇到过 CH340 在 Windows 11 上被识别为“未知设备”的情况,解决办法是拔掉重插,换一个 USB 口,或者用驱动精灵这类工具修复一下。
4. 完整下载流程与参数配置
4.1 工具界面初识
打开 Flash Loader Demonstrator,界面很朴素,左边是操作向导,右边是日志窗口。第一步选择串口:在“Port Name”下拉框里选你刚才记下的 COM 口。其他参数:
- Baud Rate:默认 115200,如果通信不稳定,可以降到 57600 或 38400。
- Parity:Even(偶校验),这是 ST Bootloader 协议规定的,不能改。
- Echo:Disabled。
- Timeout:默认 5000ms,如果芯片反应慢,可以加到 10000ms。
选好后点“Next”,工具会发送同步字节 0x7F。如果芯片正常进入 Bootloader,日志窗口会显示“Bootloader version: x.x”,然后进入下一步。
4.2 选择目标芯片与 Flash 操作
第二步是选择芯片型号。工具会自动识别一部分芯片,但有时候识别不准,比如把 STM32F103C8T6 识别成 F103C4。这时候手动选“STM32F1 Series”然后选对应的 Flash 容量。选错了会导致擦除地址范围不对,写入失败。
第三步是选择操作类型:
- Erase:全片擦除,或者按页擦除。
- Download to device:把 hex 或 bin 文件写入 Flash。
- Upload from device:把 Flash 内容读出来保存为 bin。
- Verify:校验写入的内容和文件是否一致。
通常流程是:先 Erase,再 Download,最后 Verify。如果只是更新程序,可以跳过 Erase,直接 Download,工具会自动擦除要写入的页。
4.3 加载 hex/bin 文件与地址设置
点“Download to device”后,选择你的固件文件。如果是 .hex 文件,工具会自动解析地址;如果是 .bin 文件,需要手动输入起始地址,通常是 0x08000000。这个地址是 STM32 用户 Flash 的起始地址,写错了程序就跑不起来。
注意:Keil 默认生成的 .hex 文件包含地址信息,直接用就行。但如果用 STM32CubeIDE 生成的 .bin 文件,一定要确认起始地址是 0x08000000。我见过有人把 .bin 写到 0x00000000,结果芯片一直复位。
4.4 执行下载与进度监控
点“Next”后,工具开始擦除和写入。日志窗口会滚动显示:
Erasing memory... Downloading... Verifying...如果中途出现“NACK”或者“Timeout”,先检查接线是否松动,再检查 Boot0 是否确实为高电平。有时候杜邦线接触不良,会导致握手失败,换一根线就好了。
下载完成后,工具会提示“Download successful”。此时把 Boot0 拨回 0,按复位键,程序就开始运行了。
5. 常见问题与排查技巧实录
5.1 握手失败:No response from the target
这是最常见的问题,原因通常有三个:
- Boot0 没拉高:用万用表量一下 Boot0 引脚对地电压,应该是 3.3V。如果是 0V,检查跳线帽是否插好。
- 串口线接反:TX 和 RX 必须交叉连接。芯片的 TX 接模块的 RX,芯片的 RX 接模块的 TX。接反了也能通,但数据是乱的。
- 串口号选错:设备管理器里看看是不是有多个 COM 口,选错了就握手失败。
排查顺序:先量电压,再换线,最后换串口模块。我遇到过 CH340 模块在 115200 波特率下丢包严重,降到 57600 就稳定了。
5.2 擦除失败:Mass erase failed
有时候工具能握手成功,但一擦除就报错。这通常是因为芯片的读保护(RDP)被开启了。读保护等级 1 会禁止通过 Bootloader 擦除和读取 Flash。解决办法:用 ST-Link 连接芯片,在 ST-Link Utility 里把读保护等级降为 0,然后再用 Flash Loader Demonstrator 操作。
另一个原因是 Flash 页大小选错了。比如 STM32F103C8T6 的页大小是 1KB,如果你选成 2KB,擦除地址就会错位。在工具里手动选对型号很重要。
5.3 写入后程序不运行
下载成功但程序不跑,先检查三件事:
- Boot0 是否拨回 0?
- 复位键是否按过?
- 程序起始地址是否是 0x08000000?
如果都正常,可能是中断向量表偏移没设置。比如你用到了 Bootloader 跳转,需要在用户代码里设置SCB->VTOR = 0x08000000。这个坑在“stm32 ota”场景里特别常见。
5.4 常见问题速查表
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| No response | Boot0 未拉高 | 检查跳线,量电压 |
| No response | 串口线接反 | TX/RX 交叉连接 |
| NACK | 波特率过高 | 降到 57600 或 38400 |
| Mass erase failed | 读保护开启 | 用 ST-Link 解除保护 |
| 写入后不运行 | Boot0 未拨回 | 拨回 0 并复位 |
| 写入后不运行 | 起始地址错误 | 改为 0x08000000 |
| 工具卡死 | 兼容性问题 | 以 Win7 兼容模式运行 |
6. 进阶技巧与产线应用建议
6.1 批量下载的脚本化思路
Flash Loader Demonstrator 本身没有命令行版本,但你可以用 AutoIt 或者 Python 的 pywinauto 库模拟鼠标点击,实现半自动下载。更靠谱的方案是直接用 STM32CubeProgrammer 的命令行模式,它支持-c port=COMx和-w file.hex参数,适合产线批量烧录。
如果非要用 Flash Loader Demonstrator,可以做一个简单的工装:把 Boot0 跳线换成拨动开关,串口线固定焊接,然后写一个 AutoIt 脚本,自动选串口、选文件、点下载。我见过一个小厂用这个方法,一天烧 500 片 STM32F103,良率 99% 以上。
6.2 与 ST-Link Utility 的取舍
ST-Link Utility 是另一款常用工具,支持 SWD 调试和下载,速度比 UART 快很多。但它的前提是你有 ST-Link 硬件。如果你手头只有串口线,或者芯片的 SWD 引脚被占用了,Flash Loader Demonstrator 就是唯一选择。另外,ST-Link Utility 不支持 STM8,而 Flash Loader Demonstrator 同时支持 STM8 和 STM32,这是它的独特优势。
6.3 注意事项与实操心得
- 串口线质量很重要:便宜的 CH340 模块在 115200 下容易丢包,建议买带屏蔽的线,或者直接上 FT232。
- 不要热插拔:下载过程中拔掉串口线,可能导致芯片进入异常状态,需要重新上电。
- Boot0 引脚不要悬空:悬空时电平不确定,可能随机进入 Bootloader 或用户 Flash。一定要用跳线帽或电阻拉到确定电平。
- STM8 的选项字节:如果 STM8 下载失败,检查选项字节里的 Bootloader 使能位。用 ST-Link 读出来看看,如果是 0,改成 1 再试。
- Windows 11 兼容性:右键 exe 文件,属性 -> 兼容性 -> 勾选“以兼容模式运行 Windows 7”,否则串口枚举可能卡住。
我个人在实际操作中的体会是,这个工具虽然老,但胜在简单可靠。只要接线对了,Boot0 配置对了,基本不会出幺蛾子。最怕的是芯片读保护开启,这时候工具会报一堆看不懂的错误,其实用 ST-Link 解个锁就完事了。所以手头最好备一个 ST-Link,哪怕只是用来解锁和恢复选项字节。