ST Link设备连接正常,但是keil中找不到已连接的设备

本文解决STM32F429使用STLink通过Keil for ARM编程时遇到的No target connected及Flash Download failed错误。问题源于程序占用PA13和PA14引脚,导致下载失败。通过修改程序避免使用这些引脚并使用STM32ST-LINKUtility擦除原有程序,最终成功恢复下载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

报错

No  target   connected

Error:  Flash  Download   failed   -  Target  DLL   has  been   cancelled

Connection   to   device   is   lost:   check  power  supply  and   debug   connection.

If   the  target  is  in  low  power  mode,  please   enable  "Debug  in  Low  Power Mode"  option  from  Target->settings  menu.

 

背景:

使用STM32F429,STlink下载程序,keil for  arm进行编程,原本一切正常,下载了一次程序之后,在keil中再也找不到设备,但是STLink显示驱动、连接等一切都正常,使用STM32 ST-LINK Utility工具也能正常连接,但同样的程序还是下载不进去,如下列图所示:

keil中显示没有设备连接

 查看计算机设备管理器中,确定STLink驱动和连接没问题:

计算机设备管理中显示STLink连接正常

点击下载程序时就会出现下面的报错: 

                  

使用 STM32 ST-LINK Utility工具(ST-Link Utility点击下载),可以正常连接,可以擦除存储器的内容,但是一下载当前的程序bin文件,就会出现各种报错:

 

问题原因:

在各种网上查找之后,发现有网友说到下载口的引脚是PA13和PA14,突然想起我的当前程序,为了方便,随便用了两个引脚,就是PA13和PA14,于是赶紧查看芯片手册,并且修改程序,将PA13和PA14引脚换成了别的引脚,如下图:

解决方法:

因为keil不能下载程序了,芯片中因为之前下过一次当前程序之后才不能再下载程序的,所以一上电就在跑当前的程序,所以先使用STM32 ST-LINK Utility工具将之前芯片中的程序擦除:

关闭STM32 ST-LINK Utility工具,然后再打开keil,查看,就发现找到了已连接的设备,如下:

问题解决!

 

 

 

 

