ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

手把手搞定ST-Link驱动:从卸载到Keil调试的完整避坑指南

2026/9/19 19:14:45 拓冰建站 浏览量
手把手搞定ST-Link驱动:从卸载到Keil调试的完整避坑指南 把STLink用明白这件事说大不大说小也不小。经常有朋友拿着新买的STLink插上电脑没反应设备管理器里黄色感叹号Keil里折腾半天连不上芯片这类问题来找我。其实多数情况下不是仿真器坏了而是驱动安装这条链路里的某个环节没理顺。今天这篇就把从卸载旧驱动到Keil里完成配置的完整过程拆开讲一遍把这几年踩过的坑、验证过的方案一次说清楚。整篇围绕STLink驱动安装展开你需要解决的核心问题基本都能在下面找到答案。1. 先把四层链路搞清楚驱动、固件、Keil、目标板各管哪一段网上关于STLink驱动安装的求助帖十个里有八个是不知道问题出在哪一层直接乱试。所以我习惯先把整条链路讲明白后面排查故障才有方向。1.1 一次正常的连接过程里数据是怎么走的当你点下Keil里的Download按钮数据要经过这样一条路Keil软件本身只是负责把编译好的hex/bin文件按地址规划好真正烧录动作是通过它内置的ST-Link调试器DLL把数据交给USB驱动USB驱动把数据封装成USB报文发给STLink硬件。STLink硬件收到报文后由它内部的固件把报文翻译成SWD协议的时钟和数据信号最终通过SWDIO、SWCLK两根线写进STM32芯片的Flash里。所以故障出现时你得先判断是哪一段断了Keil到USB驱动这一段表现为No ST-LINK detectedUSB驱动到STLink硬件这一段表现为设备管理器里就看不到设备或者有黄色感叹号STLink固件到芯片这一段表现为设备管理器正常、Keil也能识别到仿真器但下载时报Cannot Access Target或者SWD响应错误。1.2 ST-Link的硬件版本差异V2、板载V2-1和V3装驱动时有什么区别很多新手不知道STLink还有版本区别看到别人的截图和自己的界面不一样就慌了。STLink家族里最常遇到的是这三个独立小棒ST-LINK/V2蓝色外壳或者金属外壳带一个SWD排针最常见。Nucleo开发板板载的ST-LINK/V2-1。它在V2基础上多出了一个虚拟串口功能所以设备管理器里会额外出现一个COM口设备驱动安装完成后的设备节点也比独立版多。ST-LINK/V3ST的新一代调试器速度更快有些型号带串口、CAN等附加功能。这三个版本共用一个官方驱动也就是后面要说的STSW-LINK009。但设备管理器里显示的名字不同对吧V2显示ST-LINK/V2V2-1显示ST-LINK/V2-1V3显示ST-LINK/V3。这本身就能帮你判断电脑是否真正枚举到了硬件。还有个历史遗留问题是老版本ST-LINK/V1。这玩意儿太老了只支持Keil MDK 4.x新驱动也不支持它基本可以扔进抽屉了。如果你手里是V1下面的方法作用有限直接换硬件更实际。1.3 克隆版ST-Link为什么最容易出问题市面上的STLink低价货很多是克隆版芯片方案不是ST原厂那颗。它们用的USB描述符、固件版本号经常是盗用的所以装了官方驱动后一般能识别但设备管理器里可能显示成STLink dongle而不是标准的ST-LINK/V2。克隆版最典型的问题有三个一是固件版本显示异常Keil里会看到Firmware Version为0.x甚至报错二是升级固件时容易变砖没有原厂Bootloader引导三是在高负载下载或者长线连接下稳定性差一些。这不是说克隆版完全不能用。我自己早期也买过几十块钱的STLink练手用熟了之后再换的正版。但内心要清楚克隆版出现问题时的排查思路跟正版不太一样不能一上来就刷固件原因后面单独说。2. 动手前的卸载工作旧驱动、旧软件与注册表残留的彻底清理STLink驱动装不上很大概率不是新驱动装不上而是旧驱动没卸干净。尤其以前装过STM32 ST-LINK Utility或者用过Zadig之类工具给设备换过驱动再装新驱动系统里会残留一堆相互打架的信息。2.1 第一步在设备管理器里删除设备并勾选卸载驱动先把STLink拔掉。然后WinR输入devmgmt.msc打开设备管理器。在菜单栏选择查看 - 显示隐藏的设备再在设备列表里找所有带STLink、STMicroelectronics、ST-LINK字样或者带黄色感叹号的未知设备。注意如果设备不在线它可能出现在通用串行总线控制器、通用串行总线设备或其他隐藏分类里。对每个设备右键选择卸载设备在弹出的对话框里务必勾选删除此设备的驱动程序软件。这一步很关键不勾选的话Windows只是把设备节点拿掉驱动文件还留在系统里。卸载完后拔出再插上系统会用缓存里的旧驱动重新装一遍等于白卸。2.2 第二步卸载ST官方软件套件依次打开设置 - 应用 - 应用和功能把以下程序全部卸载ST-LINK USB DriverSTM32 ST-LINK UtilitySTM32CubeProgrammer如果只是调试可以后面需要再装ST-MCU Finder等等凡是STMicroelectronics相关的工具尤其STM32 ST-LINK Utility是老版本驱动的大头。它自带的驱动是V1.x时代的东西只支持HID模式。STSW-LINK009的新驱动走的是WinUSB模式。两个驱动模式在系统里同时存在就会导致老Keil、新Keil、CubeProgrammer识别结果完全不一样。经常有人出现CubeProgrammer能连上Keil连不上的现象十有八九就是这种驱动残留引起的。2.3 第三步处理隐藏设备与驱动残留应用卸载完有些驱动残留还在系统INF目录里。可以用管理员身份打开命令行执行下面两条命令查看pnputil /enum-drivers然后筛选名称里带STMicroelectronics、ST-Link、stlink的第三方驱动程序记录下对应的oemXX.inf编号。确认是哪几个后逐个删除pnputil /delete-driver oemXX.inf /uninstall/uninstall参数的作用是把这个驱动从所有使用它的设备上卸载掉。这里要谨慎别把系统自带的驱动删了。筛选时看清楚发布者是不是STMicroelectronics。注册表方面正常情况下做完上面的步骤已经够了不需要手动翻注册表。只有一种情况建议处理装完驱动后设备管理器里一直有个未知设备怎么装都失败这时可以打开注册表编辑器定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{36fc9e60-c465-11cf-8056-444553540000}这是USB设备类的Class项。展开下面的子项找带STLink、STMicroelectronics等关键字的项右键删除。操作前一定要右键这个Class节点选择导出备份一份。删错了还能导回来。U盘、鼠标键盘等普通USB设备用的也是这个大类下面的不同子项你只删ST相关子项不会有问题但备份仍然要做。2.4 换系统迁移用户要注意什么还有一种情况是电脑本身没问题但系统是别人用过的旧电脑或者从旧机器迁移过来的。这种系统里往往既有老的HID驱动又有新WinUSB驱动还可能有乱七八糟的USB加速工具、驱动管家之类的东西。我遇到好几个STLink怎么都装不上的求助最后发现是第三方驱动工具把设备驱动强制锁定成了某个旧版本。这类安全卫士、驱动精灵的驱动管理功能尽量不要让它们给自己打驱动。嵌入式开发的调试器、下载器、串口芯片驱动全部从芯片原厂官网下载手动安装是最稳妥的。系统重装后我也会第一时间关闭这类工具的自动驱动更新再手动装ST的驱动。3. 从零安装ST-Link驱动驱动包选择与安装完成后的验证标准清理干净之后才是真正安装驱动的环节。这一步看起来简单但有两个细节值得停下来多想一下。3.1 官方驱动包STSW-LINK009怎么下、选哪个版本ST官方驱动包的名字是STSW-LINK009全称是ST-LINK USB Driver for Windows。直接在ST官网搜索这个编号就能找到下载页。它的用途就是让Windows正确识别ST-LINK/V2、V2-1、V3设备。下载回来的是一个zip压缩包解压后里面通常是安装说明和一个带数字签名的驱动程序文件夹不同年代的包结构略有差别。有些版本是直接双击运行stlink_winusb_install.bat它会自动调用系统自带的驱动安装工具把驱动装好。有些版本是双击一个dpinst系列的exe程序按向导点下一步就行。Win7、Win8、Win10、Win11都能用这个包。如果电脑还是Win XP那就得找历史老版本驱动了。不过到2024年还在用XP做STM32开发的话建议先把环境整体升级一下不只是驱动的问题新版Keil本身也跑不动XP。3.2 安装过程会遇到的那些提示安装过程中Windows会弹几次安全提示大致内容是该驱动程序没有经过微软签名验证或者是否允许修改设备直接点仍然安装或是。这是正常现象ST的驱动是WHQL签名的但某些精简版系统会误报。另外注意一个先后顺序先安装驱动再插STLink。虽然先插后装也能触发系统自动搜索但很多人插上设备后Windows自动安装驱动成功实际上用的是Windows Update缓存里的旧版驱动后面又得卸载重来。所以先把驱动装完再插STLink这是最省事的。3.3 安装完成后设备管理器里应该看到什么装上驱动并把STLink插到电脑后设备管理器里正常应该出现下面这些设备节点之一硬件版本应出现的设备名称ST-LINK/V2独立版通用串行总线设备 - ST-LINK/V2Nucleo板载ST-LINK/V2-1通用串行总线设备 - ST-LINK/V2-1外加端口 - STMicroelectronics Virtual COM PortST-LINK/V3通用串行总线设备 - ST-LINK/V3克隆版部分ST-Link dongle或带黄色感叹号的未知设备如果看到的设备名字跟上面的对不上比如显示Unknown Device或者带黄色感叹号说明驱动没装对。这时右键该设备选择更新驱动程序 - 自动搜索驱动程序让Windows重新扫一遍刚才安装的驱动。还不行就回到第2章从头清理再来一遍。有一个场景需要稍微留意当Keil同时开着并且占用了STLink设备时你再插第二个STLink设备管理器可能只有一个能正常显示。多个调试器同时接一台电脑时最好只保留当前要用的一个其余拔掉。4. Keil侧配置Debug页、Flash Download与报错原文的逐字解读设备和驱动都搞定了终于轮到Keil。很多人卡在这一步驱动装了设备管理器里也正常但Keil就是连不上。4.1 Debug页面SettingsSW Device列表里出现IDCODE才算真的连上打开你的工程进入Options for Target魔法棒图标切到Debug标签页在右上角的Use下拉框里选择ST-Link Debugger然后点击旁边的Settings按钮。弹出的Cortex-M Target Driver Setup窗口默认在Debug页关键信息都在这里Port选择SW。除非你确定要用JTAG四线方式否则选SW。STM32芯片几乎全支持SWD只占用两根线。Max Clock默认值就行遇到下载失败可以降到1MHz再试。下面的SW Device列表这是最关键的验证位置。如果STLink和芯片连接正常这里会显示一行设备IDCODE形如0x1BA01477旁边有SWDID或者NameMode显示Normal。如果这个列表是空的那说明Keil已经识别到了STLink本身但STLink没有探测到目标芯片。问题就出在STLink到芯片这一段接线是否对、芯片是否上电、芯片SWD引脚是否被禁用、复位电路是否异常。点一下窗口里的Test按钮正常情况会弹出一个框提示Test successful或者类似的信息同时显示目标芯片的IDCODE。没弹出来也别慌按第5章的思路逐层查。4.2 Flash Download选项卡缺算法是新手最常见的下载失败原因很多人SW Device里能看到IDCODE却下载时报Error: Flash Download failed - Cortex-M3。这个问题跟连接没关系纯粹是Flash编程算法没配置。回到Cortex-M Target Driver Setup窗口切到Flash Download标签页勾选Reset and Run下载完后自动复位并运行程序然后看下面的Programming Algorithm列表。如果列表是空的或者里面只有一颗跟你芯片型号对不上的算法那就需要手动添加。点击Add按钮在弹出的芯片列表里找到你的型号。举例STM32F103C8T6选STM32F10x Med-density Flash 512KSTM32F407VET6选STM32F4xx Flash 1MSTM32H750VBT6选STM32H7xx Flash 1M。选错算法会出现能连接但烧不进、校验失败等诡异问题因为不同容量芯片的Flash扇区布局和编程时序不一样。Erase Full Chip和Erase Sectors的区别前者下载前擦除全部Flash慢但干净后者只擦除将要写入的扇区快但可能留下旧数据。日常调试用Erase Sectors就行需要发布固件或者做加密校验时再用整片擦除。4.3 三条高频报错的故障定位逻辑实际使用中下面三条报错出现频率最高我把它们的英文原文和处理思路列出来RDDI-DAP Error。常见于老版本MDK配上新版本驱动或者芯片开启了读保护。解决步骤换用MDK 5.37以上版本用STM32CubeProgrammer连接芯片在Option Bytes或者Access port里把读保护等级设为0先解除保护。老工程从MDK 4.x迁移上来最容易撞到这条不要只盯着Keil设置。Cannot Access Target。字面意思是连目标芯片的调试端口都访问不到。硬件层面先检查SWDIO、SWCLK、GND是不是接对了目标板有没有独立供电。软件层面确认Keil Settings里Port选的是SW而不是JTAG。有些目标板的复位电路会影响SWD初始化把STLink的NRST接到板子的NRST上或者手动按一下板子复位键再点Download有时候就能过。No ST-LINK detected。这个是Keil完全找不到STLink设备。先看看是不是被ST公司的其他软件占用设备比如STM32CubeProgrammer开着它会把STLink设备独占。关掉所有ST相关软件拔插一次再试。还有一种情况是USB口供电不足尤其是用笔记本侧边USB口或者劣质HUB换个直连主板的USB口。5. 四个高频装好驱动仍失败案例的完整排查过程下面把这几年被问爆的几个实际案例完整复盘一下每个都能在真实环境里复现。5.1 设备管理器显示正常Keil却报Cannot Access Target有一个做比赛的同学给了这么个场景STLink在设备管理器里显示正常Keil Settings里SW Device列表却是空的下载时报Cannot Access Target。他试过换驱动、换Keil版本全都没解决。我让他做第一步检查目标板供电。他用的是一个自制的STM32最小系统板USB口只是供电没有板载LDO稳压供电的USB转TTL模块输出电流又不够芯片实际电压只有2.6V低于SWD正常工作的最低电压。换了一个独立稳压电源后问题直接消失。这种案例里有个容易忽略的事实STLink测量目标芯片电压是根据SWD接口的参考电平来的一般要求目标板提供3.3V或者5V参考电压。目标板没上电SWDIO和SWCLK的电平都是悬浮的STLink根本没法建立通信。所以排查顺序永远是先确认目标板上电再量SWD接口的3.3V引脚有没有电压最后才去折腾软件。5.2 Keil点开Settings直接闪退这个案例比较少见但不是没有。一位朋友装了STSW-LINK009之后Keil里选择ST-Link Debugger点SettingsKeil整个程序直接闪退连报错都没有。重装Keil也没用。排查下来两个原因叠加一是他之前装过Zadig给USB蓝牙设备换过驱动顺手把STLink的驱动也替换成了通用WinUSB驱动跟Keil内置的STLink DLL版本不兼容二是他用的MDK版本太老还是5.20时代对新的WinUSB模式支持不完整。处理方式先按第2章把STLink驱动清理干净重装STSW-LINK009然后卸载MDK 5.20安装MDK 5.37以上版本最后用管理员身份运行Keil。这里说个细节有些精简版Windows系统缺USB相关的系统组件也会导致Keil在访问STLink设备时崩溃把系统更新打全就正常了。5.3 明明插着仿真器却说No ST-LINK detected我明明已经把STLink插到电脑上了为什么Keil还是说No ST-LINK detected这个问题几乎每周都有人在社区里问。实际原因往往很无厘头STLink插的是显示器或者键盘上带的USB HUB口这种接口的电流输出不稳定或者USB延长线质量太差导致信号衰减还有人是插了一根只有充电功能没有数据线的USB线再有一个非常常见的原因STLink插上后指示灯正常亮但系统里另一个软件尤其是STM32CubeProgrammer或者串口助手已经把这个设备占用了Keil根本没机会访问。处理路径是固定的拉直问题链路换USB口直插主机背面换一根确认能传数据的数据线关掉所有可能占用设备的软件再点一次Download。每次只改变一个变量别同时换口又换线又关软件否则出了问题都不知道是哪个起的作用。5.4 用交叉验证法五分钟定位故障点当Keil能识别STLink但连不上目标芯片时建议用交叉验证法来确定问题到底在仿真器、线缆、还是目标板。找一个确认是好的STM32最小系统板用这套STLink加上原来那根线去连。如果连得上问题大概率出在你原来的目标板上如果还是连不上换一根杜邦线再试还不行基本可以断定STLink本身有问题。反过来也一样你手上如果同时有正版和克隆版STLink交换对比会非常直观。这个方法看起来很笨其实比任何命令行技巧都实用几分钟就能把故障范围缩小到一个部件上。6. ST-Link引脚接线与克隆固件的最后一道避坑6.1 SWD接线和NRST引脚为什么引脚会直接影响检测不到SWD只需要四根线3.3V、SWDIO、SWCLK、GND加上可选的一根NRST。实际接线时最容易犯的错是SWDIO和SWCLK接反这两根线不能互换。其次是无视共地STLink的GND和目标板的GND必须连在一起否则信号的电平参考点完全不同通信必然失败。引脚功能接目标板3.3V电压参考/供电目标板3.3VSWDIO数据线PA13SWCLK时钟线PA14GND地GNDRST复位线可接可不接NRST关于NRST绝大多数情况下不接也能正常下载。但有些芯片在程序里把SWD引脚复用成了普通IO或者进入了低功耗模式这时接上NRST并勾选Keil Settings里Connect under Reset选项可以强制芯片在复位状态下恢复SWD把程序救回来。还有一个Nucleo板载STLink切换外部调试器的经典坑。Nucleo板上的STLink和板上STM32是通过一组跳线CN2相连的。当你用外部STLink给Nucleo板上的芯片下载程序时必须先把CN2上的两个跳线帽拿掉否则外部STLink和板载STLink会同时驱动SWD总线表现为连不上或者偶发下载失败。6.2 克隆版设备管理器名称和IDCODE异常时怎么办克隆版STLink插上电脑后设备管理器里显示的设备名经常是STLink dongle而不是ST-LINK/V2。装了官方驱动也能用但Keil Settings里显示的固件版本可能异常SW Device的IDCODE也有可能读不出来。这里有个重要判断IDCODE读不出来时先别急着怪克隆版很多是芯片被锁住或者目标板供电不足交叉验证法比换硬件更靠谱。如果克隆版在别的电脑上能用就在这台电脑上不能用那基本是驱动环境问题按第二章卸载清理流程走一遍应该能解决。如果克隆版当前固件太老可能出现Keil报ST-Link firmware upgrade required。正版直接点升级就行克隆版升级要格外小心。升级过程中固件写入失败就会变砖而且变砖后没有任何恢复手段正版还能通过Bootloader恢复。所以我的建议是克隆版能正常用就不要手痒去升级固件一旦升级界面卡住最坏的结果就是扔垃圾桶。6.3 我的实操经验排查顺序、备件习惯与日常维护写到这里把个人经验总结成一套固定排查顺序按这个顺序走90%以上的STLink问题都能定位看设备管理器设备节点是否存在有没有感叹号看Keil SettingsSW Device列表有没有IDCODE量目标板供电3.3V引脚与GND之间电压是否正常测线缆和接线SWDIO、SWCLK是否接反GND是否共地交叉替换换一块确认好的板子或者换一个STLink验证。日常使用方面也分享两个习惯。第一给每个调试器准备一个SWD引线排用不同颜色区分SWDIO、SWCLK、GND、3.3V不要每次接线全靠颜色猜。第二调试器不用的时候就拔下来放静电袋里长期插着电的STLinkUSB口容易氧化接触不良表现为时不时掉线这种问题换根线就好别误判成设备坏了。另外新买的STLink第一次连接时可以先跑一次官方驱动自带的固件升级流程。正版设备升级固件风险很低升级到最新固件能规避很多Keil新版本对老固件的兼容性报错。克隆版就跳过这一步原因上面已经说过了。STLink驱动安装和Keil配置这件事真正掌握了链路原理之后并不复杂。它跟很多嵌入式开发里重复踩坑的问题一样难点不在单个步骤有多难而在于问题出现时你不知道该去查哪一段。希望这篇从卸载到配置再到故障排查的完整过程能让你少走一些我当年走过的弯路。