错误情况
加载程序时弹出No target connected的Error框,随后弹出Flash download failed - Target DLL has been cancelled。
此时打开设置中Debug选项的Setting窗口,显示SWDIO中No target connected
解决办法
- 检查设置里的Debug选项里的调试器型号有没有选对,如下图所示,我用的是ST-Link的调试器。
-
检查调试器设备连线有没有损坏或者接触不良。
-
在别人的设备上调试观察确定是否为硬件问题。
-
以上都没问题,可能是某个调试相关的引脚被禁用,需要按住开发板上的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 */
}
有个帖子遇到了和我一样的问题,里面的介绍和解决方案更加详细,感兴趣的朋友可以看看:点击进入指路链接
标签:HAL,Target,No,void,MspInit,STM32,USER,调试器 From: https://www.cnblogs.com/ExploreTheEmbeddedUniverse/p/18046706