STM32下載顯示target dll has been cancelled
使用MDK 4.74向STM32下載時出現(xiàn)各種錯誤,而且時隱時現(xiàn),
Internal command error.Error:Flash download failed. Target DLL has been cancelled.
最初的解決方法就是讓STM32不采用外部供電而是讓下載器直接供電,同時將BOOT0上拉(BOOT0上拉使從RAM啟動)。這樣以上各種問題就順利解決了。
或者是BOOT0拉低(BOOT0下拉從FLASH啟動),點擊KEIL的DOWNLOAD前先按下板子上的復(fù)位鍵不放,然后點擊DOWNLOAD,點擊完畢后迅速抬起復(fù)位鍵(也就是在STM32從FLASH啟動初始化完畢前就燒錄),之后程序就燒錄進去了。
查看用戶手冊和底層代碼,最終找到了下載出錯的原因,原因就在于使用庫函數(shù)或者Cube MX對端口初始化時如不特別指定會默認(rèn)將SWCLK和SWDIO對應(yīng)的端口釋放為普通IO口,這樣再次下載時就無法使用這兩個端口的SW-DP功能,也就會產(chǎn)生各種錯誤。
解決方法是:
如果使用的是那個3.5版的庫函數(shù)進行初始化,就在全部初始化函數(shù)的最后加上一句AFIO->MAPR |= 1<<25;?;蛘哂脦炖锏恼Z句單獨啟用SW-DP對應(yīng)端口的端口復(fù)用功能并配置為SWCLK和SWDIO。
如果使用Cube MX,則在Pinout頁中將如圖所示對應(yīng)端口設(shè)定為SWCLK和SWDIO或者將Serial-WireDebug打勾,這樣生成的初始化代碼會將這兩個端口初始化為SW-DP功能。