【STM32】使用Keil5載入程式時出現No Target Connected錯誤的解決辦法

探索Embedded宇宙發表於2024-03-01

錯誤情況

載入程式時彈出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 */
}

有個帖子遇到了和我一樣的問題,裡面的介紹和解決方案更加詳細,感興趣的朋友可以看看:點選進入指路連結

相關文章