报错 No Device Found
解决方法:
1️⃣ 配置一下工程
将 Debug
模式设为 Serial Wire
,然后保存并重新生成代码

2️⃣ 将 BOOT0 跳线帽改到 H
跳线帽可以垂直拔出。拔出后向左平移一个针脚,插到 H 与 0 之间(如图)

3️⃣ 按一下复位键
注意
跳线帽先不要换回 L

4️⃣ 现在就能下载程序了~
注意
跳线帽先不要换回 L

5️⃣ 现在将跳线帽换回 L,按复位键,程序即可正常运行
注意
重要!不要跳过这步,否则程序不运行

6️⃣ 以后每次都要这样吗?
-
不需要
-
为避免以后再次出现该问题,所有新建工程,都先将
Debug
模式设为Serial Wire
为什么会出现这个问题?
当没有配置 Debug 接口为 Serial Wire 时,HAL库会认为不需要下载接口
因此在生成初始化代码时,可能出现这一行:
__HAL_AFIO_REMAP_SWJ_DISABLE(); // 关闭SWD、JTAG接口
这行代码关闭了芯片的 SWD 接口,导致下载失败
为什么以前没有出现这个问题?
这行代码是跟着 串口、I²C 等初始化代码一起生成的
以前的工程可能没有用到,所以并没有生成这行代码
而当用到例如 串口、I²C 等功能时,HAL库需要初始化 AFIO 时,就会生成这行代码
只有学习板存在这个问题吗?
不是的,所有 STM32F103 芯片都会遇到此问题
这个问题是 HAL 库的特性所导致的,原理如前文所述
怎么避免这个问题?
在每次新建工程后,就配置 Debug
模式设为 Serial Wire