问题描述:最近在使用STM32G0的bootloader下载时,发现拉高boot0后,空片只能烧录一次,然后无论如何拉boot0,再也无法线刷固件了,通过查看文档解决了此问题

1、STM32G0系列与旧款STM32启动的不同之处

旧款STM32 boot启动方式:
1.png
STM32G0 boot启动方式:
2.png

不同之处:简单来说,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命令行或者图形化界面进行修改
link.png
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();
    }
}
文章目录