在我们做STM32实际项目时,有时可能会因为I/O口的复用,例如使用PA13/PA14口时使用GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);函数将系统配置SWDIO/SWCLK覆盖掉,如图导致出现后续烧录失败的情况,这里博主给大家推荐一种工程中常用的办法解决这个问题。
我们这里可以看到,在使用了GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);函数后导致后续烧录失败。这是因为上述函数将STM32中的SWCLK和SWDIO以及其他一些配置都关闭了,导致STM32无法与STLink连接,进而无法烧录,我们这里采用Boot0与Boot1模式切换的方式解决。
我们先来讲解决的步骤:
1.将STM32上的Boot0引脚从0模式切换到1模式,具体操作如图所示,Boot1引脚保持不变。
2.将STLink重新插入电脑USB口,并将GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);函数注释掉,再次编译和烧录,此时我们可以看到代码已经成功烧录进STM32中,我们按复位键运行代码。
3.最后再将Boot0引脚由1模式重新切换到0模式,完成操作后再次将STLink拔出重新插入,STM32就可以按照原来的样子正常运行啦
原因:
Boot引脚是用来控制STM32的启动模式的,所以切换Boot0引脚让STM32从主闪存存储器启动切换为系统存储器启动,又因为主闪存存储器启动需要读取传入信号的时钟周期,所以在SWT系统关闭时无法采取该方式烧入程序启动,而置Boot0切换为1引脚后则不需要读取时钟启动,故可以采取该方式成功烧入,但我们使用时一般还是接0引脚,这样能省下更多空间,而且传输效率高,下面是STM32说明书中截取的部分Boot说明内容: