STM32F407VG烧录失败及ST-LINK通信故障求助
解决STM32F4Discovery Keil编程/ST-LINK通信问题的实操方案
兄弟,我之前折腾STM32的时候也踩过几乎一模一样的坑,结合你描述的情况,给你几个针对性的排查和解决步骤,亲测能解决大部分这类问题:
先确认ST-LINK硬件状态与连接
虽然你说STM32 ST-LINK_Utility能识别设备,但还是得把基础检查做扎实:- 看看开发板上的
SWD/JTAG跳线有没有拨对(F4Discovery默认是SWD模式,要是不小心切到JTAG模式,Keil大概率会出问题) - 换一根靠谱的USB线,插电脑的USB2.0接口(USB3.0的兼容性有时候真的拉胯,尤其是老开发板)
- 观察开发板上的ST-LINK指示灯:正常识别后应该是稳定亮或规律闪烁,如果灯完全不亮,可能是ST-LINK的供电或硬件本身出了小问题
- 看看开发板上的
修复Keil的ST-LINK DLL版本冲突
你手动添加ST-LINKIII-KEIL.DLL后出现通信错误,大概率是版本不匹配导致的,别自己随便复制文件,按下面步骤来:- 先把你手动放的
ST-LINKIII-KEIL.DLL删掉,避免版本冲突 - 打开Keil,进入
Project -> Options for Target -> Debug,选中ST-Link Debugger后点击右侧的Settings - 在弹出的窗口切换到
ST-LINK标签页,点击Update ST-LINK Firmware,跟着提示完成固件更新——这一步Keil会自动匹配对应版本的DLL文件,比你手动复制靠谱多了 - 如果更新固件时提示找不到设备,就用STM32 ST-LINK_Utility来更:打开Utility连接设备后,点击
ST-LINK -> Firmware Update
- 先把你手动放的
重新配置Keil的编程与Debug参数
清除闪存后,Keil的旧配置可能失效,重新走一遍配置流程:- 进入
Options for Target -> Debug -> Settings,确认Port选的是SW(对应SWD模式),Reset Mode选Connect under reset或者Hardware reset(别选Software reset,清闪存后软复位基本没用) - 切换到
Flash Download标签页,点击Add选择你的STM32F4型号对应的Flash算法,勾选Erase Full Chip、Program、Verify,再点击Settings把编程速度调低一点(比如选Low Speed) - 先点击
Erase手动擦除整颗芯片,再点击Program烧录程序,之后再尝试Debug
- 进入
排查系统驱动与权限问题
驱动配置好也可能出幺蛾子,再检查一遍:- 打开设备管理器,找到
STMicroelectronics ST-LINK设备,右键选择更新驱动程序,选“浏览计算机以查找驱动程序软件”,指向Keil安装目录下的ARM\STLink\USBDriver文件夹,重新安装驱动 - 右键以管理员身份运行Keil,Windows的权限限制有时候会悄悄拦截ST-LINK的USB通信
- 暂时关闭杀毒软件或防火墙,有些安全软件会误判ST-LINK的通信为可疑操作
- 打开设备管理器,找到
终极方案:重置ST-LINK到出厂状态
如果上面的步骤都没用,试试硬重置ST-LINK:- 按住开发板上的
RESET按钮不松手,同时插拔USB线连接电脑 - 松开
RESET按钮,打开STM32 ST-LINK_Utility,点击Connect后执行Full Chip Erase - 回到Keil重新配置参数,再尝试烧录和Debug
- 按住开发板上的
内容的提问来源于stack exchange,提问作者user9652118




