CubeMx生成代码第一次下载后,SWD就找不到目标板了,就不能再次下载和调试了,原因查找,CubeMx,download,debug,HAL_MspInit()

摘要:用CubeMx建了一个过程,芯片为STM23F103C8T6,生成了代码,都没有问题,连接目标板,用孔丙火(微信公众号:孔丙火)新买的ST-link下载,没有问题,但第二次下载的时候,却显示找不到目标板了,于是怀疑新买的ST-link有问题,换了J-link,同样是找不到目标板,然后各种重新上电,还是没有解决,无意中发现按住reset按钮,让单片机处于复位状态,是可以下载的,于是又把以前正在使用的程序下载其中,没有发现类似的问题,然后开始怀疑是代码的问题。CubeMx,download,debug,HAL_MspInit(),__HAL_AFIO_REMAP_SWJ_DISABLE()。

用CubeMx建了一个过程,芯片为STM23F103C8T6,生成了代码,都没有问题,连接目标板,用孔丙火(微信公众号:孔丙火)新买的ST-link下载,没有问题,但第二次下载的时候,却显示找不到目标板了,如图1所示,于是怀疑新买的ST-link有问题,换了J-link,同样是找不到目标板,如图2所示,然后各种重新上电,还是没有解决,无意中发现按住reset按钮,让单片机处于复位状态,是可以下载的,于是又把以前正在使用的程序下载其中,没有发现类似的问题,然后孔丙火(微信公众号:孔丙火)开始怀疑是代码的问题。

图1
图2

在网上查找了相关信息,有一些朋友提供了有用信息,是因为HAL_MspInit()函数调用一个__HAL_AFIO_REMAP_SWJ_DISABLE()函数,把JTAG和SWD禁用了,但同为什么会这样呢。

孔丙火(微信公众号:孔丙火)开始从头查找,在CubeMx的工程中找到了问题,如图3所示,由于疏忽,忘了勾选Debug选项,于是STM32CubeMX默认你不用调试,就把JTAG和SWD禁用了,哎,一个不小心,害的查了半天,需要吸取教训啊。

图3

另外需要特别说明的是,我在测试的过程中,采用J-link的时候,按住复位按钮,点download,keil会提示CPU处于reset状态,然后松开复位按钮,再点download,就可以下载了,但采用J-link的时候,这种方法不可行,原因不得而知。碰到这种情况,其实可以用ISP将单片机内部的代码擦除,然后再下载正确的代码就可以了。

孔丙火(微信公众号:孔丙火)的一点小的教训分享,希望对大家有用。


文章在微信公众号同步推出,微信公众号:孔丙火,关注欣赏更多文章。

本订阅号致力于单片机、PLC、嵌入式软硬件的设计经验分享,秉承“点点滴滴皆智慧”的理念,一起分享,共同交流。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值