目录
1. 简介
STM32CubeProgrammer(简称STM32CubeProg)是意法半导体官方推出的全能型编程工具,用于在各类环境中对STM32微控制器和微处理器进行烧录。
1.1 主要特性
- 多操作系统支持:Windows、Linux、macOS
- 多种连接接口:JTAG、SWD、USB、UART、SPI、CAN、I2C
- 双模式操作:图形界面(GUI)和命令行界面(CLI)
- 脚本自动化:支持通过脚本实现自动烧录
- 安全编程:支持SFI(安全固件安装)、SSP(安全机密供应)等
- 多器件并行编程:可同时烧录多个STM32设备
1.2 适用器件
- STM32 32位MCU(基于Arm Cortex-M处理器)
- STM32 32位MPU(基于Arm Cortex-A处理器)
2. 系统要求与安装
2.1 系统要求
| 操作系统 | 支持版本 |
|---|---|
| Windows | Windows 10 (32/64位), Windows 11 (64位) |
| Linux | Ubuntu LTS 22.04/24.04, Fedora 41 |
| macOS | Sonoma (14), Sequoia (15) - 支持x86_64和ARM架构 |
其他要求:
- 最低屏幕分辨率:1024x768
- 从v2.6.0版本开始,无需单独安装Java环境(工具自带Liberica JRE 8.0.432)
2.2 安装步骤
Windows安装
- 从ST官网下载对应32位或64位的zip安装包
- 解压后执行
SetupSTM32CubeProgrammer-vx.y.z.exe - 按向导提示完成安装
Linux安装
bash
# 安装libusb依赖(USB连接必需)
sudo apt-get install libusb-1.0.0-dev
# 复制udev规则文件
cd <安装目录>/Drivers/rules
sudo cp *.* /etc/udev/rules.d/
# 执行安装程序
./SetupSTM32CubeProgrammer-vx.y.z.linux
macOS安装
bash
# 双击运行安装程序
SetupSTM32CubeProgrammer-vx.y.z.app
# 如安装失败,尝试命令行启动
./SetupSTM32CubeProgrammer-x.y.z.app/Contents/MacOs/SetupSTM32CubeProgrammer-x_y_z_macos
2.3 DFU驱动安装(Windows)
如需使用USB DFU模式,需安装DFU驱动:
- 进入安装目录的
Drivers/DFU_Driver文件夹 - 右键以管理员身份运行
STM32 Bootloader.bat - 如之前安装过DfuSe驱动,需先卸载并重启
2.4 环境变量配置(Linux)
将STM32CubeProgrammer添加到PATH:
bash
export PATH=<安装目录>/bin:$PATH
或创建软链接:
bash
ln -s <安装目录>/bin/STM32_Programmer_CLI /home/bin/STM32_Programmer_CLI
3. 图形用户界面(GUI)使用指南
3.1 主窗口布局
GUI主窗口包含以下主要区域:
- 主菜单栏:文件、编辑、视图、帮助等
- 日志面板:显示操作信息和状态
- 进度条:显示当前操作进度
- 目标配置面板:配置连接参数
3.2 连接配置
ST-LINK连接
- 选择连接类型为"ST-LINK"
- 设置SWD/JTAG接口参数
- 点击"Connect"按钮
UART连接
- 选择连接类型为"UART"
- 配置串口参数(波特率、数据位、停止位、校验位)
- 点击"Connect"按钮
典型UART配置:
- 波特率:115200
- 数据位:8
- 停止位:1.0
- 校验位:Even
- 流控:Off
3.3 烧录操作流程
- 连接目标:选择正确的接口并连接
- 加载文件:点击"Browse"选择固件文件(支持.bin、.hex、.elf)
- 配置地址:确认起始地址(STM32 MCU通常为0x08000000)
- 选择擦除选项:全片擦除或扇区擦除
- 开始烧录:点击"Start Programming"或"Download"
3.4 高级功能
选项字节配置
- 可修改RDP(读保护)级别
- 配置看门狗、BOR等选项
外部存储器编程
- 支持通过外部加载器编程SPI Flash、NAND等
- 需提供
.stldr格式的外部加载器文件
无线协议栈烧录(STM32WB系列)
- 支持FUS/协议栈升级
- 密钥配置功能
寄存器查看器
- 实时查看和修改MCU寄存器
- 支持Cortex-M内核寄存器访问
4. 命令行界面(CLI)使用指南
4.1 基本语法
bash
STM32_Programmer_CLI [选项] [命令]
CLI可执行文件位置:
- Windows:
<安装目录>/bin/STM32_Programmer_CLI.exe - Linux/macOS:
<安装目录>/bin/STM32_Programmer_CLI
4.2 核心命令参考
| 命令 | 说明 | 示例 |
|---|---|---|
-c, --connect |
连接设备 | -c port=SWD |
-w, --write |
下载文件到存储器 | -w firmware.bin 0x08000000 |
-r, --read |
读取存储器到文件 | -r 0x08000000 0x4000 read.bin |
-e, --erase |
擦除Flash | -e all 或 -e 0 1 2 |
-g, --go |
启动程序执行 | -g 0x08000000 |
-rst |
软件复位 | -rst |
-hardRst |
硬件复位 | -hardRst |
-v, --verify |
验证烧录内容 | -v |
-l, --list |
列出可用设备 | -l usb |
4.3 连接命令详解
bash
# ST-LINK/SWD连接
STM32_Programmer_CLI -c port=SWD
# UART连接
STM32_Programmer_CLI -c port=COM4 br=115200
# USB DFU连接
STM32_Programmer_CLI -c port=usb1
# 指定设备序列号(多设备并行)
STM32_Programmer_CLI -c port=SWD sn=<serial_number>
4.4 完整操作示例
bash
# 完整烧录流程
STM32_Programmer_CLI -c port=SWD -e all -w firmware.bin 0x08000000 -v -rst
# 仅烧录不擦除
STM32_Programmer_CLI -c port=SWD -w firmware.bin 0x08000000 -skipErase
# 读取并保存Flash内容
STM32_Programmer_CLI -c port=SWD -r 0x08000000 0x10000 dump.bin
# 烧录特定扇区
STM32_Programmer_CLI -c port=SWD -e 2 4 -w firmware.bin 0x08008000
# 选项字节配置
STM32_Programmer_CLI -c port=SWD -ob rdp=0xBB -ob displ
4.5 高级命令
读取32位数据
bash
-r32 <start_address> <size>
# 示例:从0x08000000读取256个32位数据
STM32_Programmer_CLI -c port=SWD -r32 0x08000000 0x100
写入32/64位数据
bash
# 写入32位数据
-w32 <start_address> <data1> <data2> ...
# 示例
STM32_Programmer_CLI -c port=SWD -w32 0x08000000 0x12345678 0xAABBCCDD
# 写入64位数据
-w64 <start_address> <data>
# 示例
STM32_Programmer_CLI -c port=SWD -w64 0x08000000 0x12345678AABBCCFF
内核调试命令
bash
-halt # 停止内核
-step # 单步执行
-coreReg # 读取/写入内核寄存器
-cstate # 显示内核状态(运行/暂停/锁定等)
外部存储器操作
bash
# 使用外部加载器烧录
STM32_Programmer_CLI -c port=SWD -el /path/to/loader.stldr -w ext_firmware.bin 0x90000000
4.6 日志和调试选项
bash
# 设置详细级别(1-3)
-vb 3
# 保存日志文件
-log trace.log
# 静默模式(减少输出)
-q
5. 连接方式详解
5.1 连接方式对比
| 接口 | 适用场景 | 速度 | 是否需要额外硬件 |
|---|---|---|---|
| ST-LINK/SWD | 开发调试 | 快 | ST-LINK调试器 |
| USB DFU | 量产/现场升级 | 快 | 否(仅USB线) |
| UART | 通用 | 慢 | USB转串口模块 |
| I2C/SPI/CAN | 特定应用 | 中 | STLINK-V3SET等 |
5.2 UART Bootloader连接
进入系统Bootloader模式的方法:
- 按住BOOT0按钮
- 按下并松开RESET按钮
- 松开BOOT0按钮
连接参数:
- 波特率:115200(典型值,可调整)
- 校验:Even
- 数据位:8
- 停止位:1.0
5.3 USB DFU连接
前提条件:
- Windows系统需安装DFU驱动
- Linux需配置udev规则
验证DFU连接:
bash
STM32_Programmer_CLI -l usb
正常输出应显示设备信息,包括Device Index、USB Bus Number等。
5.4 I2C/SPI/CAN Bootloader连接(STLINK-V3SET)
对于I2C、SPI、CAN接口的Bootloader连接,必须使用STLINK-V3SET/V3MOD/V3PWR。
连接示例:
bash
# I2C Bootloader连接
STM32_Programmer_CLI -c port=I2C
# SPI Bootloader连接
STM32_Programmer_CLI -c port=SPI
# CAN Bootloader连接
STM32_Programmer_CLI -c port=CAN
5.5 多设备并行编程
使用设备序列号区分多台设备:
bash
# 实例1
STM32_Programmer_CLI -c port=SWD sn=SN1 -w firmware1.bin 0x08000000
# 实例2(需另开终端)
STM32_Programmer_CLI -c port=SWD sn=SN2 -w firmware2.bin 0x08000000
6. 常见操作示例
6.1 基本烧录脚本(Windows批处理)
batch
@echo off
echo ========================================
echo STM32 Firmware Programming Script
echo ========================================
set PROG="C:\Program Files\STMicroelectronics\STM32CubeProgrammer\bin\STM32_Programmer_CLI.exe"
set FIRMWARE="firmware.bin"
set ADDRESS=0x08000000
echo Connecting and programming...
%PROG% -c port=SWD -e all -w %FIRMWARE% %ADDRESS% -v -rst
if %errorlevel%==0 (
echo Programming successful!
) else (
echo Programming failed!
pause
)
6.2 读取并保存Option Bytes
bash
# 显示当前选项字节
STM32_Programmer_CLI -c port=SWD -ob displ
# 修改RDP级别
STM32_Programmer_CLI -c port=SWD -ob rdp=0xCC
6.3 批量生产烧录脚本
bash
#!/bin/bash
# 批量烧录脚本
FIRMWARE="production_firmware.bin"
LOG_FILE="programming_log.txt"
echo "Starting batch programming at $(date)" > $LOG_FILE
for i in {1..10}; do
echo "Programming device $i..."
STM32_Programmer_CLI -c port=SWD sn=DEVICE$i -e all -w $FIRMWARE 0x08000000 -v -rst
if [ $? -eq 0 ]; then
echo "Device $i: OK" >> $LOG_FILE
else
echo "Device $i: FAILED" >> $LOG_FILE
fi
done
echo "Batch programming completed at $(date)" >> $LOG_FILE
6.4 无线协议栈更新(STM32WB)
通过GUI更新无线协议栈的步骤:
- 使用SWD或USB Bootloader接口连接
- 删除当前无线协议栈
- 下载新版本FUS(如需要)
- 下载新版本无线协议栈
7. 故障排除
7.1 常见问题及解决方案
| 问题 | 可能原因 | 解决方法 |
|---|---|---|
| 无法连接设备 | 驱动未安装 | 安装ST-LINK或DFU驱动 |
| 连接失败 | 目标未进入Bootloader模式 | 检查BOOT引脚配置 |
| 烧录验证失败 | 接触不良或电源不稳 | 检查连接线,确保电源稳定 |
| UART连接无响应 | 波特率不匹配 | 尝试不同波特率(如57600、115200) |
| Windows DFU不工作 | DfuSe驱动冲突 | 卸载旧驱动,重装STM32 DFU驱动 |
7.2 连接验证方法
bash
# 列出所有STM32设备
STM32_Programmer_CLI -l
# ST-LINK连接测试
STM32_Programmer_CLI -c port=SWD
# USB DFU连接测试
STM32_Programmer_CLI -c port=usb1
7.3 DFU驱动问题(Windows)
如果DFU驱动安装失败,请按以下步骤操作:
- 打开设备管理器
- 找到"STM Device in DFU Mode"
- 右键选择"卸载设备"
- 勾选"删除此设备的驱动程序软件"
- 重新运行STM32 Bootloader.bat
- 重新插拔USB线
7.4 Linux权限问题
在Linux下遇到权限拒绝错误时:
bash
# 复制udev规则
sudo cp <安装目录>/Drivers/rules/*.* /etc/udev/rules.d/
# 重新加载udev规则
sudo udevadm control --reload-rules
sudo udevadm trigger
# 将用户添加到plugdev组
sudo usermod -a -G plugdev $USER
7.5 VirtualBox USB问题
在VirtualBox中使用STM32CubeProgrammer时:
- 将USB控制器切换到USB 3.0 (xHCI)
- 确保虚拟机已安装VirtualBox扩展包
7.6 Docker环境配置
在Docker容器中使用USB DFU:
bash
docker run -v /dev:/dev --device /dev:/dev --net=host <image_name>
8. 附录
8.1 常用STM32 Flash地址
| 器件系列 | Flash起始地址 | Option Bytes地址 |
|---|---|---|
| STM32F1/F4系列 | 0x08000000 | 0x1FFFF800 |
| STM32L4系列 | 0x08000000 | 0x1FFF7800 |
| STM32H7系列 | 0x08000000 | 0x52002000 |
| STM32MP1系列 | 0xC0000000 | - |
8.2 选项字节常用设置
| RDP级别 | 值 | 说明 |
|---|---|---|
| Level 0 | 0xAA | 无保护 |
| Level 1 | 0xBB | 读保护激活 |
| Level 2 | 0xCC | 最高级别保护(不可逆) |
8.3 资源链接
- STM32CubeProgrammer下载页面:https://www.st.com
- 用户手册完整版(UM2237):包含在安装包
/doc目录下 - AN2606:STM32系统Bootloader说明文档
- AN5275:USB DFU/USART协议说明
8.4 版本历史
本手册基于STM32CubeProgrammer v2.x版本编写。主要参考文档:
- UM2237 Rev 28(2025年6月更新)
- STM32MPU Wiki文档
声明
本文档基于ST官方用户手册UM2237和社区实践整理。使用过程中请参考官方最新文档获取最准确的信息。