前言
最近一次烧写程序到开发板上时,发现报错:Error:Not a genuine ST Device! Abort connection.Error: Flash Download failed - Target DLL has been cancelled.
上网查了一些资料,走了一些弯路,下面介绍一下我总结的资料。
提示:着急的同学可以直接看第二部分——晶振不匹配。
常见原因及解决措施
通过keil软件解决
方法一
点击魔术棒设置——debug——settings;
点击settings,进入,然后在connect中选择normal模式。
方法二
同方式一,进入settings;
不断降低Max Clock,找到合适的时钟。
方法三
该方式通过修改keil的安装目录文件完成,参考博主文章:https://blog.csdn.net/Davidietop/article/details/109366506?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-2&spm=1001.2101.3001.4242
晶振不匹配
原因是HSE时钟与外部晶振时钟配置不匹配。
我是使用STM32cubeMX进行固件库学习的,在设置时钟树时,HSE时钟设置的是8.00MHZ,但开发板上的不是。这也是我出现报错的原因。
解决方式主要有两种(摘自网络):
一、卸载外置晶振,使用内部时钟工作,重新烧写代码(修改好HSE的设置部分),重新焊接外置晶振,即可正常工作
二、设置BOOT0上拉到VDD(3.3V),重新烧写代码(修改好HSE的设置部分),重新下拉BOOT0至GND,,即可正常工作。
个人认为方案二更容易操作,适用性较高。
STM32有三种启动方式,ISP下载就属于其中一种,这里使用SRAM启动,就是第二种方法。先将BOOT0上拉,即BOOT0 = 1,之后需要将BOOT0拉低,即BOOT0 = 0。
方法一
通过软件方式实现,前提是虽然报错但仍能正常下载程序。
我们通过GPIO给BOOT0上拉和下拉就行了,类似点亮LED灯。
方法二
通过硬件方式实现,因为我这里下载不了程序,所以我采用了外接电路方法。可以直接对开发板上的引脚进行操作,作为小白,怕烧坏600+的开发板,同时图个方便,使用面包板进行操作。
上拉电阻的选择,电阻不能太大,也不能太小,大概在1kΩ—10kΩ之间,我选择了4.7kΩ的金属膜电阻。粗略估计一下,4.7kΩ情况下,灌电流足够拉高BOOT0口的要求,通过在金属膜的耐受功率内。
3.3V引出,到面包板上的“+”口,连上电阻和BOOT0口即可。
同样,将BOOT0引脚接到GND上。
完成操作后,烧个简单程序测试,看到无报错,程序下载成功,RGB闪烁,问题就解决了。