STM32G0系列的bootloader启动问题
此篇文章在2024年6月7日被记录
问题描述:最近在使用STM32G0的bootloader下载时,发现拉高boot0后,空片只能烧录一次,然后无论如何拉boot0,再也无法线刷固件了,通过查看文档解决了此问题
1、STM32G0系列与旧款STM32启动的不同之处
旧款STM32 boot启动方式:
STM32G0 boot启动方式:
不同之处:简单来说,G0系列多了个选项标志位,也就是nBOOT_SEL,如果nBOOT_SEL为0,则外部的boot0引脚才生效,如果nBOOT_SEL为1,则启动方式判定使用内部FLASH的nBOOT0位(这个标志为可以通过软件或者仿真器修改)
2、解决无法重复烧录的问题
1、首次在使用STM32_Programmer_CLI.exe命令行烧录时,在命令最后添加一行命令用来修改nBOOT_SEL -ob nBOOT_SEL=0
2、如果非首次烧录,可以通过仿真器使用STM32_Programmer命令行或者图形化界面进行修改
3、还可以通过软件的形式进行修改
void Flash_OB_Handle(void) {
FLASH_OBProgramInitTypeDef optionsbytesstruct;
bool UPDATE = false;
HAL_FLASHEx_OBGetConfig(&optionsbytesstruct);
uint32_t userconfig = optionsbytesstruct.USERConfig;
if((userconfig & FLASH_OPTR_nBOOT_SEL_Msk) != OB_BOOT0_FROM_PIN) {
userconfig &= ~FLASH_OPTR_nBOOT_SEL_Msk;
userconfig |= OB_BOOT0_FROM_PIN;
UPDATE = true;
}
if(UPDATE) {
optionsbytesstruct.USERConfig = userconfig;
HAL_FLASH_Unlock();
HAL_FLASH_OB_Unlock();
HAL_FLASHEx_OBProgram(&optionsbytesstruct);
HAL_FLASH_OB_Launch();
HAL_FLASH_OB_Lock();
HAL_FLASH_Lock();
}
}