STM32 SWD 只能下载一次的问题

市面常见的STM32核心板有很多,以STM32F103c8t6核心板为例,实物如下图:

在核心板的使用过程中,常见的问题是只能通过swd方式下载1次程序,第2次便会报错,提示找不到处理器。

我们举个实际工程的例子:

使用STM32CubeMX软件,生成Blink闪灯工程,即在Cube中设置PC13为GPIO-output,

使用keil5打开工程,在main函数的while(1)中添加如下代码

/* USER CODE END WHILE */
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
HAL_Delay(100);
/* USER CODE BEGIN 3 */

编译,修改Debug选项为“Jlink”,设置中修改为SWD下载模式。

下载程序,可以成功,可再次下载时,却发现提示无法连接芯片,下载失败。

简单的解决办法是:

  1. 调整BOOT0/1,使用串口ISP全片擦除,再恢复BOOT,重新上电即可下载;
  2. 调整BOOT0/1,按Reset,使用SWD下载,还原BOOT0/1;
  3. 有些板子也可以通过持续按住reset键实现下载。

但上述并不是我们想要的。

具体是哪里出了问题呢?

真正的解决办法是:

在使用STM32CubeMX生成项目工程时,需要关注一项系统配置,设置好Debug模式,具体如下:

此时可以看到,右侧的芯片GPIO预览图,增加了SWDIO和SWCLK的指示。

此时再用keil打开新生成的工程,即可无限次下载和Debug了。

有兴趣继续往后看

设置了SYS的Debug模式为Serial Wire模式,到底产生了哪些不同呢?

实际对比,我们发现共有两处:

  1. main.c文件的static void MX_GPIO_Init(void)函数中,增加了__HAL_RCC_GPIOA_CLK_ENABLE();这里很好理解,因为SWD下载方式用的引脚是PA13和PA14
  2. stm32f1xx_hal_msp.c文件的大概第77行左右,没有打开“Serial Wire”时,该行是__HAL_AFIO_REMAP_SWJ_DISABLE();,打开了“Serial Wire”是,该行是__HAL_AFIO_REMAP_SWJ_NOJTAG();

综上所述,完全可以再不用重新配置CubeMX的情况下,通过修改上述两处代码,解决只能下载一次的问题。

STM32 SWD 只能下载一次的问题相关推荐

  1. swd只能下载一次第二次出现错误

    现象描述使用swd下载一次后再次下载就校验出错 必须使用串口再次清空后又能下载一次,之后再次出错. 解决方法: 发现是从别的工程赋值过来的工程模板.在 修改上图中绿色部分,修改为下图配置 原因分析: ...

  2. STM32 SWD下载口无法下载的原因和解决办法

    1.SWD的下载口在程序中被禁用,IO口被设置为普通IO口 2.芯片被锁,原因有可能是程序执行了不正确的访问导致芯片被锁 3.供电不正常 4.SWD烧了 解锁原因: 在下载程序的时候有时候会发生错误导 ...

  3. stm32 ISP串口下载

    1 ISP概念         ISP(In-System Programming) 在系统可编程,指电路板上的空白器件可以编程写入最终用户代码, 而不需要从电路板上取下器件,已经编程的器件也可以用 ...

  4. 【STM32】程序下载(串口方式)

    00. 目录 文章目录 00. 目录 01. 概述 02. STM32F4开发板设置 03. 串口下载程序步骤 04. 附录 05. 声明 01. 概述 STM32F4 的程序下载有多种方法:USB. ...

  5. Jlink或者stlink用于SWD接口下载程序

    最近要使用stm32f103c8t6最小系统板,直接ISP串口下载程序太麻烦,就想着使用swd接口来调试. 结果:通过SWD接口下载程序成功,但调试失败,还不知原因,会的的人麻烦交流一下. SWD接口 ...

  6. STM32使用Jlink下载出现NO cortex-M SW device Found解决(超详细)

    STM32使用Jlink下载出现NO cortex-M SW device Found解决 之前都是使用ST-link进行STM32的程序下载,最近手里有一个jlink.所以想用jlink试一试. 我 ...

  7. 学习笔记三(STM32串口程序下载新建工程模板)

    STM32串口程序下载 STM32F4 的程序下载有多种方法:USB.串口.JTAG.SWD 等,这几种方式,都可以用来给STM32F4下载代码. 利用串口给STM32下载程序 STM32 的串口下载 ...

  8. linux ftp匿名只能下载,04. 创建匿名用户能够上传下载,或只能下载的目录

    Re:FTP 文件传输服务 ========================== FTP 服务不论在企业或教学中,是很常用的文件共享方式,它既可以做到匿名访问,也可以做到用户名和密码访问,更可以做到只 ...

  9. A_A03_005 STM32程序J-LINK下载

    一.软件下载 网盘链接    戳它跳转 提取码:7fvz 二.相关链接 J-LINK驱动安装       戳它跳转 MDK5下载与安装   戳它跳转 三.交流学习 安装过程如有疑问,可留言或者私聊交流 ...

最新文章

  1. 【转】解决 java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I 问题
  2. 拦截器获取请求参数post_「SpringBoot WEB 系列」RestTemplate 之自定义请求头
  3. android中使用DisplayMetrics获取屏幕参数
  4. node.js中对 mysql 进行增删改查等操作和async,await处理
  5. UVA dp题目汇总
  6. 如何配置IIS日志信息
  7. jeecg导出Excel
  8. jquery实现html表格隔行变色
  9. 华为服务器磁盘IO性能查看,磁盘io性能
  10. 【公众号】怎样写好公众号第一篇文章?
  11. 这个冬季,你抑郁吗?
  12. 网页第三方追踪原理——如何通过1像素的图片追踪
  13. 华为鸿蒙系统有没有畅玩7c,华为荣耀畅玩7C有什么新功能
  14. [rust学习笔记]错误处理
  15. 【Unity3D】Tank大战
  16. Consul小贴士-记一次Consul注册failing状态跟踪
  17. uni-app小程序分享
  18. pycharm中配置华为云服务器
  19. 浅谈“全栈工程师需要掌握哪些技能”
  20. 局域网如何共享文件?计算机1通过ip访问计算机2,拿取共享文件。

热门文章

  1. python 针对二分类问题画roc曲线
  2. 拥有微软Windows CE的实时系统
  3. 大数据相加_c 大数据相加 class
  4. 基于jupyter notebook的简单爬虫学习记录
  5. 黑客30秒攻破苹果iOS系统夺得大赛冠军
  6. C++ Primer Plus(第六版)第四章编程练习参考答案
  7. 玩转华为数据中心交换机系列 | 汇总
  8. html将页面分成四部分,将HTML页面拆分为定义的宽度和高度部分
  9. 在LInux系统上安装ImageMagick
  10. Java高级——OutOfMemoryError和StackOverflowError