Sem tam se stane, že je třeba programově změnit FLASH option byte. Dostupných příkladů je ale málo a nejsou zcela transparentní. Zde je jednoduchý a názorný příklad jak v programu změnit FLASH option byte flag.
// Příklad vypnutí IWDG ve STOP modu
...
__disable_irq();
FLASH_OBProgramInitTypeDef pOBInit;
HAL_FLASHEx_OBGetConfig(&pOBInit);
if( pOBInit.USERConfig & (1 << 17) ) { // 17 bit = OB_USER_IWDG_STOP
memset((void*)&pOBInit,0,sizeof(pOBInit));
pOBInit.OptionType = OPTIONBYTE_USER;
pOBInit.USERType = OB_USER_IWDG_STOP;
pOBInit.USERConfig = OB_IWDG_STOP_FREEZE;
HAL_FLASH_Unlock();
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPTVERR); // Clear the FLASH's pending flags.
HAL_FLASH_OB_Unlock();
if (HAL_FLASHEx_OBProgram(&pOBInit)==HAL_OK)
{
/* Provede reset! To je správně. */
HAL_FLASH_OB_Launch();
}
HAL_FLASH_OB_Lock();
HAL_FLASH_Lock();
}
__enable_irq();
...