<think>我们正在处理用户的问题:Keil MDK-5无法识别ST-LINK下载器。根据引用[3]中的内容,我们可以到一些解决方法。 引用[3]提到: 1. 如果没有选择debug项,默认是no debug,在烧录完第一次之后就会变得无法烧录。 2. 如果已经生成工程了,可以通过修改特定部分代码即可。stm32f1xx_hal_msp.c文件中的HAL_MspInit()函数中的__HAL_AFIO_REMAP_SWJ_DISABLE宏,根据需要修改即可。 3. 如果已经出现debug无效,可以通过按住复位键之后点击download再松开复位键修复。 4. 具体烧录步骤: (1) 确定单片机板上电,并且长按板子的复位按键不动 (2) 打开keil,在setting里面可以看到已经识别 (3) 点击下载后,立刻松掉复位按键,可以看到已经下载成功 (4) 后面setting里面,勾选Reset and Run,就可以正常下载程序了 因此,我们可以按照以下步骤来解决: 步骤1:检查Keil中的Debug设置 - 在Keil中打开工程,点击“Options for Target” -> “Debug”选项卡。 - 确保选择了正确的调试器(ST-Link Debugger),而不是“No Debug”。 步骤2:检查代码中是否禁用了SWJ调试接口 - 如果使用STM32F1系列,检查工程中的`stm32f1xx_hal_msp.c`文件,到`HAL_MspInit`函数。 - 查是否有`__HAL_AFIO_REMAP_SWJ_DISABLE`宏,这个宏会禁用SWJ调试接口(包括JTAG和SWD)。 - 如果不需要禁用调试接口,请注释掉这行代码,或者修改为其他重映射方式(如`__HAL_AFIO_REMAP_SWJ_NOJTAG`,这样至少保留SWD功能)。 步骤3:使用复位按键进行紧急下载 - 如果上述步骤无效,可以尝试使用引用[3]中提到的复位按键方法: 1. 给单片机上电,并长按板子上的复位按键不放。 2. 在Keil中进入“Options for Target” -> “Debug” -> “Settings”,查看是否识别到ST-LINK。 3. 点击下载按钮(Download),然后立刻松开复位按键。这样程序应该能够下载进去。 步骤4:设置Reset and Run - 下载成功后,为了避免以后每次都要按复位键,可以在“Options for Target” -> “Debug” -> “Settings” -> “Flash Download”选项卡中,勾选“Reset and Run”。这样每次下载后会自动复位并运行。 步骤5:检查硬件连接 - 确保ST-LINK与目标板的连接正确(SWCLK、SWDIO、GND、VCC(如果目标板供电则不需要接VCC))。 - 检查ST-LINK驱动是否安装正确。可以在设备管理器中查看是否有“STMicroelectronics ST-LINK dongle”设备。 步骤6:更新ST-LINK固件 - 如果ST-LINK固件过旧,也可能导致无法识别。可以使用ST官方提供的ST-LINK固件升级工具进行升级。 步骤7:检查Keil中的Pack支持 - 确保已经安装了对应芯片的Device Family Pack(DFP)。可以通过菜单“Pack Installer”来安装。 根据引用[2]中的内容,Keil的Run-Time Environment(RTE)中包含了必要的组件,如CMSIS,确保这些组件已经正确安装。 如果以上步骤都不能解决问题,可能需要检查ST-LINK是否损坏,或者尝试更换一个ST-LINK。 下面我们按照步骤详细说明: 1. **Debug设置**: 打开工程,点击魔术棒图标(Options for Target)-> Debug -> 选择Use: ST-Link Debugger -> 点击Settings。 在Settings中,查看Port是否选择为SW。如果连接正常,应该能看到设备ID(如果不正常则显示0x00000000或空白)。 如果这里无法识别,则进行硬件检查。 2. **代码修改**(针对STM32F1): 在`stm32f1xx_hal_msp.c`文件中,到`HAL_MspInit`函数,检查是否有以下代码: __HAL_AFIO_REMAP_SWJ_DISABLE(); 如果有,将其注释掉,或者改为: __HAL_AFIO_REMAP_SWJ_NOJTAG(); // 这样会禁用JTAG但保留SWD,通常这样不影响SWD下载 然后重新编译下载。 3. **复位按键下载法**(当无法识别时): 按引用[3]的方法操作。 4. **勾选Reset and Run**: 在Options for Target -> Debug -> Settings -> Flash Download,勾选“Reset and Run”,这样每次下载后自动复位,避免需要手动复位。 5. **硬件连接**: 确保连接线正确且接触良好。ST-LINK的SWD接口一般需要连接4根线:VCC(可选,如果目标板有电可不接)、GND、SWDIO、SWCLK。 6. **更新ST-LINK固件**: 从ST官网下载ST-LINK Utility软件,里面包含固件升级工具。连接ST-LINK,运行固件升级。 7. **安装Pack**: 在Keil的菜单中点击Pack Installer(一个立方体图标),检查是否安装了对应芯片的Pack。如果没有,安装它。 如果问题仍然存在,可能需要考虑ST-LINK本身的问题,或者更换USB接口/数据线。 注意:用户的问题中提到了Keil MDK-5,所以以上步骤都是基于Keil MDK-ARM V5版本。 最后,生成相关问题:</think>### Keil MDK-5 无法识别 ST-LINK 下载器的解决方法 #### 📌 核心步骤 1. **检查硬件连接** - 确保 ST-LINK 与目标板的接线正确(SWDIO、SWCLK、GND、VCC) - 使用万用表检测线路通断,避免接触不良 - 若目标板独立供电,需保证 ST-LINK 与目标板 **共地**(连接 GND 线) 2. **修改调试接口配置**(关键步骤) - 打开工程中的 `stm32f1xx_hal_msp.c` 文件(以 STM32F1 为例) - 在 `HAL_MspInit()` 函数中到以下宏: ```c __HAL_AFIO_REMAP_SWJ_DISABLE(); // 此配置会禁用调试接口 ``` - 修改为(保留 SWD 功能): ```c __HAL_AFIO_REMAP_SWJ_NOJTAG(); // 禁用 JTAG 但保留 SWD ``` - 重新编译并烧录程序[^3] 3. **Keil 软件设置** - 打开工程配置:`Options for Target` → `Debug` 选项卡 - 选择调试器:`Use: ST-Link Debugger` - 点击 `Settings` → `Flash Download` 选项卡 - 勾选 `Reset and Run`(下载后自动复位) - 确认 `Programming Algorithm` 匹配目标芯片型号 4. **紧急恢复下载模式**(当完全无法识别时) 1. 目标板断电后重新上电 2. **长按目标板复位键不松开** 3. 在 Keil 中点击 `Download` 按钮 4. 立即松开复位键,等待烧录完成(约 1-3 秒)[^3] 5. **驱动与固件更新** - 安装最新 [ST-LINK 驱动程序](https://www.st.com/en/development-tools/stsw-link009.html) - 使用 [ST-LINK Utility](https://www.st.com/en/development-tools/stsw-link004.html) 升级 ST-LINK 固件 #### 🔧 进阶排查 - **设备管理器检查**: - 在 Windows 设备管理器中查看 `通用串行总线设备` → 确认 `STMicroelectronics STLink dongle` 无黄色感叹号 - **更换 USB 接口**: - 优先使用主板原生 USB 接口(避免通过扩展坞) - **Keil 组件更新**: - 通过菜单 `Project → Manage → Run-Time Environment` 安装最新 CMSIS 和芯片支持包[^2] #### 💡 预防措施 1. 新建工程时,在 `Debug` 选项卡中务必选择调试器(勿用默认 `No Debug`) 2. 避免在代码中禁用 SWD 接口(如 `__HAL_AFIO_REMAP_SWJ_DISABLE()`) 3. 定期使用 ST-LINK Utility 维护固件 > ⚠️ 若仍无法解决,可能是 ST-LINK 硬件故障,建议更换下载器测试。 --- ### 🔍 相关问题 1. **如何验证 ST-LINK 硬件是否正常工作?** 2. **Keil MDK 中如何配置 STM32CubeMX 生成的工程?** 3. **SWD 和 JTAG 调试接口有何区别?哪种更适合 STM32 开发?** [^1]: Keil MDK 安装需以管理员身份运行安装程序 [^2]: Run-Time Environment (RTE) 组件状态说明(绿色/黄色/红色标识含义) [^3]: ST-LINK 无法识别的紧急恢复操作(复位键配合下载
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值