序言
其实很早就遇见过这个问题,但因为这个问题太小太基础了,就没有做记录。但是过了很久过后再重新回来用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左右松开,很玄妙,自行把握一下。
|