STM32之Not a genuine ST Device!解决方案

前言

最近一次烧写程序到开发板上时,发现报错:Error:Not a genuine ST Device! Abort connection.Error: Flash Download failed - Target DLL has been cancelled.
上网查了一些资料,走了一些弯路,下面介绍一下我总结的资料。


提示:着急的同学可以直接看第二部分——晶振不匹配。

常见原因及解决措施

通过keil软件解决

方法一

点击魔术棒设置——debug——settings;
STM32之Not a genuine ST Device!解决方案_第1张图片
点击settings,进入,然后在connect中选择normal模式。
STM32之Not a genuine ST Device!解决方案_第2张图片

方法二

同方式一,进入settings;
不断降低Max Clock,找到合适的时钟。
STM32之Not a genuine ST Device!解决方案_第3张图片

方法三

该方式通过修改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口即可。
STM32之Not a genuine ST Device!解决方案_第4张图片
同样,将BOOT0引脚接到GND上。
完成操作后,烧个简单程序测试,看到无报错,程序下载成功,RGB闪烁,问题就解决了。
STM32之Not a genuine ST Device!解决方案_第5张图片

你可能感兴趣的:(单片机)