
ST-LINK Utility 这工具用熟了是真顺手但一旦碰上“无法烧录”那也是真让人头疼。我平时做固件开发和产线支持几乎天天跟 STM32 的烧录打交道ST-LINK Utility 作为 ST 官方曾经的免费调试烧录软件至今仍是很多工程师手里备用的“救火队员”。这篇文章不绕弯子直接把我这几年实际踩过的坑、排查过的案例、以及最终验证有效的解决路径整理出来。不管你是刚接触 STM32 的新手还是被某个顽固的连不上问题卡住的老手这篇文章的排查思路和操作细节应该都能给你省下不少折腾的时间。1. 先搞清楚 ST-LINK Utility 的定位和烧录失败的大致方向1.1 它和 Keil、CubeIDE 烧录有什么不一样很多朋友习惯直接在 Keil MDK 或者 STM32CubeIDE 里点那个下载按钮烧完就跑从来没单独打开过 ST-LINK Utility。这个工具的全名叫 STM32 ST-LINK Utility它是意法半导体官方推出的独立烧录软件最大的价值在于不依赖工程文件、不依赖 IDE 环境直接通过 ST-LINK 调试器对目标芯片进行擦除、编程、校验、选项字节配置和固件读取。在实际开发中Keil 负责编译调试ST-LINK Utility 负责在关键时刻解决问题。比如芯片被读保护锁死了、程序跑飞导致 SWD 接口被复用、量产时需要快速烧录 hex 文件这时候 Keil 往往无能为力反倒是 ST-LINK Utility 能通过底层协议强行连上芯片。理解了这个定位你就能明白为什么它报错的排查思路跟 Keil 报错的排查思路不完全一样。1.2 无法烧录的几类典型表现和排查主线我处理过的“无法烧录”问题总结下来无非是这几类场景第一ST-LINK Utility 界面显示 No ST-LINK detected软件根本找不到调试器第二能找到 ST-LINK但连接目标芯片时报错 Cannot connect to the target第三连接正常但擦除或编程过程中卡住不动最后弹出 Error第四烧录校验失败提示数据校验不一致。这四类问题的根源其实可以归为四个方向驱动与硬件连接问题、调试器固件问题、目标芯片状态问题、软件设置问题。下面每个章节围绕一个方向深挖把我实测过的排查步骤和原理讲清楚。你在实际操作时不需要从头到尾按顺序走一遍而是根据报错现象直接跳到对应的排查环节。2. 驱动与硬件连接九成新手的第一个拦路虎2.1 驱动装好了但不识别多半是驱动版本冲突很多新手朋友装了 ST-LINK Utility插上 ST-LINK 后电脑提示“设备驱动安装失败”或者“未知 USB 设备”。这里有个容易忽略的点ST-LINK Utility 安装包本身会附带驱动但如果你电脑上之前装过旧版 Keil、旧版 IAR、或者各种第三方 ST-LINK 驱动Windows 的驱动数据库里可能残留了不兼容的版本信息导致新装驱动被“顶掉”或覆盖不上。我遇到过一个很典型的案例朋友拿一套 STM32F103 核心板让我帮忙烧录插上 ST-LINK V2 后设备管理器里一直显示黄色感叹号。我手动更新驱动选择 ST 官方驱动目录提示“已安装最新驱动”但设备就是无法正常工作。最终解决方式是在设备管理器里右键卸载设备勾选“删除此设备的驱动程序软件”然后把 ST-LINK 拔掉重插让 Windows 重新枚举并用 ST-LINK Utility 安装目录下的驱动文件手动指定安装一次就通了。驱动这块最稳妥的做法是安装 ST-LINK Utility 时选择完整安装确保 USB 驱动和 ST-LINK 驱动都装上。另外注意ST-LINK Utility 的新版本对旧版 Windows 系统的兼容性一般如果你还在用 Win7尽量选择 3.x 的中间版本而不是最新的 4.x。最新版 4.x 在 Win10/Win11 上表现稳定但在老系统上偶尔会有 USB 枚举异常的情况。2.2 接线和供电问题SWD 四根线里最容易翻车的是 RST 和 3.3V驱动没问题、设备管理器里也能正常识别 ST-LINK但点 Target - Connect 时依然报 Cannot connect to the target这时九成是硬件连接问题。很多人以为 SWD 只要接 SWDIO、SWCLK、GND 三根线就行实际上在某些目标板上不接 RST复位线会导致连接不稳定甚至失败。原因在于 ST-LINK 在建立连接时需要拉低目标芯片的复位引脚以进入调试模式如果目标板上的复位电路设计比较特殊、或者复位引脚被强上拉、或者板上有大电容导致复位时间过长没有 RST 线就很难建立稳定握手。我的习惯是只要手头有杜邦线一律把 SWDIO、SWCLK、GND、3.3V、RST 五根线全部接上。3.3V 的作用是让 ST-LINK 检测目标板的参考电压这个电压信号用于电平匹配不是用来给板子供电的。如果目标板是独立供电ST-LINK 的 3.3V 输出端可以不接但最好还是接上让调试器知道目标板的电平标准如果目标板没供电你必须用 ST-LINK 的 3.3V 输出给板子供电但要注意电流限制ST-LINK V2 的 3.3V 输出能力一般只有 100mA 左右带不动功耗稍高的板子强行供电会出现电压跌落表现为连接时好时坏、烧录中途失败。还有一点必须提醒SWDIO 和 SWCLK 这两根线千万不能接反。接反了 ST-LINK 自身不会有问题但目标芯片永远不会回应。检查方法很简单用万用表顺着杜邦线量一遍或者直接换一组短一点的线。杜邦线过长也会导致信号完整性下降我实测过超过 20cm 的杜邦线在高速模式下经常出现校验失败把连线缩短到 10cm 以内基本就好了。3. 软件设置与连接参数看似不起眼实则决定成败3.1 Target 电压检测和连接模式的选择逻辑点开 ST-LINK Utility 的 Target - Settings你会看到 Debug 相关的几个关键参数。首先是 Connect under reset 模式这个选项默认是 Normal但当你遇到目标芯片程序跑飞、休眠、或者把 SWD 引脚复用为普通 GPIO 导致无法正常连接时就必须改成 Connect under reset。这里我把原理说透Normal 模式下ST-LINK 直接对目标芯片的 SWD 接口发起通信。如果芯片内部程序在上电瞬间就把 SWDIO 引脚复用成其他功能ST-LINK 在芯片运行后就无法抢占调试端口。Connect under reset 模式下ST-LINK 会先拉低复位引脚让芯片保持在复位状态在复位释放的极短时间内抢先建立 SWD 连接从而绕过用户程序对引脚的占用。这就是为什么前面强调一定要接 RST 线没有 RST 线Connect under reset 功能就是摆设。我通常在处理“芯片无法连接”问题时会先尝试 Normal 模式失败后切到 Connect under reset 模式同时把 Reset pulse 的时长从默认值适当调大比如调到 100ms 左右。需要特别留意的是硬件复位电路如果包含较大容值的电容复位脉冲太短可能来不及把芯片完全拉低延长复位脉冲可以显著提高连接成功率。3.2 Frequency 频率选择和接口类型选择的实际影响另一个常见坑是连接频率设置过高。ST-LINK Utility 的 Target Settings 里有一个 Frequency 下拉框默认可能是 4MHz 或者更高。当你的连接线比较长、目标板供电不足、或者信号受到了干扰时过高的 SWD 时钟频率会导致通信时序不稳定表现就是连接偶尔成功偶尔失败或者烧录到一半报错。我的经验值调试用 4MHz 没问题但如果用杜邦线连接保守起见直接降到 1.8MHz 或者 1MHz。烧录不只是传输数据擦除和编程阶段内部逻辑对时序也有要求频率太高反而容易触发芯片内部的保护机制或者超时错误。这不是玄学我排查过一例非常诡异的问题同一块板子在公司工位上烧录一切正常拿到客户现场就报校验错误最后发现是现场有大功率变频器干扰把 SWD 频率从 4MHz 降到 1MHz 后问题彻底消失。接口类型的选择上ST-LINK Utility 同时支持 JTAG 和 SWD。如果你的目标板把 JTAG 引脚全部引出理论上可以用 JTAG但实际上 SWD 只需要两根线布线和连接都更简单除非你的目标板只引出了 JTAG 接口否则一律优先用 SWD。另外新版 ST-LINK Utility 支持自动检测接口类型前提是目标芯片供电正常、时钟正常、复位引脚没有被异常拉低。3.3 Option Bytes 选项字节误配置导致的顽固故障还有一个很容易被忽略的软件层面问题Option Bytes选项字节配置错误。ST-LINK Utility 的 Target - Option Bytes 界面里有很多底层选项包括读保护级别、写保护、看门狗配置、BOOT 引脚配置等。如果之前有人误操作把 Flash 的写保护区域打开了或者把读保护等级设置成了 Level 1那么烧录时就会出现“擦除失败”或者“无法编程”的报错。这种情况的典型表现是能连上芯片但擦除 Flash 时报错或者编程时报错提示目标地址写入失败。解决方法是进入 Option Bytes 界面把 Read Out Protection 设置为 Level 0禁用把 nWRP 相关的写保护全部取消勾选然后点击 Apply。这里有个操作顺序的细节必须先执行一次全芯片擦除Full chip erase再修改选项字节否则芯片可能因为保护机制拒绝选项字节的修改。我遇到过一块被设成 Level 1 读保护的芯片用 ST-LINK Utility 连接后能看到芯片 ID但读取 Flash 内容全是 0xFF烧录时报 Device is busy 之类的错误。我当时第一步就进入 Option Bytes 把读保护改成 Level 0点击 Apply 时工具弹窗提示“Mass erase will be performed. Continue?”——这一步必须点确认因为解除读保护的前提是擦除整个 Flash。擦完之后芯片恢复出厂状态一切正常。4. 烧录过程中的典型报错与现场排查实录4.1 Cannot connect to the target从软件到硬件的三级排查这个报错出现频率最高我的排查流程是固定的。第一步确认 ST-LINK 驱动正常、设备管理器里能看到 ST-LINK并且 Target Settings 里能读到 ST-LINK 的固件版本号。如果读不到版本号说明调试器自身就有问题先解决调试器。第二步检查目标板供电。用万用表量一下目标芯片的 VDD 引脚对 GND 的电压STM32 大部分型号要求 2.0V 到 3.6V如果你的板子供电只有 1.8V 或者更低ST-LINK 无法正常握手。还有一个细节目标板的 GND 必须和 ST-LINK 的 GND 共地这一点我在紧急排查时发现很多新手会漏掉只接了 SWDIO 和 SWCLK 就以为完事了。第三步尝试降低连接频率并勾选 Connect under reset。这两项组合起来可以解决 90% 以上的“找不到目标”问题。如果还不行就要怀疑目标芯片本身是否已经损坏或者进入了异常状态。一个实用的测试方法把目标芯片的 BOOT0 引脚拉高强制从系统存储器启动这样用户 Flash 里的程序不会被执行SWD 引脚保持默认功能再尝试连接。STM32F1 系列通常 BOOT0 拉高就能绕过用户程序F4 系列需要结合 BOOT0 和 BOOT1 的组合具体以参考手册为准。4.2 烧录到一半报错或校验失败先从供电和线缆找原因烧录过程中报错比连接时报错更让人恼火因为板子明明能连上程序也能烧进去一部分却总是中途失败。我遇到的情况里最常见的原因是供电不稳定。特别是用 ST-LINK 的 3.3V 给目标板供电时擦除操作瞬间电流需求会突然增大如果供电能力不足电压跌落会导致芯片内部逻辑混乱烧录随即失败。解决方法是给目标板使用独立电源供电确保电压稳定在 3.3V然后再用 ST-LINK 连接。如果你一定要用 ST-LINK 供电把 SWD 频率降低并关闭 Target Settings 里的“Reset after programming”选项减少复位瞬间的电流冲击。另外校验失败还有个重要原因是 Flash 编程时序受到干扰排查手段还是那三板斧缩短杜邦线、降低通信频率、确保共地。还有一个经常被忽略的点不要用那种十几块钱买来的劣质 ST-LINK 复制品。正版 ST-LINK 的驱动芯片和电路设计是经过验证的山寨版为了省钱会省掉一些保护电路输出波形质量差遇到稍微复杂一点的场景就各种问题。我自己手头有正版 ST-LINK V2 和一个山寨版同样的板子同样的线缆正版一次过山寨版偶尔报错换了正版之后怀疑人生的概率大大降低。4.3 读保护解除不了Level 1 到 Level 0 的强制流程读保护问题在二手板子或者别人转手的项目里特别常见。收到一块板子插上 ST-LINK Utility 能识别芯片型号但读 Flash 全 0xFF烧录报错十有八九是开了读保护。正常流程我刚才已经说过在 Option Bytes 里把 RDP 从 Level 1 改成 Level 0工具会自动触发全片擦除。但这里还有个更隐蔽的情况如果芯片的读保护等级被设置成 Level 2那就彻底焊死了任何调试接口都无法再访问ST-LINK Utility 也救不回来。Level 2 一般是产品出厂前最后设置的用于完全防止固件被读取。如果你手上的芯片被设成 Level 2唯一的选择是更换芯片。所以初次拿到陌生板子时第一件事就是用 ST-LINK Utility 读一下选项字节确认保护等级以免后期被坑。4.4 烧录结果速查表常见报错与对应解决动作报错现象可能原因实测有效的解决动作No ST-LINK detectedUSB 驱动异常、设备被占用重装驱动、换 USB 口、关闭 Keil 等占用调试器的程序Cannot connect to the target引脚接线错误、供电异常、芯片跑飞检查 SWDIO/SWCLK/GND/3.3V/RST降低频率勾选 Connect under resetError: Flash Download failedFlash 写保护、频率过高、供电不足检查 Option Bytes 写保护降低频率独立供电Verification failed线缆过长、干扰、目标芯片时钟异常缩短杜邦线降频率检查目标板晶振Device is busy / 擦除失败读保护开启、芯片处于异常模式进入 Option Bytes 解除读保护执行 Full chip erase这张表是我每次给团队新同事培训时的压箱底资料。排查顺序建议从左到右、从上到下先解决环境问题再解决硬件连接最后折腾软件设置。5. ST-LINK Utility 的进阶用法固件升级、批量生产与日常开发高频场景5.1 固件升级和调试器自检升级有风险操作需谨慎ST-LINK Utility 提供了 ST-LINK 固件升级功能在 ST-LINK 菜单下的 Firmware Update 里。新买的 ST-LINK 或者长时间没升级的调试器在连接较新的 STM32 芯片时可能会因为固件版本过旧而无法识别。这时候升级固件是必要的。但升级固件这个操作要非常小心升级过程中绝对不能拔线、断电否则调试器变砖的概率很高。我曾经有一块 ST-LINK V2 在升级途中被同事不小心拔了 USB之后电脑彻底无法识别最后只能拆开外壳短接特定引脚进入 bootloader 模式才救回来。所以我的建议是只要现有固件能正常烧录你手头的芯片就不要手贱去升级如果非要升级找一个电源稳定、不会被碰到的环境升级过程中不要碰任何线缆。升级完成后ST-LINK Utility 会在 Target Settings 里显示新的固件版本号连接目标板测试一下烧录功能是否正常整个流程才算走完。另外 Firmware Update 界面里有 Upgrade 和 Refresh 两个选项Refresh 只是读取当前版本信息Upgrade 才是执行升级界面英文不好的朋友不要点错了。5.2 用命令行模式做批量烧录给产线和自测场景提效很多人不知道 ST-LINK Utility 自带命令行工具。安装目录下有一个 ST-LINK_CLI.exe 文件通过命令行可以完成烧录、擦除、校验等操作。这个功能在生产环境和批量烧录场景下堪称效率神器。我常用的命令格式是这样的ST-LINK_CLI.exe -c SWD UR -P firmware.hex -V拆开来看-c 表示连接目标SWD 指定使用 SWD 接口UR 表示 Connect under reset-P 指定烧录的文件支持 hex 和 bin 格式-V 表示烧录后执行校验。如果文件是 bin 格式还需要指定烧录地址ST-LINK_CLI.exe -c SWD UR -P firmware.bin 0x08000000 -V这条命令把 firmware.bin 烧写到 0x08000000 地址这个地址就是 STM32 内部 Flash 的起始地址。我用这个命令写过简单的批处理脚本配合产线的工装治具实现一键烧录和自动校验。另外命令行模式还支持读取芯片信息、读取 Flash 内容备份对固件归档和故障分析帮助很大。如果你还在逐个打开图形界面点鼠标烧录建议认真研究一下命令行模式能节省大量时间。5.3 芯片型号不匹配和 Flash 容量识别错误的处理还有一种频率较低但一旦遇到就很困惑的情况目标芯片明明是 STM32F103ZET6512KB Flash但 ST-LINK Utility 识别出来的型号和容量不对导致烧录失败或者烧录后程序跑不起来。这种问题通常是目标芯片的 ID 读取异常或者是使用了带加密 ID 的国产兼容芯片。举例来说市面上常见的 GD32、APM32 等国产兼容芯片在 ST-LINK Utility 里可能被识别为 STM32 系列但 Flash 容量等参数存在差异。如果直接按 STM32 的参数烧录可能出现写入地址超出实际 Flash 范围、或者校验失败的问题。解决办法是在 Target Settings 里手动指定正确的 Flash 大小或者使用芯片厂商自家的烧录工具。对于产线大批量场景我会在烧录脚本里写死芯片型号和容量参数避免个别芯片被误识别导致烧录流程中断。这块需要结合具体芯片的数据手册确认 Flash 起始地址和大小不要盲目套用 STM32 的参数。6. 我踩过的几个典型顽固问题以及最终解决方案6.1 芯片被程序把 SWD 引脚复用掉后的强制连接这是一个非常经典的场景调试阶段程序里把 PA13/PA14F1 系列默认的 SWDIO/SWCLK复用成了普通 GPIO 输出烧录进去之后第二次想重新烧录就发现连接不上了。我最早遇到这个问题时也折腾了很久一度以为芯片坏了。后来搞清楚原理就明白了程序一旦运行把 SWD 引脚复用为 GPIO调试器在 Normal 模式下根本抢不到引脚控制权。解决办法就是前面提到的 Connect under reset让目标芯片保持复位状态在复位释放后的极短时间内建立调试连接此时用户程序还没开始执行SWD 引脚处于默认状态。ST-LINK Utility 里把 Mode 改成 Connect under reset并接好 RST 线连接成功率几乎 100%。如果你接不了 RST 线还有一个土办法把 BOOT0 拉高让芯片从系统存储器启动绕开用户 Flash 里的程序然后再连接。6.2 烧录时提示芯片读保护但确认是全新芯片有一次拿到一批“全新”的 STM32 芯片烧录时却提示读保护已开启让我一度怀疑是不是买了翻新片。后来查了资料才发现有些 STM32 系列在出厂时读保护是默认关闭的但某些批次或经由非正规渠道流通的芯片可能已经被上一手设置过。解决方式依然通过 Option Bytes 里把读保护降到 Level 0触发全片擦除恢复可用状态。如果遇到 RDP Level 2基本断定是翻新/二手芯片直接找供应商换货更靠谱。这个案例给我们的教训是批量采购的芯片到货后先抽样用 ST-LINK Utility 检查选项字节和保护等级避免上线时才发现问题影响生产进度。另外正规代理商渠道的芯片出现这种问题的概率要低得多采购环节尽量不要图便宜走不可控的渠道。6.3 供电不足导致烧录偶尔失败如何定位最后分享一个定位供电问题的经验。有一个项目目标板有多个外设实测整板工作电流能有 200mA 以上。开发阶段我一直用 ST-LINK 的 3.3V 给板子供电结果烧录时好时坏大部分时候在校验阶段报错。我一开始怀疑时序问题降了频率也换了线问题依旧。后来用万用表并联在电源端观察发现每次擦除动作出现时电压会从 3.3V 瞬间跌到 2.8V 以下这才意识到是供电能力不足。更换为外部稳压电源供电后问题立刻消失。之后我把这个经验固化成了标准操作凡是目标板功耗超过 50mA必须独立供电独立供电时还要注意 ST-LINK 和目标板之间的共地。通俗地讲调试器和目标板各吃各的电但必须是同一个“地”否则两者之间的信号电平就没有参考基准通信自然不稳定。这个细节在模块化开发、多块板级联时尤其重要。7. ST-LINK Utility 解决不了问题时如何决策与寻找替代方案7.1 硬件连接没问题、软件设置也没问题但就是连不上怎么办如果前面所有方法都试过了目标芯片就是无响应我觉得可以用排除法给问题定性。第一步换一块确定没问题的板子接到同一个 ST-LINK 上试。如果正常说明 ST-LINK 没问题问题在目标板或芯片如果不正常换一个 ST-LINK 再试。通过这种方式能快速把问题隔离到具体环节。隔离之后如果目标板是新板优先检查焊接芯片引脚有没有虚焊、桥连复位电路的电容有没有焊反。我用放大镜看到过一次 LQFP48 封装的芯片相邻引脚上有肉眼几乎看不见的锡渣导致 SWDIO 被拉低清理之后问题解决。如果目标板上电后芯片发烫基本上芯片已经坏了直接换芯片。相信你自己耳朵和眼睛的判断很多“疑难问题”最后都是低级硬件故障。7.2 什么时候该换用 STM32CubeProgrammer 或者第三方工具ST-LINK Utility 在官方工具链里的地位比较特殊一方面它简单直接、上手快、资源占用少另一方面ST 其实推出了功能更强大的替代工具STM32CubeProgrammer。新项目我建议直接用 STM32CubeProgrammer尤其是遇到 ST-LINK Utility 不在维护、无法解决的情况。如果换工具后连接成功那说明问题大概率在旧工具对某些新芯片型号支持不完整如果换工具还是一样那硬件问题的可能性就非常大了。STM32CubeProgrammer 界面稍显复杂但功能更全。它支持 UART 烧录、USB DFU 烧录在 ST-LINK 连接不上的时候这些替代通道往往能救命。比如芯片的 SWD 引脚被彻底锁定UART bootloader 还可以通过串口恢复。在产线和批量烧录场景STM32CubeProgrammer 的命令行模式也比 ST-LINK Utility 更加灵活。我的建议是ST-LINK Utility 留着当备用工具日常开发调试把手头的项目尽量迁到 STM32CubeProgrammer 上遇到问题也更容易在官方生态里找到答案。7.3 直接写入地址错误导致程序跑不起来的情况还有一种情况比较隐蔽烧录工具提示烧录成功校验也通过了但程序就是跑不起来。这时候需要回头检查文件的烧录地址。用 hex 文件一般不会出问题因为 hex 文件内部已经包含了地址信息但如果你使用的是 bin 文件必须在烧录前明确指定起始地址。写错地址的典型后果是程序被烧进了 Flash 的空白区域但芯片上电后从 0x08000000 读取向量表时发现内容是空的直接进入硬件错误或者跑飞。我的习惯是bin 文件统一烧到 0x08000000除非用了 bootloader才把 App 放在偏移地址。具体偏移量要看 bootloader 的设计比较常见的是 0x08008000 或者 0x08010000。如果不确定先用 ST-LINK Utility 读取当前 Flash 内容看看前 16 字节是不是正常的向量表栈顶地址和复位向量以此判断烧录地址是否正确。这个方法在排查“烧录成功但程序不运行”时非常实用。8. 日常保养与规避习惯8.1 烧录线材、接口和调试器的日常维护ST-LINK 调试器和杜邦线属于消耗品尤其是频繁插拔的使用场景下杜邦线内部很容易断裂但胶皮外观看不出来。线上信号时有时无会直接导致不稳定的烧录失败。排查这类问题时可以用万用表通断档测量每根线两端是否导通。如果条件允许我建议用带防呆设计的转接板加排线比散装杜邦线可靠得多对于已经老化、插头松动的杜邦线直接扔掉换新。ST-LINK 本体也要注意散热和静电防护。有些人在调试板上静电积累比较严重的环境中使用 ST-LINK虽然没有立即损坏但久而久之调试器内部电路可能受损出现供电异常或者信号质量下降。我在办公桌上常备一个防静电手环连接目标板之前先释放静电对板子和调试器的保护都很重要。8.2 每次烧录前的固定检查清单经过大量排障后我把烧录前的检查流程固化成了清单每次给团队做培训或者自己处理问题时都按这个走确认设备管理器识别 ST-LINK且 Target Settings 里能看到调试器信息确认 SWDIO、SWCLK、GND、3.3V、RST 五根线连接正确且导通确认目标板供电正常电压在芯片允许范围内确认 ST-LINK 与目标板共地文件格式确认无误hex 直接烧bin 确认起始地址根据连接线长度和现场环境选择合适的 SWD 频率确认目标芯片选项字节没有开启读保护和写保护。这七步检查下来基本能过滤掉 95% 的常见烧录失败原因剩下的才是真正需要动脑子分析的疑难问题。实际操作中我最常被问到的一个问题是“线都接对了为什么还是不行”这种时候我会让他们把杜邦线换成短线十有八九能解决——杜邦线过长引入的干扰和压降在高速通信时非常致命。8.3 手里的 ST-LINK 侧面按钮和指示灯代表了什么ST-LINK V2 的指示灯在不同状态下有不同含义红色常亮表示 USB 已连接但未与目标板建立调试会话绿色常亮表示调试会话建立成功红绿交替闪烁表示正在通信。如果你看到红色常亮、但 ST-LINK Utility 里无法连接目标板说明调试器本身工作正常问题在目标侧如果插上 USB 之后指示灯都不亮那要么是 USB 线问题要么是调试器硬件坏了。侧面还有一个可以用来在“编程模式”和“调试模式”间切换的小开关有些 ST-LINK 复制品没有这个开关或者开关位置不同。在编程模式下ST-LINK 的输出被隔离不能进行调试如果接线没问题但始终连接不成功检查一下开关位置。我遇到过几次非常莫名其妙的问题最后发现就是开关被碰了一下拨回调试模式后一切正常。这篇文章里提到的每一条解决方法都是我实打实碰到过并且解决过的问题。最后再说一句如果你手头的问题依旧顽固试着把 ST-LINK Utility 关掉重新打开同时把目标板完全断电再上电。别小看这个“重启大法”它往往能让芯片内部的异常状态复位很多稀奇古怪的小概率问题就此解决。做嵌入式开发耐心和细致比什么都重要祝你们都能顺利把程序烧进去。