ST-Link 下载报错定位手册(含接线+设置)
前言
STM32 新手遇到的第一个崩溃时刻,往往来自这个对话框:
Error: No ST-Link detected! Error: Target not found! Error: Flash Download failed - Target DLL has been cancelled Flash Timeout. Reset the target and try it again
ST-Link 下载报错是每个人都会碰到的问题。这篇文章把常见报错按现象分类,配上排查步骤,按图索骥就能解决。
前提假设:你的 ST-Link 是正品或常见山寨版,电脑已经装了驱动(CubeIDE 自带)。
一、接线
在排查报错之前,先确认你的接线是对的。
标准 4 线接法:
| ST-Link | STM32F407 最小系统板 |
|---|---|
| SWDIO | SWDIO(或标 DIO) |
| SWCLK | SWCLK(或标 CLK) |
| GND | GND |
| 3.3V | 3.3V(可选。如果板子通过 USB 供电,可不接) |
重要提示:
不要接反 SWDIO 和 SWCLK——这是最常见的低级错误
部分 ST-Link 的 3.3V 输出能力很弱(几十 mA),如果接了会掉电压,建议板子单独供电
线不要太长,< 20cm,太长 SWD 信号会畸变
二、报错速查表
错误 1:No ST-Link detected
Error: No ST-Link detected!
原因:ST-Link 没被电脑识别。
排查步骤:
把 ST-Link 拔了重新插
打开设备管理器→ 看"通用串行总线设备"或"调试器"下面有没有黄色感叹号
有感叹号 → 重装 ST-Link 驱动(CubeIDE 安装目录下有驱动包)
换个 USB 口试试(台式机插机箱后面的 USB 2.0 口)
换根 USB 数据线(有些线只能充电不能传数据)
错误 2:Target not found / No target connected
Error: Target not found!
原因:ST-Link 连上了电脑,但没连上 STM32 芯片。
排查步骤(按可能性排序):
| 步骤 | 操作 |
|---|---|
| ❶ | 检查 SWDIO/SWCLK 有没有接反——这是最容易犯的错 |
| ❷ | 板子通电了吗?摸芯片看有没有温度,量 VCC 引脚有没有 3.3V |
| ❸ | 按住复位键不松手 → 点下载 → 听到"叮"后松开复位 |
| ❹ | BOOT0 设为 1(拉高),BOOT1 设 0,重新上电再试 |
| ❺ | SWD 线太长或接触不良,杜邦线重新插紧 |
如何确认 ST-Link 到芯片的 SWD 线是通的?用万用表二极管档量:
红笔接 STM32 的 SWDIO → 黑笔接 ST-Link 的 SWDIO → 导通(< 5Ω) 红笔接 STM32 的 GND → 黑笔接 ST-Link 的 GND → 导通
错误 3:Flash Download failed
Error: Flash Download failed - Target DLL has been cancelled
原因:下载过程中出错中断。
排查步骤:
复位芯片后重试(CubeIDE 的 Run → Debug Configurations → Debugger 标签,勾选Reset after connect)
CubeMX 重新生成工程(确保 Debug 选了 Serial Wire)
降到更低速度:
CubeIDE → Run → Debug Configurations → Debugger
ST-Link Serial Wire Speed:从 4MHz 降到1.8MHz或1MHz
芯片 Flash 被锁了?看错误 4
错误 4:Flash Timeout / Flash Protect
Error: Flash Timeout. Reset the target and try it again Internal command error
原因:芯片 Flash 被读保护(RDP Level 1)或选项字节出错。
常见触发场景:
用 FlyMCU 或其它工具操作了选项字节
擦除了 STM32 的选项字节区域
芯片从别人板子上拆的,出厂可能有保护
解决——全片擦除:
用 STM32CubeProgrammer(免费的官方工具):
打开 STM32CubeProgrammer
连接方式选ST-LINK
点Connect
在OB(Option Bytes)标签中:
Read Protection(RDP):设成AA(Level 0,无保护)
点Apply
然后回到Erasing & Programming→ 点Full Chip Erase
回到 CubeIDE 重新下载
如果没有 CubeProgrammer,把BOOT0 = 1(拉高)、BOOT1 = 0,然后用串口 ISP 方式全片擦除(FlyMCU 工具,选择"擦除芯片")。
错误 5:Can not connect to target (SWD)
ST-LINK error (DEV_TARGET_HELD_UNDER_RESET)
原因:芯片一直处于复位状态。常见于板子 RST 引脚被外部拉低、或者电容对地短路。
排查:
量 RST 引脚电压——正常是 3.3V 左右
如果是 0V,查复位电路,或者断开 RST 外部连接
有些最小系统板的复位电容(104)太大了,换一个 100nF 的
错误 6:ST-Link USB communication error
ST-LINK USB communication error
原因:ST-Link 固件版本不匹配或固件损坏。
解决:
升级 ST-Link 固件:STM32CubeProgrammer → ST-LINK →Firmware Upgrade
如果升级失败,可能是山寨 ST-Link 不支持升级——换一个 ST-Link
三、CubeIDE 中的 Debug 配置检查
有时候不是硬件问题,是设置问题:
项目 → Run As → Debug Configurations → Debugger 标签:
| 设置项 | 建议值 |
|---|---|
| Debug Probe | ST-LINK(ST-LINK GDB Server;OpenOCD 为备选) |
| Interface | SWD(不是 JTAG) |
| Serial Wire Speed | 1800kHz(降速可以解决很多诡异问题) |
| Reset Mode | Connect under reset |
"Connect under reset" 选项解决了很多"特定芯片第一次连不上"的问题——下载器在芯片复位瞬间抢占 SWD 总线。
四、进阶排查工具
用 STM32CubeProgrammer 检测连接
ST-Link 好不好使,CubeProgrammer 试一下最直接。
打开 CubeProgrammer
选ST-LINK→Connect
如果连上了,会显示芯片型号、Flash 大小、UID
Successfully connected to the target! Device: STM32F407VG Flash size: 1 MB
连不上会直接报错,比 CubeIDE 的错误信息更清楚。
五、特殊情况
5.1 烧录一次后第二次就下不进去了
100% 的原因:CubeMX 生成工程时SYS → Debug 没有选 Serial Wire。 选了 No Debug 会导致 SWD 引脚被重配为 GPIO;选 JTAG 时 PA13/PA14 仍保持调试功能,SWD 功能就断了。
解决:
按住复位键 → 点下载 → 松复位(经典的三秒抢救法)
如果不行,BOOT0=1、BOOT1=0,串口 ISP 擦除,重新生成带 Serial Wire 的代码
5.2 山寨 ST-Link V2 的问题
市场上十几块的 ST-Link 很多是山寨版(正品 ST-Link/V2-ISOL 要一百多),常见问题:
| 问题 | 解决 |
|---|---|
| 连上就断开 | 接触不良,换个 USB 口或线 |
| 只能 1MHz 以下连接 | 正常,山寨版高频不稳,降速就行 |
| 固件升级失败 | 不支持升级,直接用不要升 |
| 指示灯不亮 | 坏了,换个。十多块钱不值得修 |
5.3 芯片锁死了怎么办
BOOT0 拉高 → BOOT1 拉低 → 上电 → 芯片从系统存储器(System Memory)启动 → 用串口 ISP(FlyMCU)连上 → 读出选项字节 → 设 RDP = AA → 全片擦除 → BOOT0 拉回低 → 重新下载。
六、快速排查流程图
ST-Link 下载报错 │ ├→ 电脑能识别 ST-Link 吗? │ ├→ 否 → 重装驱动 / 换 USB 口 / 换线 / 换 ST-Link │ └→ 是 → ↓ │ ├→ 芯片能连上吗? │ ├→ 否 → 查 SWD 接线 / 板上电了吗 / 按住复位下载 / 降速 │ │ └→ 还不行 → BOOT0=1 用串口擦除 │ └→ 是 → ↓ │ ├→ 下载过程中报错? │ ├→ 是 → 降速率 / 勾选 "Reset after connect" / 全片擦除 │ └→ 是 + "Flash Protect" → 关读保护(RDP) │ └→ 一次成功!(然后第二次就下不进去了) └→ 记住:SYS → Debug → Serial Wire
七、一句话总结
先查接线和供电,按住复位来下载,降速到 1MHz,最后 ISP 全片擦。
搞定这四步,95% 的 ST-Link 报错都能解决。