錯誤情況
載入程式時彈出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 */
}
有個帖子遇到了和我一樣的問題,裡面的介紹和解決方案更加詳細,感興趣的朋友可以看看:點選進入指路連結