市面常见的STM32核心板有很多,以STM32F103c8t6核心板为例,实物如下图:
在核心板的使用过程中,常见的问题是只能通过swd方式下载1次程序,第2次便会报错,提示找不到处理器。
使用STM32CubeMX软件,生成Blink闪灯工程,即在Cube中设置PC13为GPIO-output,
使用keil5打开工程,在main函数的while(1)中添加如下代码
)">编译,修改Debug选项为“Jlink”,设置中修改为SWD下载模式。
下载程序,可以成功,可再次下载时,却发现提示无法连接芯片,下载失败。
但上述并不是我们想要的。
具体是哪里出了问题呢?
在使用STM32CubeMX生成项目工程时,需要关注一项系统配置,设置好Debug模式,具体如下:
此时可以看到,右侧的芯片GPIO预览图,增加了SWDIO和SWCLK的指示。
此时再用keil打开新生成的工程,即可无限次下载和Debug了。
设置了SYS的Debug模式为Serial Wire模式,到底产生了哪些不同呢?
实际对比,我们发现共有两处:
static void MX_GPIO_Init(void)
函数中,增加了__HAL_RCC_GPIOA_CLK_ENABLE();
这里很好理解,因为SWD下载方式用的引脚是PA13和PA14。__HAL_AFIO_REMAP_SWJ_DISABLE();
,打开了“Serial Wire”是,该行是__HAL_AFIO_REMAP_SWJ_NOJTAG();
。综上所述,完全可以再不用重新配置CubeMX的情况下,通过修改上述两处代码,解决只能下载一次的问题。