st-flash:烧录 STM32
更新时间:2026-09-21。硬件工具。需要断点单步调试用 OpenOCD,编译固件用 arm-none-eabi-gcc。
一句话回答
st-flash 是开源 stlink 工具集的烧录命令,用 ST-Link 探针经 SWD 把固件写进 STM32:st-flash write firmware.bin 0x08000000 烧到 Flash 起始地址,read 读回校验、erase 整片擦除、reset 复位;配合 st-info 查看芯片 ID 和容量。
一、安装
bash
sudo apt install stlink-tools # Debian/Ubuntu
st-flash --versionWindows 可从 stlink 项目 GitHub 下 Release,或用各发行包。
二、常用命令
bash
st-info --probe # 看是否识别到探针和芯片
st-info --flash # Flash 大小/起始地址
st-flash erase # 整片擦除
st-flash write firmware.bin 0x08000000 # 烧 bin(必须给地址)
st-flash read backup.bin 0x08000000 0x10000 # 读回 64KB
st-flash reset # 复位运行- bin 必须带地址:bin 是纯二进制、不含地址信息,所以要写
0x08000000; - 若用 hex(Intel HEX 自带地址),按工具对应参数烧,地址由文件给出。
三、多个探针
bash
st-info --serial # 列出序列号
st-flash --serial 30303... write firmware.bin 0x08000000常见坑
- 接线错误:SWDIO/SWCLK/GND(必要时 NRST、3V3)接错或接触不良,识别不到。
- ST-Link 驱动:Windows 需要 USB 驱动(WinUSB/libusb),否则 st-info 找不到设备。
- 芯片读保护(RDP)开启:需先解除读保护(会擦除芯片),否则烧不进/读出全 FF。
- 进入低功耗/时钟配置异常:把 SWD 引脚复用或进了停机模式导致连不上,接 NRST 用 connect-under-reset。
- bin/hex 地址混淆:bin 漏地址烧错位置;务必确认起始 0x08000000。
- 固件超出 Flash:容量不够会报错,先用 st-info 确认大小。
- 只适合烧录、不擅长源码级调试:要看变量/断点请用 OpenOCD + GDB。
总结
st-flash 经 ST-Link/SWD 烧录 STM32:write 时给 0x08000000 地址、read 校验、erase/reset 管理,st-info 探测芯片;连接问题集中在接线、驱动、读保护和 SWD 引脚被复用/低功耗,需要调试时改用 OpenOCD。