摘要:用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按钮,让单片机处于复位状态,是可以下载的,于是又把以前正在使用的程序下载其中,没有发现类似的问题,然后孔丙火(微信公众号:孔丙火)开始怀疑是代码的问题。
在网上查找了相关信息,有一些朋友提供了有用信息,是因为HAL_MspInit()函数调用一个__HAL_AFIO_REMAP_SWJ_DISABLE()函数,把JTAG和SWD禁用了,但同为什么会这样呢。
孔丙火(微信公众号:孔丙火)开始从头查找,在CubeMx的工程中找到了问题,如图3所示,由于疏忽,忘了勾选Debug选项,于是STM32CubeMX默认你不用调试,就把JTAG和SWD禁用了,哎,一个不小心,害的查了半天,需要吸取教训啊。
另外需要特别说明的是,我在测试的过程中,采用J-link的时候,按住复位按钮,点download,keil会提示CPU处于reset状态,然后松开复位按钮,再点download,就可以下载了,但采用J-link的时候,这种方法不可行,原因不得而知。碰到这种情况,其实可以用ISP将单片机内部的代码擦除,然后再下载正确的代码就可以了。
孔丙火(微信公众号:孔丙火)的一点小的教训分享,希望对大家有用。