STM32 写选项字 关键要加载HAL_FLASH_OB_Launch
AI乱写,还是得自己来!
void Write_OptionBytes_IWDG_STDBY(void)
{
FLASH_OBProgramInitTypeDef OBInit;
HAL_FLASHEx_OBGetConfig(&OBInit); // 获取当前选项字节配置[6,7](@ref)
// 检查当前nRST_STDBY位(IWDG_STDBY相关位)是否已为0,若否则修改
if ( ((OBInit.USERConfig & FLASH_OPTR_IWDG_STOP) != 0x00) ||
((OBInit.USERConfig & FLASH_OPTR_IWDG_STDBY) != 0x00) )
{
// 解锁FLASH和选项字节写操作
HAL_FLASH_Unlock();
HAL_FLASH_OB_Unlock();
// 配置选项字节:清除nRST_STDBY位(IWDG_STDBY=0)
OBInit.OptionType = OPTIONBYTE_USER;
OBInit.USERConfig = OBInit.USERConfig & (~FLASH_OPTR_IWDG_STOP) & (~FLASH_OPTR_IWDG_STDBY); // 置0[6,7](@ref)
OBInit.USERType = OB_USER_IWDG_STOP | OB_USER_IWDG_STDBY;
// 写入选项字节并触发重新加载
if (HAL_FLASHEx_OBProgram(&OBInit) != HAL_OK) {
Error_Handler(); // 处理错误
}
HAL_FLASH_OB_Launch(); //强制加载选项字 关键一步
HAL_FLASHEx_OBGetConfig(&OBInit); // 获取当前选项字节配置[6,7](@ref)
// 锁定FLASH并复位MCU使配置生效
HAL_FLASH_OB_Lock();
HAL_FLASH_Lock();
HAL_NVIC_SystemReset(); // 必须复位才能应用新配置[6](@ref)
}
}