一、简介
TIP
基于 WebUSB 技术实现的 STM32 DFU 在线刷写工具,可直接在浏览器中完成固件烧录、内存读取、Flash 擦除和选项字节管理。
注意:本工具当前专为立创开发板推出的「立创·天空星 STM32F407」系列设计,通过 TYPE-C USB 口连接使用。
1.1 功能特性
| 功能 | 说明 |
|---|---|
| 固件烧录 | 支持 .bin 和 .hex 格式,自动解析多段 HEX,烧录后可选校验和自动启动 |
| 内存读写 | 以 Hex Viewer 形式查看任意地址的内存数据,支持 8/16/32 位宽显示,可导出为 BIN 文件 |
| Flash 擦除 | 支持全片擦除和按扇区擦除,可视化扇区选择 |
| 选项字节 | 读取/写入 RDP 读保护等级、BOR 掉电复位阈值、看门狗模式、写保护配置 |
| 读保护检测 | 连接时自动检测读保护状态,提示用户是否解除 |
| 操作日志 | 实时显示所有操作的详细日志 |
| 无需安装 | 纯浏览器实现,无需上位机软件 |
1.2 支持的硬件
| 型号 | Flash | 扇区数 |
|---|---|---|
| 立创·天空星 STM32F407VET6(青春版) | 512 KB | 8 个(4×16KB + 1×64KB + 3×128KB) |
| 立创·天空星 STM32F407VGT6(高配版) | 1 MB | 12 个(4×16KB + 1×64KB + 7×128KB) |
1.3 浏览器要求
本工具依赖 WebUSB API,需使用以下浏览器:
| 浏览器 | 最低版本 |
|---|---|
| Google Chrome | 61+ |
| Microsoft Edge | 79+ |
建议直接下载最新的版本
1.4 快速开始
- 将天空星开发板设置为 DFU 模式
- 用 TYPE-C 数据线连接开发板与电脑
- 用 Chrome/Edge 打开工具页面
- 点击「连接设备」,在弹出的设备列表中选择 STM32 BOOTLOADER
- 选择固件文件,点击「开始烧录」
二、使用教程
2.1 前期准备 安装驱动
在 Windows 系统上,STM32 进入 DFU 模式后,操作系统默认无法正确识别该设备,需要先安装 ST 官方提供的 DFU 驱动程序。
macOS 和 Linux 无需安装驱动,可跳过本节。
驱动下载:
点击下方链接下载驱动安装包:
如果你没有按照本节安装这个驱动,直接进行下一步 【2.2 第一步:让开发板进入 DFU 模式】章节中让天空星进入了DFU模式,电脑也没有驱动的话,就会在设备前面有一个黄色感叹号。此时本工具是无法使用的。
安装步骤:
- 解压下载的
DFU_Driver.zip - 打开设备管理器,右键有黄色感叹号的 STM32 BOOTLOADER 设备,单击更新

在这里选择我们在第一步解压好的DFU文件夹:

- 安装完成后,将开发板设置为 DFU 模式并连接电脑(不知道怎么设置的话请看后面的2.2小节),在 Windows 设备管理器中应能看到没有黄色感叹号的 STM32 BOOTLOADER 设备了

注意: 若安装驱动后仍无法识别,可尝试重新插拔 USB 线,或在设备管理器中手动更新驱动。
2.2 第一步:让开发板进入 DFU 模式
STM32 的 DFU 模式由 BOOT0 引脚电平决定。天空星开发板上有专用的 BOOT 按键(在板子左上角,最右边那个按键),操作步骤如下:

方法一:插入TYPE-C线后操作(推荐)
- 先给天空星插入TYPE-C上电,然后按住开发板上的 BOOT0 按键不要松手
- 按一下 RESET 复位键后松开
- 松开 BOOT0 按键
- 此时开发板已进入 DFU 模式
方法二:插入TYPE-C线时操作
- 拔掉开 USB 供电
- 按住开发板上的 BOOT0 按键不要松手
- 重新插入 USB 线上电
- 松开 BOOT0按键
判断天空星开发板是否成功进入 DFU 模式: 在 Windows 设备管理器中,会出现「STM32 BOOTLOADER」或「STM32 DFU」设备。
2.3 第二步:打开工具页面
访问下面的链接:
2.4 第三步:连接设备
- 确认开发板已进入 DFU 模式并通过 TYPE-C 线连接电脑
- 点击左侧边栏顶部的「连接设备」按钮
- 浏览器弹出设备选择对话框,选择「STM32 BOOTLOADER」并点击「连接」

