STM32突然不能下载,或者说只能BOOT0置高才能下载调试记

昨天调试新项目时出现如此一个现象。

项目是在MDK上新建的,主要基于FreeRTOS平台,而RTOS文件是用MDK自有包。
在这里插入图片描述
我也比较喜欢这种,不必自己还要外挂FreeRTOS文件。简化不少工程目录。
因为FreeRTOS我之前没怎么接触过(只接触过rt_thread),不是太熟悉配置过程,不过好在网络对此有许多教程,如这篇连载就很详细:FreeRTOS基础篇教程目录汇总
按着其介绍,完成了系统配置。然后就是编写自己的代码。
后来不知调试着,突然不能下载了,起初以为是ST_LINK V2烧坏了,就是这玩意儿。主要是这个烧录器确实容易坏,以前在前公司经常用这个,有时候不明由的就挂了,虽说易坏,但是一是价格便宜,而是便携简单,三是还是用习惯了,之前尝试用过DAP或者ARM调试器,但还是觉得太大,线缆长等原因,就没再继续用了。

ST LINK V2
后来我尝试换了个新的,还是不能下载,就怀疑可能MCU烧毁了,因为有电机驱动,用示波器看有很大的干扰波,后来找了一块新版也是不能下载,就还是回来怀疑ST LINK坏了。
突然看到手边有一个STM32F103R8的小开发板,开发板
于是吧工程改了下(原来是RB芯片),用它烧录,发现可以下载了,不过我断电后,再连着下载,发现又不能下载了,没有识别到目标MCU.
我开始也以为是SWD引脚被无意中覆盖禁用了,但是查了代码,压根就没有用到那两根引脚,包括JTAG的引脚。只好下载FlyMCU采用ISP串口下载了。使用开发板测试,主要是BOOT好配置(跳帽就行),下载后,再烧录原来的代码,再次可以下载,不过也不能二次下载,会依旧不能识别目标。这样我只好不所有的外设及task屏蔽了,仅保留RTOS空壳,下载后依旧不行。我更让我纳闷了,突然我想到之前调试时,又发现跳到 RTOS中的port.c文件中的_wfi()语句附近。
在这里插入图片描述
我怀疑可能MCU进入休眠了,不能被唤醒导致不能下载,但是我又没有配置STM32的WFI等休眠指令啊,我就开始查找FreeRTOS休眠配置的信息。在这里插入图片描述
查到是这个配置引起的,修改之后,果然就可以断电不断下载了。不过调试时会后这个问题

卡在prvCheckTasksWaitingTermination语句。
于是再次网上查找相关问题,最后在一篇同现象中摸索到问题,
FreeRTOS卡在prvCheckTasksWaitingTermination
回复
想到自己用到了滴答延时函数:
在这里插入图片描述

对就是这个:
在这里插入图片描述
于是换掉用for阻塞延时函数,至此问题现象问题完全解决。
后来想了想为什么我没有配置WFI指令,怎么RTOS系统会依旧休眠呢,我想因为我现在是用MDK自带用于STM32的RTOS包,相关的框架应该融入了STM32的一些特性指令。如RTOS要实现低功耗的功能,所以有最开始的那条宏配置。

哦,忘了说标题的那个现象,这个是在解决这个问题中时候碰到的现象,
如此老哥所描述:

为什么SWD烧录STM32时BOOT0脚要接高电平,否则SWD下载失败

BOOT0/BOOT1引脚作用
在这里插入图片描述
不过加深了解了BOOT0引脚的作用,以前出现休眠的问题,我都是将复位电容在点击下载的前一刻短路然后释放进行下载,现在则不需要了,
直接将boot0短路到3.3V高电平,就可以下载,然后再断开重启就行。

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值