STM32G0系列的bootloader启动问题

此篇文章在2024年6月7日被记录

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

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

旧款STM32 boot启动方式:

img

STM32G0 boot启动方式:

img

不同之处:简单来说,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命令行或者图形化界面进行修改

img

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();
	}
}

posted @ 2024-12-13 15:24  田帅康学习笔记  阅读(5)  评论(0编辑  收藏  举报