尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

STM32新手必看:ST-LINK Utility烧录bin文件与连接问题排查指南

发布时间:2026/9/25 4:07:29

资讯中心
01
ARTICLE

STM32新手必看:ST-LINK Utility烧录bin文件与连接问题排查指南

STM32新手必看:ST-LINK Utility烧录bin文件与连接问题排查指南
1. 为什么我建议新手先学会用 ST-LINK Utility 直接烧 bin 文件很多刚接触 STM32 的朋友都有过这种经历在 Keil 里点一下 Download 按钮程序就进去了感觉烧录好像没什么神秘的。可一旦脱离 Keil比如拿到一个别人编译好的 bin 文件或者需要批量产线烧录又或者芯片已经被烧得连 Keil 都连不上的时候就会突然发现——我居然连个固件都不知道怎么烧进去。其实这不怪新手Keil 的 Debug 下载方式把太多细节隐藏了。它自动完成了擦除、编程、校验、甚至向量表偏移的设置你只管点按钮。但实际工作场景里bin 文件才是固件交付的常见形态。ST-LINK Utility 就是 ST 官方提供的一个独立烧录工具专门用来干这件事。这个工具能解决什么问题简单说它可以通过 ST-Link 调试器把 hex 或 bin 文件直接写入 STM32 的内部 Flash同时还能做擦除、校验、查看 Flash 内容、修改选项字节等操作。对新手来说最实用的场景有三个手头只有 bin 文件没有 Keil 工程源码需要烧进板子验证功能芯片被设置了读保护或写保护Keil 下载报错需要用工具解锁做小批量生产不想每块板子都打开 Keil 点下载直接打开 ST-LINK Utility 烧录更快这篇文章就沿着完整流程走一遍从工具安装、硬件接线、烧录步骤到最常见的连接失败问题排查。内容定位是新手向但我会把很多文档里没写清楚、只有实际踩过坑才知道的细节一并说透。顺带提一句ST-LINK Utility 已经停止更新了官方用 STM32CubeProgrammer 替代了它但为什么我还推荐新手先学它因为 ST-LINK Utility 界面极简、操作路径短、不容易点错特别适合先理解烧录这件事到底在做什么。等把这套逻辑吃透了再去用 CubeProgrammer 就是顺手的事。2. 烧录前的准备工具、驱动和接线有一半坑都埋在这里2.1 软硬件清单先列一个最基础的清单缺一样都走不通一块 STM32 目标板常见的有最小系统板、核心板、开发板都可以一个 ST-Link V2 调试器市面上二三十块的兼容版就够用了不必强求原装几根杜邦线母对母至少 4 根安装了 ST-LINK Utility 的 Windows 电脑ST-Link 的 USB 驱动通常在装 Utility 时一并装上这里有个很关键的认知ST-LINK Utility 本身是绿色软件解压就能跑但它的驱动安装是独立的一步。很多人烧录失败不是工具的问题是电脑根本没识别 ST-Link。2.2 驱动安装的隐藏顺序安装 ST-LINK Utility 的完整流程是这样的去 ST 官网搜索 STSW-LINK004 下载 ST-LINK Utility 安装包新版叫 STM32CubeProgrammer如果想用老的 UI 就找 STSW-LINK004解压后运行 ST-LINK Utility 安装程序一路 Next安装过程中会顺带安装 ST-Link 的 USB 驱动但有个细节如果你之前电脑上装过其他版本的 ST-Link 驱动比如 Keil 自带的那新旧驱动可能冲突。最稳妥的做法是先拔掉 ST-Link装好 Utility再插 ST-Link让系统弹窗提示驱动安装完成后再打开设备管理器确认。判断驱动是否正常的标准在设备管理器里能看到 STMicroelectronics STLink dongle 这样的设备且没有黄色感叹号。如果看不到或者显示未知 USB 设备请先把 ST-Link 换一个 USB 口试试优先插主机后面板不要插前置 USB 或 USB Hub。2.3 四根线的正确接法ST-Link 烧录 STM32 最常用的是 SWD 模式只需要四根线ST-Link 和开发板之间的接线如下ST-Link V2 引脚目标板引脚说明SWDIOPA13SWDIO数据线双向SWCLKPA14SWCLK时钟线由 ST-Link 输出GNDGND必须共地3.3V3.3V 或 5V 引脚视板子可选给目标板供电这里必须强调一点如果你用的是带 USB 供电的开发板目标板的 3.3V 引脚和 ST-Link 的 3.3V 同时接的话会存在两个电源同时给板子供电的情况。大多数情况下没问题但如果板子上的 LDO 和 ST-Link 的 LDO 之间存在压差会产生电流倒灌个别板子会因此导致 ST-Link 发热甚至烧毁。所以我的习惯是如果开发板通过 USB 或外部电源供电ST-Link 只接 SWDIO、SWCLK、GND 三根线。只有目标板完全没有独立供电、必须由 ST-Link 供电时才接 3.3V。还有一点SWD 接线时 SWDIO 和 SWCLK 尽量短一点杜邦线长度控制在 10~20 厘米以内比较靠谱。线太长、又在电机或电源旁边走线的话抗干扰能力下降高速烧录时偶尔会报校验错误。3. 手工烧录 bin 文件的完整流程连接、擦除、编程、校验四步走硬件接好、驱动确认之后就可以打开 ST-LINK Utility 了。新手首次打开会看到一个灰色界面上方是菜单栏左侧是芯片 Flash 的空白映射区下方是日志输出窗口。这个界面可能看起来有点朴素但每一个区域都有用途。3.1 建立与芯片的连接先点菜单栏的 Target - Connect或者直接点工具栏里那个绿色的电源图标。此时会弹出连接设置对话框把 Mode 选择为 Normal连接速度保持默认通常 1.8MHz 或 4MHz 都行不需要改。点击 Connect 后如果成功界面左上角会显示芯片型号左侧 Flash 映射区会读取出当前芯片内的数据。日志窗口会打印出芯片的 Flash 大小、UID 等信息。这个环节大家经常遇到的报错是Target connection error或者No ST-LINK detected。两者的含义完全不同No ST-LINK detected电脑没找到 ST-Link大概率是驱动问题或 ST-Link 本身故障Target connection error电脑找到了 ST-Link但 ST-Link 和芯片之间的通信失败大概率是接线问题、芯片供电问题、或者 SWD 引脚被复用了新手的典型问题出在第二个。我第一次带人烧录的时候对方连了半个小时连不上最后发现是杜邦线有一根插到了板子边缘的 5V 引脚GND 反而悬空了。所以遇到连接失败先别急着怀疑芯片坏了把四根线的导通顺序逐一核对一遍比重新拔插十次都管用。3.2 不先擦除直接编程踩过一次就长记性了连接成功后点菜单栏 Target - Erase Chip 先擦除整个芯片。这一步我强烈建议不要跳过。虽然 ST-LINK Utility 的编程操作支持地址重叠覆盖但如果你烧录的新固件比旧固件短Flash 的高地址区域会残留旧程序的数据。下次上电时芯片从复位向量开始执行的是新程序程序里如果没有初始化全 Flash 相关的逻辑某些中断向量或常量表可能会读取到旧数据造成诡异的问题——比如功能正常但某个外设行为异常或者升级后设置参数还保留着根本说不清楚。我自己就吃过一次亏。当时给一个设备升级固件新固件比旧固件小了一大截我没有手动擦除直接编程。结果设备运行到某个特定功能时读到的配置值居然是上一版固件时期的残留数据排查了很久才意识到是 Flash 残留的问题。从此以后凡是烧录 bin 文件之前一律先擦除。擦除之后左侧的 Flash 映射区会全部变成 0xFF这表示芯片已经处于空白状态。3.3 加载 bin 文件时的地址参数点菜单栏 File - Open file文件类型选择 Binary选中你的 bin 文件。此时会弹出一个对话框让你输入烧录地址。这个对话框是新手最容易困惑的地方。很多人在 CSDN 或论坛看到教程说填 0x08000000但不理解为什么要填这个地址也不理解如果填错了会怎样。STM32 的内部 Flash 起始地址是0x08000000这是芯片硬件设计决定的。Cortex-M 内核复位后会从0x08000000读取栈顶指针从0x08000004读取复位向量地址然后跳转执行。所以标准情况下bin 文件的内容就应该放在0x08000000。输入0x08000000点击确定后左侧 Flash 映射区会显示 bin 文件的内容已经加载到待烧录区域。此时这些数据还是灰色的表示尚未写入芯片需要手动执行编程操作。3.4 编程与校验点菜单栏 Target - Program Verify或者直接按 F7。弹出的对话框默认配置就行编程速度保持默认。点击 Start工具会先把数据写入 Flash然后自动执行校验——把芯片内的数据和 bin 文件逐字节对比。这个过程通常几秒钟到几十秒不等取决于 bin 文件大小和 Flash 容量。日志窗口会逐条打印区块写入信息最后出现Programming completed successfully或Verification OK就代表烧录成功了。有两点值得说一下如果 bin 文件较大比如超过 128KBFlash 小容量的芯片如 STM32F103C8T6 是 64KB会烧不进去。程序会直接报错或者校验失败。这时候要么换大容量型号要么裁剪固件体积。不是所有 bin 文件都能从 0x08000000 启动。如果一个 bin 文件是专门给 Bootloader 用的它的烧录地址可能是 Bootloader 的起始地址比如 0x08008000。这种情况下烧录地址必须手动改成对应的地址。判断一个 bin 文件应该烧到哪个地址最直接的办法是问固件的提供方或者看 Keil 工程里 IROM 的起始地址设置。3.5 烧完拔线还是继续接线的顺序问题烧录成功之后很多人习惯直接把 ST-Link 拔掉然后复位开发板看效果。这没问题但如果你还需要调试或者再次烧录不要在 ST-Link 还连接着的情况下直接给目标板断电重启——某些 ST-Link 兼容版在目标板下电重新上电的瞬间会把自己的状态搞挂需要拔掉 USB 重新插才能恢复。正确顺序是先断开 ST-LINK Utility 的连接Target - Disconnect再给目标板上电或复位。如果烧录完直接拔 USB也可以但让工具正常断开连接会更保护 ST-Link 的固件状态。4. 连接问题的完整排查链路从驱动到硬件一层一层剥这个章节是标题里的重点。连接问题我在带新人和自己的项目中踩过太多次了而且有个规律新手遇到的连接问题90% 都集中在下面几个层面按顺序排查基本都能解决。4.1 第一层电脑根本没有识别 ST-Link这一层的典型表现是打开 ST-LINK Utility点击 Connect 后弹出No ST-LINK detected。排查顺序如下换一个 USB 口优先换到机箱后面板的原生 USB 口不要通过延长线或 Hub。很多兼容版 ST-Link 比较挑供电质量前置 USB 口供电不稳定就可能导致枚举失败。观察 ST-Link 指示灯正常工作的 ST-Link V2 兼容版插入 USB 后红灯常亮连接目标板后绿灯亮或闪烁。如果插上 USB 灯都不亮大概率是 ST-Link 硬件已经损坏了——有些便宜的兼容版一旦接错了目标板电源引脚主控芯片就烧了。检查驱动状态打开设备管理器看在通用串行总线设备或端口下有没有带感叹号的设备。如果有感叹号右键更新驱动选择浏览我的电脑以查找驱动程序路径指向 ST-LINK Utility 安装目录下的驱动文件夹一般在STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Driver。如果仍然装不上就去官网重新安装最新驱动。检查 USB 线缆有些数据线只支持充电不支持数据传输。这听起来很蠢但确确实实是我实际遇到过的情况——一条看起来完好的 USB 线居然只有电源线通数据线是断的。换一条线试试成本最低。4.2 第二层ST-Link 正常但连不上目标芯片这一层的典型表现是点击 Connect 后提示Target connection error但 ST-Link 本身的绿色指示灯已经亮了说明 ST-Link 和电脑的通信没问题。排查重点转向芯片侧4.2.1 先检查最基本的供电目标板必须上电而且是稳定的 3.3V。如果你用的是 ST-Link 自带的 3.3V 供电注意有些兼容版 ST-Link 的输出电流能力有限大概只有几十毫安到一百毫安带不起耗电稍大的板子。如果目标板上有 LEDs、数码管、传感器这类外设建议外接电源供电。判断方法用手摸一下芯片表面如果发烫但没烧录过那多半是供电电压过高或短路。如果芯片完全没有温度变化但 SWD 连接失败测量 ST-Link 和目标板之间的 GND 是否导通。4.2.2 检查 SWD 引脚状态SWDIOPA13和 SWCLKPA14这两个引脚在复位瞬间是默认复用为 SWD 功能的。但如果程序里把它们配置成了普通 GPIO比如当成按键输入或 LED 控制引脚重新上电后程序运行起来这两个引脚就会被占用ST-Link 就无法连接了。下面这个细节很多人不知道SWD 连接是需要在芯片复位后的短暂窗口内完成的。ST-LINK Utility 连接时会尝试拉低复位引脚来锁定芯片。如果 ST-Link 的 NRST 引脚没有接到目标板的 NRST 引脚这种情况下只能靠运气——芯片复位后的短暂时间内 SWD 还能响应一旦程序跑起来引脚被复用了就连接不上了。所以接线时一定要把 ST-Link 的 RST 引脚也接到目标板的 NRST。很多新手教程只画四根线SWDIO、SWCLK、GND、3.3V但碰到引脚复用的问题时第五根 RST 线就是解决问题的关键。4.2.3 电路板的复位电容坑目标板 NRST 引脚上通常会有一个 100nF 的复位电容。STM32 标准设计里这个电容是给 NRST 做低频滤波用的。但有些兼容版 ST-Link 在握手时信号质量不佳加上这个电容后RST 信号被拉低得不够彻底导致芯片没有被正确复位。我遇到过一个具体的案例一块自制板子NRST 的复位电容用的是 1uF比标准值大了 10 倍。ST-LINK Utility 连上后每次都会报 Target connection error后来把电容换成 100nF问题立刻消失。如果改硬件不方便可以试试把 ST-LINK Utility 连接速度调低从默认的高速降到低速增加信号的稳定性。4.3 第三层芯片已经被锁死连不上也擦不掉还有一种非常容易遇到的情况芯片被设置了读保护或写保护导致 SWD 连接失败或者连接上了但无法擦除。这种问题通常在以下场景出现之前用 STM32CubeProgrammer 或者别人的工具给芯片设置了 RDPRead-out Protection级别 1买回来的二手芯片或旧板子本身就带着保护设置解决办法是用 ST-LINK Utility 的选项字节功能解除保护。在连接状态下点 Target - Option Bytes找到 Read-out Protection 选项把它从 Level 1 改为 Level 0点 Apply。工具会要求先执行一次全芯片擦除确认后即可完成解锁。这里必须提醒解除读保护会自动擦除整个 Flash。所以如果芯片里有你想保留的数据而且芯片本身没锁死先通过工具读取保存一份备份Target - Save memory然后再解锁。如果芯片锁死到连 ST-LINK Utility 都无法连接可以这样操作拔掉目标板电源和 ST-Link按住目标板的复位按键不放同时接上 ST-Link打开 ST-LINK Utility点击 Connect在松开复位键的同时快速点击连接多试几次抓芯片复位瞬间的 SWD 握手窗口这个方法虽然听起来有点土但我确实用它在几块已经变砖的板子上救回了数据。核心原理就是利用 STM32 复位后到程序接管引脚之前的短暂窗口强制让调试器连上然后立刻擦除 Flash、取消保护。4.4 连接问题排查速查表把上面讲的内容汇总成一张表方便排查时对照现象顶层原因优先检查项No ST-LINK detectedST-Link 与电脑通信失败USB口、USB线、驱动、指示灯Target connection error绿灯亮ST-Link 与芯片通信失败接线顺序、供电、RST线、复位电容连接成功但擦除失败Flash 被保护选项字节里的 RDP 设置连接成功但编程后校验失败供电不稳或速度太快降低连接速度、独立供电、检查 bin 文件完整性连接时好时坏接触不良杜邦线重新插拔、检查GND是否接牢5. 为什么有时候 Keil 能烧、ST-LINK Utility 却连不上这个问题很多老手都遇到过新手听到了会觉得反直觉同一个 ST-Link同一块板子在 Keil 里能正常下载程序但打开 ST-LINK Utility 却连接失败。原因在于 Keil 的 Debug 下载和 ST-LINK Utility 的连接流程有细微差别。Keil 在烧录前会做一系列初始化包括拉低 NRST、设置连接速度、做 IDCODE 读取并且断点状态下也允许 CPU 暂停运行。而 ST-LINK Utility 的连接方式更硬它会尝试暂停 CPU 内核并读取调试寄存器。如果目标芯片正处于一种异常运行状态比如死循环里关闭了中断内核被锁死ST-LINK Utility 就可能连接不上而 Keil 却能通过某种方式抢到芯片的控制权。如果在 Keil 里能烧但在 ST-LINK Utility 里连不上可以尝试在 Keil 里先执行一次全芯片擦除把芯片恢复到空白状态再用 ST-LINK Utility 连接。另外把 ST-LINK Utility 菜单栏 Target - Settings 里的连接模式改成 Hot Plug有时候也能避开某些状态下的握手失败问题。这个问题的彻底解法我后面会提到通过命令行模式烧录命令行模式在某些异常情况下的容错能力反而比图形界面更好。6. 从能烧通到用得好批量烧录与校验的进阶技巧如果你只烧一块板子上面四章内容已经足够了。但如果你想把这套操作固化下来或者需要给一批板子烧录下面的经验能让效率提升一大截。6.1 批量烧录时不要每次都手动点页面ST-LINK Utility 支持命令行模式。打开命令行进入 ST-LINK Utility 的安装目录执行类似这样的命令STM32_Programmer_CLI.exe -c portSWD modeUR -w firmware.bin 0x08000000 -v参数说明-c表示连接portSWD指定 SWD 模式modeUR表示连接时不执行复位避免部分板子因为复位电路差异导致失败-w表示写入后面跟文件路径和起始地址-v表示写入后自动校验注意这里使用的是 STM32_Programmer_CLI.exe这是官方新一代的命令行工具。ST-LINK Utility 老版本自带的命令行工具是STM32L476G-EVAL_CLI.exe之类的模块化命令语法不太统一。如果装的是新版工具链直接用 STM32CubeProgrammer 的 CLI 更省事。批量烧录时命令行比图形界面有绝对优势可以写一个.bat脚本双击执行可以集成到产线测试工具里扫码-烧录-校验自动完成日志可重定向到文件方便追溯每块板的烧录结果我之前做小批量生产的时候写了一个简单的脚本每次插上一块新板子双击脚本自动连接、擦除、写入、校验、输出 PASS/FAIL 结果。整个过程不需要看屏幕操作一台电脑一天能烧一百多块板子大幅降低漏烧错烧的概率。6.2 烧录后校验的意义比你想的大有些人烧完不校验觉得编程完成就说明数据写进去了。但 Flash 编程过程中是有可能因为供电波动、信号干扰导致某个字节写坏的。ST-LINK Utility 的 Program Verify 里的 Verify 步骤就是逐字节对比芯片内数据和源文件能发现这种概率极低但确实存在的写坏问题。批量烧录时我强烈建议把校验结果作为 PASS/FAIL 的唯一标准。哪怕校验失败率只有千分之一对量产来说也是必须拦截的问题。而且在命令行里加了-v后该校验的流程就会自动执行不需要额外操心。6.3 选项字节的坑也值得提前了解如果你烧录的芯片需要配置某些选项字节比如硬件看门狗、BOOT 引脚行为、Flash 保护级别要注意 ST-LINK Utility 的编程操作不会自动修改选项字节必须单独去 Option Bytes 界面里设置。一个典型的坑是芯片开启了硬件看门狗IWDG并且在程序里重装看门狗的逻辑没做好或者程序崩溃后一直没喂狗芯片会不断复位。这种情况下ST-LINK Utility 虽然能烧录进程序但程序跑起来后立刻复位表现为烧录成功但板子没反应。排查这类问题时检查选项字节里的 IWDG 设置把它改为软件启动能排除一个很大的干扰源。6.4 关于 ST-Link 本身的一个保养建议兼容版 ST-Link 便宜但质量参差不齐。有些版本的主控没有过流保护目标板上有短路或电源倒灌时ST-Link 直接就烧了。平时使用注意几点不要在目标板上电状态下拔插 ST-Link 的杜邦线先断开工具连接再拔线ST-Link 不使用时拔掉 USB避免长时间带电老化如果 ST-Link 需要给目标板供电先确认目标板的功耗超过 100mA 的外设电流尽量外接电源备两个 ST-Link 以防万一每个也就二三十块比项目卡壳一天划算得多最后再分享一个实操心得。我在实际给一批板子做升级的时候发现 ST-LINK Utility 在部分机器上有一种诡异的情况装好后第一次连板子报错重启电脑后又能正常用了。后来排查发现是驱动枚举时序的问题尤其是 USB 口插过 U 盘、鼠标等设备后某些 USB 控制器的状态会干扰 ST-Link 的枚举。遇到这种灵异问题不用急着怀疑板子或 ST-Link先换一个在这一小时内没有插过其他 USB 设备的接口往往就好了。总的来说ST-LINK Utility 作为一款已经被官方归档的老工具本身没有太深的学习曲线。真正让新手卡住的不是软件操作而是对烧录流程和排查思路的理解。把上面这几层逻辑理清楚后面再用 STM32CubeProgrammer、J-Flash、OpenOCD 这些工具都会非常快——因为它们解决的问题本质上是一样的。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。