连接成功后:
- 按钮变为「断开连接」,状态指示灯变绿
- 侧边栏显示设备名称和 VID/PID
- 若检测到读保护,会弹出提示询问是否解除
2.5 固件烧录
导航到「烧录」页面。
操作步骤:
- 选择固件文件:将
.bin.hex文件拖放到上传区域,或点击区域选择文件.hex文件会自动解析多段数据,起始地址从文件中读取.bin文件需手动确认起始地址
- 确认起始地址:默认为
0x08000000(STM32 Flash 起始地址),通常无需修改 - 选择烧录选项:
- 烧录后校验:烧录完成后回读数据与原文件逐字节比对,确保写入正确(会增加约一倍时间)
- 下载后启动:烧录完成后自动发送复位命令,设备退出 DFU 模式并运行新固件(默认勾选)
- 点击「开始烧录」按钮
- 观察进度条和日志,等待完成

烧录流程说明:
工具按照 STM32 AN3156 标准流程执行:
- 计算固件覆盖的扇区,逐一擦除(进度 0%~20%)
- 按 2KB 块逐段写入数据(进度 20%~95%)
- 发送零长度包触发 MANIFEST,设备复位启动(进度 100%)
2.6 内存读写
导航到「内存读写」页面,可读取 STM32 任意地址的内存内容。

操作步骤:
- 填写「地址」:要读取的起始地址,支持十六进制(如
0x08000000) - 填写「大小」:读取字节数,支持十六进制(如
0x400= 1024 字节) - 选择「数据宽度」:8位、16位或32位,影响 Hex Viewer 的列显示方式
- 点击「读取」按钮
- 数据以表格形式显示,包含地址列、数据列和 ASCII 列
其他功能:
- 查找数据:在搜索框输入十六进制值,匹配的单元格会高亮显示
- 导出 BIN:点击「导出 BIN」按钮,将读取的数据保存为二进制文件,文件名包含地址和大小信息
注意: 若设备启用了读保护(RDP Level 1/2),内存读取将失败。需先解除读保护。
2.7 Flash 擦除
导航到「擦除」页面。 
2.7.1 全片擦除
点击「全片擦除」按钮,确认后擦除全部 Flash 内容。
全片擦除会清除所有用户程序,操作不可撤销。
2.7.2 扇区擦除
- 在扇区地图中点击要擦除的扇区卡片(可多选),选中的卡片会高亮
- 也可使用「全选」/「取消全选」快速操作
- 点击「擦除选中扇区」按钮,确认后执行
STM32F407 扇区布局:
| 扇区 | 起始地址 | 大小 |
|---|---|---|
| 扇区 0 | 0x08000000 | 16 KB |
| 扇区 1 | 0x08004000 | 16 KB |
| 扇区 2 | 0x08008000 | 16 KB |
| 扇区 3 | 0x0800C000 | 16 KB |
| 扇区 4 | 0x08010000 | 64 KB |
| 扇区 5 | 0x08020000 | 128 KB |
| 扇区 6 | 0x08040000 | 128 KB |
| 扇区 7 | 0x08060000 | 128 KB |
| 扇区 8~11 | 0x08080000~ | 128 KB × 4(仅 1MB 版) |
2.8 选项字节管理
导航到「选项字节」页面,可读取和修改 STM32 的选项字节配置。 
读取选项字节:
点击「读取」按钮,工具切换到 Option Bytes alternate interface(alt=1)读取数据,完成后显示:
- RDP 读保护等级(概览栏)
- 原始十六进制数据
- 各字段的详细配置
可配置项说明:
RDP 读保护(Read Out Protection)
| 等级 | 值 | 说明 |
|---|---|---|
| Level 0 | 0xAA | 无保护,Flash 可自由读写(出厂默认) |
| Level 1 | 0xBB | 禁止调试器读取 Flash;从 Level 1 回退到 Level 0 会触发全片擦除 |
| Level 2 | 0xCC | 永久锁定 JTAG/SWD,不可逆! 芯片将无法再被调试或重新编程 |
Level 2 设置后无法恢复,请谨慎操作。工具会弹出两次确认对话框。
BOR Level(掉电复位阈值)
VDD 低于设定阈值时触发复位,防止低电压下 Flash 数据损坏:
| 选项 | 阈值 |
|---|---|
| BOR OFF | 1.8V ~ 2.1V(关闭) |
| Level 1 | 2.10V ~ 2.40V |
| Level 2 | 2.40V ~ 2.70V |
| Level 3 | 2.70V ~ 3.60V(最安全) |
用户配置(User Configuration)
- WDG_SW:勾选 = 软件看门狗(需代码主动启动);取消 = 硬件看门狗(上电自动启动,必须喂狗否则复位)
- nRST_STOP:勾选 = 进入 STOP 模式不复位;取消 = 进入 STOP 模式时产生复位
- nRST_STDBY:勾选 = 进入 STANDBY 模式不复位;取消 = 进入 STANDBY 模式时产生复位
写保护(Write Protection)
勾选 = 该扇区可写(未保护);取消 = 该扇区写保护(只读)。
应用修改:
配置完成后点击「应用」按钮,工具会弹出确认对话框显示即将写入的值,确认后写入。写入完成后设备可能复位,需断开重连。
解除读保护:
页面底部「危险操作」区域提供「解除读保护」按钮,用于将 Level 1 降回 Level 0。操作会擦除全部 Flash 并复位设备。
2.9 设备信息
导航到「设备信息」页面,可查看:

