Отключение STM32 HAL IWDG или WWDG (сторожевой таймер) перед режимом STOP - PullRequest
0 голосов
/ 16 ноября 2018

Я использую STM32 (L0 5) HAL. Мне нужно отключить IWDG или WWDG перед входом в режим STOP.Приведенный ниже код работает нормально, пока IWDG не перезапустит MCU из режима STOP.Для использования WWDG это происходит намного быстрее и сбрасывается до вызова HAL_PWR_EnterSTOPMode, несмотря на то, что HAL_WWDG_Refresh вызывается после каждой строки.Я также тестировал эти сценарии на Nucleo L05.

iwdgHandle.Instance = IWDG;
iwdgHandle.Init.Prescaler = IWDG_PRESCALER_64;
iwdgHandle.Init.Window = 4095;
iwdgHandle.Init.Reload = 4095;
if (HAL_IWDG_Init(&iwdgHandle) != HAL_OK) // almost 7secs until refresh has to be called
{
 _Error_Handler(__FILE__, __LINE__);
}

HAL_PWR_EnableWakeUpPin(WakeSpi_Pin);
HAL_PWREx_EnableUltraLowPower(); // Enable Ultra low power mode
HAL_PWREx_EnableFastWakeUp(); // Enable the fast wake up from Ultra low power mode

HAL_SuspendTick();
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);

1 Ответ

0 голосов
/ 16 ноября 2018

Независимый сторожевой таймер не может быть остановлен ни в одном режиме процессора. Вы должны регулярно просыпаться, чтобы перезагрузить сторожевой таймер. Что вы можете сделать, так это изменить прескалер на максимум, чтобы сторожевой таймер отсчитывал медленно.

IWDG будет остановлен, только если вы отключите контроллер от источника питания.

...