【STM32】使用Keil5加载程序时出现No Target Connected错误的解决办法

错误情况

加载程序时弹出No target connected的Error框,随后弹出Flash download failed - Target DLL has been cancelled。

此时打开设置中Debug选项的Setting窗口,显示SWDIO中No target connected

解决办法

  1. 检查设置里的Debug选项里的调试器型号有没有选对,如下图所示,我用的是ST-Link的调试器。

  1. 检查调试器设备连线有没有损坏或者接触不良。

  2. 在别人的设备上调试观察确定是否为硬件问题。

  3. 以上都没问题,可能是某个调试相关的引脚被禁用,需要按住开发板上的Reset按钮不放,在点击LOAD键后约1秒左右的时间松开Reset键,观察程序是否成功加载。如果出现了internal command error的弹窗,可能是Reset键在LOAD键点击前松开了或松开太快,可多尝试几次。

恢复正常后在设置的Debug的调试器Setting界面中,SWDIO应正常显示连接的设备,如图即解决

后续——问题出现原因

后面研究了一下,明白了为何会这样,由于笔者运行了一个含有stm32f1xx_hal_msp.c库函数的程序,这个库函数中的void HAL_MspInit(void)会关闭SWJ功能。如下所示

void HAL_MspInit(void)
{
  /* USER CODE BEGIN MspInit 0 */

  /* USER CODE END MspInit 0 */

  __HAL_RCC_AFIO_CLK_ENABLE();
  __HAL_RCC_PWR_CLK_ENABLE();

  /* System interrupt init*/

  /** DISABLE: JTAG-DP Disabled and SW-DP Disabled
  */
  __HAL_AFIO_REMAP_SWJ_DISABLE();	//就是这一行关闭了调试功能

  /* USER CODE BEGIN MspInit 1 */

  /* USER CODE END MspInit 1 */
}

有个帖子遇到了和我一样的问题,里面的介绍和解决方案更加详细,感兴趣的朋友可以看看:点击进入指路链接

posted @ 2024-03-01 12:22  探索Embedded宇宙  阅读(1695)  评论(0编辑  收藏  举报