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-LinkSTM32F407 最小系统板
SWDIOSWDIO(或标 DIO)
SWCLKSWCLK(或标 CLK)
GNDGND
3.3V3.3V(可选。如果板子通过 USB 供电,可不接)

重要提示:

  • 不要接反 SWDIO 和 SWCLK——这是最常见的低级错误

  • 部分 ST-Link 的 3.3V 输出能力很弱(几十 mA),如果接了会掉电压,建议板子单独供电

  • 线不要太长,< 20cm,太长 SWD 信号会畸变


二、报错速查表

错误 1:No ST-Link detected

Error: No ST-Link detected!

原因:ST-Link 没被电脑识别。

排查步骤:

  1. 把 ST-Link 拔了重新插

  2. 打开设备管理器→ 看"通用串行总线设备"或"调试器"下面有没有黄色感叹号

  3. 有感叹号 → 重装 ST-Link 驱动(CubeIDE 安装目录下有驱动包)

  4. 换个 USB 口试试(台式机插机箱后面的 USB 2.0 口)

  5. 换根 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

原因:下载过程中出错中断。

排查步骤:

  1. 复位芯片后重试(CubeIDE 的 Run → Debug Configurations → Debugger 标签,勾选Reset after connect

  2. CubeMX 重新生成工程(确保 Debug 选了 Serial Wire)

  3. 降到更低速度:

    • CubeIDE → Run → Debug Configurations → Debugger

    • ST-Link Serial Wire Speed:从 4MHz 降到1.8MHz1MHz

  4. 芯片 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(免费的官方工具):

  1. 打开 STM32CubeProgrammer

  2. 连接方式选ST-LINK

  3. Connect

  4. OB(Option Bytes)标签中:

    • Read Protection(RDP):设成AA(Level 0,无保护)

    • Apply

  5. 然后回到Erasing & Programming→ 点Full Chip Erase

  6. 回到 CubeIDE 重新下载

如果没有 CubeProgrammer,把BOOT0 = 1(拉高)、BOOT1 = 0,然后用串口 ISP 方式全片擦除(FlyMCU 工具,选择"擦除芯片")。

错误 5:Can not connect to target (SWD)

ST-LINK error (DEV_TARGET_HELD_UNDER_RESET)

原因:芯片一直处于复位状态。常见于板子 RST 引脚被外部拉低、或者电容对地短路。

排查:

  1. 量 RST 引脚电压——正常是 3.3V 左右

  2. 如果是 0V,查复位电路,或者断开 RST 外部连接

  3. 有些最小系统板的复位电容(104)太大了,换一个 100nF 的

错误 6:ST-Link USB communication error

ST-LINK USB communication error

原因:ST-Link 固件版本不匹配或固件损坏。

解决:

  1. 升级 ST-Link 固件:STM32CubeProgrammer → ST-LINK →Firmware Upgrade

  2. 如果升级失败,可能是山寨 ST-Link 不支持升级——换一个 ST-Link


三、CubeIDE 中的 Debug 配置检查

有时候不是硬件问题,是设置问题:

项目 → Run As → Debug Configurations → Debugger 标签:

设置项建议值
Debug ProbeST-LINK(ST-LINK GDB Server;OpenOCD 为备选)
InterfaceSWD(不是 JTAG)
Serial Wire Speed1800kHz(降速可以解决很多诡异问题)
Reset ModeConnect under reset

"Connect under reset" 选项解决了很多"特定芯片第一次连不上"的问题——下载器在芯片复位瞬间抢占 SWD 总线。


四、进阶排查工具

用 STM32CubeProgrammer 检测连接

ST-Link 好不好使,CubeProgrammer 试一下最直接。

  1. 打开 CubeProgrammer

  2. ST-LINKConnect

  3. 如果连上了,会显示芯片型号、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 报错都能解决。