Question
IWDG in STOP2
I'm using MCU STM32WB55CE. The issue is the following:
after putting MCU in STOP mode it looks like IWDG still running and reset the MCU.
Option byte: 0x3B79F1AA, means bit IWDG_STDBY and IWDG_STOP clear.
I'm using SEGGER J-Link for debugging. Ble stack version: 1.13.3
IWDG init:
void InitWatchDog()
{
FLASH_OBProgramInitTypeDef obInit;
HAL_FLASHEx_OBGetConfig(&obInit);
HAL_StatusTypeDef status = 0;
if ( (obInit.UserConfig & OB_USER_IWDG_STOP) != OB_IWDG_STOP_FREEZE
|| (obInit.UserConfig & OB_USER_IWDG_STDBY) != OB_IWDG_STDBY_FREEZE )
{
status = HAL_FLASH_Unlock();
if (status)
{
assert(false);
}
status = HAL_FLASH_OB_Unlock();
if (status)
{
assert(false);
}
FLASH_OBProgramInitTypeDef OBInit =
{
.OptionType = OPTIONBYTE_USER,
.UserType = OB_USER_IWDG_STOP | OB_USER_IWDG_STDBY,
.UserConfig = OB_IWDG_STOP_FREEZE | OB_IWDG_STDBY_FREEZE,
};
status = HAL_FLASHEx_OBProgram(&OBInit);
if (status)
{
assert(false);
}
HAL_FLASH_OB_Launch();
HAL_FLASH_OB_Lock();
HAL_FLASH_Lock();
}
InternalWatchdog.Instance = IWDG;
InternalWatchdog.Init.Prescaler = IWDG_PRESCALER_256;
InternalWatchdog.Init.Window = 4095;
InternalWatchdog.Init.Reload = 4095;
if (HAL_IWDG_Init(&InternalWatchdog) != HAL_OK)
{
assert(false);
}
}Put MCU in sleep mode:
void EnterStopMode(void)
{
LL_C2_PWR_SetPowerMode(LL_PWR_MODE_SHUTDOWN);
HAL_SuspendTick();
HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI);
HAL_ResumeTick();
}