错误:
使用keil MDK向STM32下载时出现各种错误
Internal command error.Error:Flash download failed. Target DLL has been cancelled.
原因分析:
使用库函数或者Cube MX对端口初始化时,如不特别指定会默认将SWCLK和SWDIO对应的端口释放为普通IO口,这样再次下载时就无法使用这两个端口的SW-DP功能,也就会产生各种错误。
解决方法:
方法一:
最初的解决方法就是让STM32不采用外部供电而是让下载器直接供电,同时将BOOT0上拉(BOOT0上拉使从RAM启动)。这样以上各种问题就顺利解决了。
方法二:
BOOT0拉低(BOOT0下拉从FLASH启动),点击KEIL的DOWNLOAD前先按下板子上的复位键不放,然后点击DOWNLOAD,点击完毕后迅速抬起复位键(也就是在STM32从FLASH启动初始化完毕前就烧录),之后程序就烧录进去了。
方法三:
如果使用的是那个3.5版的库函数进行初始化,就在全部初始化函数的最后加上一句 AFIO->MAPR |= 1<<25; 。或者用库里的语句单独启用SW-DP对应端口的端口复用功能并配置为SWCLK和SWDIO。
方法四:
如果使用Cube MX,则在Pinout页中将对应端口设定为SWCLK和SWDIO,或者将Serial-WireDebug打勾,这样生成的初始化代码会将这两个端口初始化为SW-DP功能。