​ 暴雨天,突感一阵寒意,喝了口快乐水,大脑愈发精神,于是又敲起键盘,打下些令正人君子深恶痛绝的文字。


在cubeMX中No Debug导致的工程不能重复烧入的解决办法

​ 试烧了一个点亮led的程序后,再次烧入就行不通了,无论怎么检查,通电,设置都没问题,而仿真器无法连接,无法下载。

显示:Error: Flash Download failed - Target DLL has been cancelled

​ 板子似乎和废铁一样了(悲

查找资料后知道了问题所在

  • stm32一共有三种启动模式,对应的储存介质是芯片内置的,他们是:

    1.用户闪存 = 芯片内置的Flash。

    2.SRAM = 芯片内置的RAM区,就是内存啦。

    3.系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。

    这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。

    在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序,见下表:

    BOOT1=x BOOT0=0 从用户闪存启动,这是正常的工作模式。

    BOOT1=0 BOOT0=1 从系统存储器启动,这种模式启动的程序功能由厂家设置。

    BOOT1=1 BOOT0=1 从内置SRAM启动,这种模式可以用于调试。

    一般BOOT0和BOOT1跳线都跳到0(地)

  • 下载出错的原因就在于使用库函数或者Cube MX对端口初始化时如不特别指定会默认将SWCLK和SWDIO对应的端口释放为普通IO口,这样再次下载时就无法使用这两个端口的SW-DP功能,也就会产生各种错误

解决办法:

(1)把启动模式改成RAM启动,就是BOOT1BOOT0都接高,再在keil中下载,这时是成功的。

(2)把启动模式改回去,再下载(这时的代码应该是在MX中Debug打开的),就可以了。