4、烧录工具详解:ST-Link Utility、J-Flash、STM32CubeProgrammer、OpenOCD

烧录工具,说白了就是把你编译好的固件文件(.hex、.bin、.elf)写进芯片 Flash 的那把「钥匙」。市面上的工具五花八门,但真正常用的也就那么几款。我这些年做项目,几乎每换一个平台就得换一套工具,踩过的坑还真不少。

今天咱们就把四个主流工具掰开揉碎了讲清楚。你不需要全部精通,但至少要知道它们各自擅长什么、不擅长什么。

核心观点:没有最好的工具,只有最适合当前场景的工具。调试阶段用 IDE 自带的烧录器,量产阶段用命令行工具,跨平台开发用 OpenOCD。

烧录工具知识体系 固件烧录工具 ST-Link Utility J-Flash STM32CubeProgrammer OpenOCD 仅支持 ST-Link 图形化界面 适合单次烧录 支持 J-Link 全系列 高速烧录 量产脚本支持 ST 官方全能工具 支持 OTA/加密 命令行 + GUI 开源免费 跨平台 调试 + 烧录一体 选择依据:硬件平台 → 量产需求 → 开发环境

4.1 ST-Link Utility —— ST 家的老牌工具

如果你用过 STM32 的开发板,对 ST-Link 肯定不陌生。ST-Link Utility 是 ST 官方早期推出的烧录工具,专门配合 ST-Link 调试器使用。

核心功能:

  • 支持 .hex、.bin、.srec 格式的固件烧录
  • 可以读取/擦除/编程 Flash 和 Option Bytes
  • 提供芯片内存查看和寄存器编辑功能
  • 支持命令行模式(CLI)

我的经验:ST-Link Utility 最大的优点是「傻瓜式操作」。打开软件,连接板子,拖入固件,点 Program——完事。我早期带新人时,都让他们先用这个工具熟悉烧录流程。

不过它也有明显的短板:只支持 ST-Link 调试器,不支持 J-Link 或其他第三方工具。而且 ST 官方已经逐渐用 STM32CubeProgrammer 替代它了。

注意:ST-Link Utility 在 Windows 10/11 上偶尔会出现驱动兼容问题。如果你遇到「No ST-Link detected」的报错,先检查驱动版本,或者换一根 USB 线试试——别问我怎么知道的。

4.2 J-Flash —— 量产烧录的利器

J-Flash 是 SEGGER 公司为 J-Link 调试器配套的烧录工具。说实话,在量产烧录这个场景下,J-Flash 是我个人用得最多的工具。

为什么推荐它?

  • 烧录速度极快,支持 J-Link 的高速 SWD/JTAG 接口
  • 支持超过 1000 种 MCU 型号
  • 可以创建烧录项目文件(.jflash),保存所有配置
  • 命令行模式非常成熟,适合自动化产线

我记得有一次帮客户做量产方案,要求每片芯片的烧录时间控制在 5 秒以内。用 J-Flash 的命令行配合 J-Link 的 SWD 高速模式,最终做到了 3.2 秒一片——包括擦除、编程、校验三个步骤。

命令行示例:

# 烧录固件到 STM32F407
JFlash.exe -openprjC:\project\firmware.jflash -openC:\project\output.hex -auto -exit

关键点:J-Flash 的项目文件(.jflash)里包含了芯片型号、接口速度、Flash 布局等所有参数。产线操作员只需要双击一个批处理文件就能完成烧录,完全不需要手动配置。

4.3 STM32CubeProgrammer —— ST 的集大成者

STM32CubeProgrammer(简称 STM32CProg)是 ST 官方目前主推的烧录工具。它整合了 ST-Link Utility 的功能,还加入了很多新特性。

相比老工具,它多了什么?

  • 支持 ST-Link、UART、USB DFU、OTG 等多种连接方式
  • 内置固件加密和读保护配置
  • 支持 OTA(空中升级)固件生成
  • 图形界面和命令行双模式
功能特性 ST-Link Utility STM32CubeProgrammer
连接方式 仅 ST-Link ST-Link / UART / USB / DFU
固件加密 不支持 支持(需配合 STM32 Trust)
命令行 基础 完善
跨平台 仅 Windows Windows / Linux / macOS

我个人习惯在开发阶段用 STM32CubeProgrammer 的图形界面,调试方便。到了量产阶段,就切换到命令行模式,写个脚本一键搞定。

命令行烧录示例:

STM32_Programmer_CLI.exe -c port=SWD -w firmware.hex 0x08000000 -v -rst

避坑指南:我曾经在 Linux 下用 STM32CubeProgrammer 烧录 STM32L4 系列芯片,发现总是烧到一半就报错。折腾了半天,最后发现是 USB 权限问题——给 udev 规则加了一行就解决了。如果你在 Linux 上遇到类似问题,先检查 /etc/udev/rules.d/ 下的 ST-Link 规则。

4.4 OpenOCD —— 开源界的瑞士军刀

OpenOCD(Open On-Chip Debugger)是开源社区维护的调试和烧录工具。它支持市面上绝大多数调试器(ST-Link、J-Link、FTDI、CMSIS-DAP 等)和 MCU 架构(ARM、RISC-V、MIPS 等)。

为什么需要它?

  • 完全免费,没有授权限制
  • 跨平台(Windows / Linux / macOS)
  • 可以同时做调试和烧录
  • 与 GDB 配合使用,实现源码级调试

说实话,OpenOCD 的学习曲线比前面几个工具都陡。它没有图形界面,所有操作都靠命令行和配置文件。但一旦你掌握了它,就会发现它的灵活性和可定制性是无与伦比的。

一个典型的烧录流程:

# 1. 启动 OpenOCD 并连接目标板
openocd -f interface/stlink.cfg -f target/stm32f4x.cfg

# 2. 在另一个终端中通过 telnet 发送烧录命令
telnet localhost 4444
> program firmware.hex 0x08000000 verify reset exit

我的建议:如果你在做 Linux 嵌入式开发,或者需要支持多种调试器,OpenOCD 是绕不开的选择。我自己的开发环境就是 VS Code + OpenOCD + Cortex-Debug 插件,调试体验不比 IDE 差。

4.5 如何选择?一张表说清楚

场景 推荐工具 理由
STM32 开发调试 STM32CubeProgrammer 官方支持,功能全面
量产烧录(J-Link) J-Flash 速度快,命令行成熟
跨平台开发 OpenOCD 开源免费,灵活可定制
快速上手学习 ST-Link Utility 操作简单,适合入门
自动化产线 J-Flash / STM32CProg CLI 脚本化,无需人工干预

嗯,工具说到底只是手段。真正重要的是你理解烧录的底层原理——Flash 的擦写时序、校验机制、读保护配置。这些内容咱们后面的章节会逐一展开。