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按钮,让单片机处于复位状态,是可以下载的,于是又把以前正在使用的程序下载其中,没有发现类似的问题,然后孔丙火(微信公众号:孔丙火)开始怀疑是代码的问题。

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

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

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

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

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

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


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

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

你可能感兴趣的:(单片机)