- 设备名称、芯片型号、厂商 ID、产品 ID、序列号
- Flash 大小和 DFU 版本
- Flash 内存映射可视化图(按扇区比例显示)
- 工具更新日志
在此页面可手动切换「目标芯片」型号(512KB / 1MB),切换后扇区地图和 Flash 映射图会同步更新。
三、技术实现
3.1 协议栈
浏览器 WebUSB API
└── USB DFU 1.1 规范 (dfu.js)
├── DFU_DNLOAD (0x01) — 下载数据块
├── DFU_UPLOAD (0x02) — 上传数据块
├── DFU_GETSTATUS (0x03) — 查询状态
├── DFU_CLRSTATUS (0x04) — 清除错误
├── DFU_GETSTATE (0x05) — 查询状态机
└── DFU_ABORT (0x06) — 中止操作
└── STM32 AN3156 扩展命令
├── SET_ADDRESS (0x21) — 设置地址指针
├── ERASE (0x41) — 扇区/全片擦除
└── READ_UNPROTECT (0x92) — 解除读保护2
3
4
5
6
7
8
9
10
11
12
3.2 关键设计
Alternate Interface 切换
STM32 DFU 设备通常暴露多个 alternate interface:
alt=0:Internal Flash(固件烧录、内存读写、擦除)alt=1:Option Bytes(选项字节读写)
工具在需要操作选项字节时自动切换到 alt=1,操作完成后切回 alt=0。
Intel HEX 多段解析
支持完整的 Intel HEX 格式,包括:
- Record Type 0x00:数据记录
- Record Type 0x02:扩展段地址
- Record Type 0x04:扩展线性地址
- 校验和验证
- 自动合并连续地址段
状态机轮询
严格按照 AN3156 的轮询流程:发送命令 → GETSTATUS 获取 bwPollTimeout → 等待 → 再次 GETSTATUS 确认完成,避免在设备忙时发送下一条命令。
3.3 文件结构
stm32f407-web-dfu/
├── index.html # 页面结构与 UI 布局
├── style.css # 深色主题样式
├── dfu.js # DFU 协议核心实现(STM32_DFU 类)
├── app.js # 应用逻辑、事件绑定、UI 渲染
└── README.md # 本文档2
3
4
5
6
四、常见问题
Q:点击「连接设备」后弹出的列表是空的,找不到设备?
A:按以下顺序排查:
- 确认开发板已正确进入 DFU 模式
- 检查 USB 线是否为数据线(部分充电线无数据线)
- 在 Windows 设备管理器中确认是否出现「STM32 BOOTLOADER」
- 确认使用的是 Chrome 或 Edge 浏览器,且版本足够新
Q:烧录失败,日志显示 errVENDOR?
A:errVENDOR 通常表示设备启用了读保护。连接后工具会自动检测并提示,也可在「选项字节」页手动解除读保护。注意解除读保护会擦除全部 Flash。
Q:烧录 .hex 文件时起始地址是多少?
A:HEX 文件中已包含地址信息,工具会自动解析并填入起始地址,无需手动修改。
Q:烧录完成后设备没有启动?
A:检查「下载后启动」选项是否勾选。若已勾选但设备仍未启动,可能是固件本身有问题,或者你还是一直按着 BOOT0按键没松手,导致天空星又进入BOOTLOADER模式了。
Q:内存读取显示全 FF,是正常的吗?
A:Flash 擦除后默认值为 0xFF,如果读取到全 FF 说明该区域已被擦除或从没有写入过数据,属于正常现象。
Q:选项字节写入后需要重新上电吗?
A:是的。修改 RDP、BOR 等选项字节后,设备通常需要断电重新上电才能生效。工具会在写入完成后提示断开重连。
Q:如何备份当前固件?
A:在「内存读写」页面,将地址设为 0x08000000,大小设为芯片 Flash 总大小(512KB = 0x80000,1MB = 0x100000),点击「读取」后再点击「导出 BIN」即可保存备份。