keil无法读取到jlink下载器,程序无法下载,报错No Cortex-M SW Device Found

1、如题,我用的芯片是STM32F103ZET6,日常的接上下载器进行程序下载,结果发现程序下载不进去,错误提示如下,一看就是Jlink没有连接上。
在这里插入图片描述
在这里插入图片描述

进去设置里面查看,确实没有看到Jlink读取到芯片的信息。
在这里插入图片描述
首先去设备管理器里面查看,驱动是有的
在这里插入图片描述
然后我用这个Jlink连上其他开发板,发现也可以读取到Jlink,程序也是可以下载进去的,控制变量法分析,唯一不同的就是我的板子有问题咯。在网上搜了下相关问题,有一个答案说边下载的时候边按下Reset按键,如下图。
在这里插入图片描述
我试了下,结果出现了新的提示和报错
在这里插入图片描述

在这里插入图片描述
真是一波未平一波又起,怎么办呢,继续查资料,发现又有说将boot0拉高,我的原理图里面是将boot0,boo1都通过10K电阻接地的,同时预留了一个调试电阻到VCC。
在这里插入图片描述
即将上图的R10去掉,焊接到R4的位置,哎呦,果然程序下载成功了,在设置里面也看到Jlink读取到芯片了。
在这里插入图片描述
然后将boot0拉低,即将电阻从R4换到R10,悲催的是程序又下载不进去了,Jlink又读不到芯片
在这里插入图片描述
问题到底出在哪里呢,百思不得其解,继续百度,最终看到了一个文章,然后我也查看我的板子,发现我把应该用8M的晶振用成了25M的。更换晶振后,问题解决。
在这里插入图片描述
PS:为什么需要将boot0拉高再拉低呢,网上这样的说明也挺多的,我再这里再记录一下。可以再STM32中文参考手册的33页,V2.4里面看到关于启动配置的描述,有以下三种。
在这里插入图片描述
主闪存存储器:正常工作就在这种模式下,也是用的最多的模式,STM32的FLASH可以擦出10万次
系统存储器:即我们常说的串口下载方式(ISP),不建议使用这种,速度比较慢。STM32 中自带的BootLoader就是在这种启动方式中,如果出现程序硬件错误的话可以切换BOOT0/1到该模式下重新烧写Flash即可恢复正常。
内置SRAM:是STM32内嵌的SRAM启动。该模式用于调试。

所以一般对boot0和boot1的配置都是通过10K电阻到地,记住一定要接下拉电阻,直接接到VCC和GND会工作异常。但是有时会遇到程序下载不进去或者Jlink和芯片连接不上的问题,有可能是下载程序的IO被占用了,到时程序下载不了,也有可能是SWD下载方式被禁用了等等。这个时候就需要将boot0拉高,重新烧写Flash,然后再将boot0拉低就能正常工作了。
但我这次的问题也算比较冷门,是晶振焊接错了,也算记录一下,避免日后再次犯错。

STM32中文参考手册百度云链接:
链接:https://pan.baidu.com/s/16qt9yJRJkeHlxUJE3cgdAA
提取码:bcvr


版权声明:本文为wsq_666原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。