加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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

(2015-10-07 18:54:55)
标签:

targetdllhasbeencanc

stm32下载错误

mdkcancelled

keil无法下载

分类: 技术
使用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. 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有