CubeMX生成的代码烧录一次后无法再烧录(识别)STM32,需按住reset后放开才能烧录

注:CSDN真的很可笑,前几年发的文章在我没有设置的情况下突然有了VIP文章的标识,在手机没有登陆的网页版上没办法看全文。这难看的吃相让我很恼怒且违背了我写这些的初心,如果你在看这篇博客的时候遇到了任何收费项目,你可以进入我的个人博客查看

序言

其实很早就遇见过这个问题,但因为这个问题太小太基础了,就没有做记录。但是过了很久过后再重新回来用CubeMX做STM32开发的时候却总是记不住这点小设置,所以又回来写一下这个。

这个小问题会在不同的软件里引发各式各样不同的报错。大家很多时候都喜欢直接把报错说明拿去百度。本来为了大家检索方便应该把报错都放在这里,但作者也懒,懒得去把每个说明说明复制粘贴到这里,但是如果大家遇到了可以私发给作者,我加在这个后面

一、问题出现的环境

使用CubeMX自动生成HAL库的代码,System Core->SYS->Debug选择的是No Debug

在默认情况下这个选项的选择就是No Debug

二、原因分析

这个设置会导致在生成的stm32f1xx_hal_msp.c文件下的出现以下代码

__HAL_AFIO_REMAP_SWJ_DISABLE();

而这段代码表示禁用JTAG-DP和SW-DP(JTAG-DP和SW-DP是什么这里就不做过多说明了,自行百度)

其实CubeMX生成的注释就有明确的说明,只是一般没事不会去看它而已

三、问题解决

方法一

有以上的分析解决方法也很明显了,改一下System Core->SYS->Debug选择就行。(SWD的话在这里的选择是Serial Wire或者Trace Asynchronous Sw)(代码一样的,详见下文)

这后面四个选项分别会生成以下四种代码,具体是什么注释说得很清晰了,就直接复制粘贴官方注释了

__HAL_AFIO_REMAP_SWJ_NOJTAG();
/*Serial Wire*//** NOJTAG: JTAG-DP Disabled and SW-DP Enabled*/

__HAL_AFIO_REMAP_SWJ_NONJTRST();
/*JTAG(4 pins)*//** NONJTRST: Full SWJ (JTAG-DP + SW-DP) but without NJTRST*/

__HAL_AFIO_REMAP_SWJ_ENABLE();
/*JTAG(5 pins)*//** ENABLE: Full SWJ (JTAG-DP + SW-DP): Reset State*/

__HAL_AFIO_REMAP_SWJ_NOJTAG();
/*Trace Asynchronous Sw*//** NOJTAG: JTAG-DP Disabled and SW-DP Enabled*/

方法二

改设置可以,直接修改stm32f1xx_hal_msp.c下的这段代码也行,注意下次生成的时候可能被覆盖的问题就行了。

四、再次烧录

相信你都来看这个博客了那肯定是遇到了难烧录或者无法烧录的问题了。在这种情况下的烧录比较麻烦,需要有reset按钮或者自行短接

首先需要按住reset按钮再点下载,让其能识别到你的芯片,然后在马上要烧录程序的时候松开reset就行了。需要精准的把控松开的时间,基本上靠感觉是开始1s左右松开,很玄妙,自行把握一下。

  • 10
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

穹之韵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值