STM32下载显示target dll has been cancelled解决方法

标签:
targetdllhasbeencancstm32下载错误mdkcancelledkeil无法下载 |
分类: 技术 |
使用MDK
4.74向STM32下载时出现各种错误,而且时隐时现,
如
Internal command
error.Error:Flash download failed. Target DLL has been
cancelled.
或者
Target not
detected.
再或者
Cannot load flash programming algorithm!
Error:Flash Download failed - "Cortex-M3"等等。
所用的下载器是那种20元U盘大小的ST-LINK
V2。网上搜索,发现遇到这种情况的不在少数。
最初的解决方法就是让STM32不采用外部供电而是让下载器直接供电,同时将BOOT0上拉(BOOT0上拉使从RAM启动)。这样以上各种问题就顺利解决了。
或者是BOOT0拉低(BOOT0下拉从FLASH启动),点击KEIL的DOWNLOAD前先按下板子上的复位键不放,然后点击DOWNLOAD,点击完毕后迅速抬起复位键(也就是在STM32从FLASH启动初始化完毕前就烧录),之后程序就烧录进去了。
但是上面这些方法都不治本。
查看用户手册和底层代码,最终找到了下载出错的原因,原因就在于使用库函数或者Cube
MX对端口初始化时如不特别指定会默认将SWCLK和SWDIO对应的端口释放为普通IO口,这样再次下载时就无法使用这两个端口的SW-DP功能,也就会产生各种错误。
解决方法是:
如果使用的是那个3.5版的库函数进行初始化,就在全部初始化函数的最后加上一句AFIO->MAPR
|=
1<<25;(寄存器名和控制位可能会因型号不同而不同,详见对应使用手册)。或者用库里的语句单独启用SW-DP对应端口的端口复用功能并配置为SWCLK和SWDIO。
如果使用Cube
MX,则在Pinout页中将如图所示对应端口设定为SWCLK和SWDIO或者将Serial-WireDebug打勾,这样生成的初始化代码会将这两个端口初始化为SW-DP功能。
http://s9/mw690/0063RJjSzy70Cd4flNK08&690dll has been cancelled解决方法" TITLE="STM32下载显示target dll has been cancelled解决方法" />
如此,不用再进行复杂的外部操作就可以正常的烧录程序了,这种感觉真是久违的爽快。
同时以上问题也与版本问题无关。MDK
4.74完全可以识别ST-LINK V2。
Copyright
(c)2015-2018 小浣熊哈哈. All rights
reserved.