STM32WB IWDG Function Introduction
獨立看門狗(IWDG)
上一章說到待機模式可以通過IWDG喚醒,獨立看門口功能框圖如下。實際上獨立看門口狗就是一個遞減計數器,當計時器的值減到0時,IWDG會產生一個複位信號,系統復位重新啟動。為避免產生看門狗復位,則需在計數器減到0之前重載計數器,即“餵狗”。當程序出錯時沒有刷新計數器,計數器遞減到0,系統復位重新啟動,避免程序繼續錯誤運行。
PS:Since its clock is an independent 32-kHz low-speed internal RC oscillator (LSI), it remains active even if the main clock
fails.
IWDG STM32CubeMX設定
- IWDG counter clock prescaler 預分頻器值設為32
- IWDG down-counter reload value 重裝載寄存器值設為 1000
超時時間 Tout = (4*2^prv) / LSI * rlv (s) prv是預分頻器寄存器的值,rlv是重裝載寄存器的值
由圖知 LSI 為 32 KHz,當 prv 取 IWDG_ PRESCALER_32 ,rlv 取 1000時,Tout=32/32*1000=1s。
即設置 1s 的超時溢出。
MX_IWDG_Init();
/* USER CODE BEGIN 2 */
printf("\n\r***** IWDG Test Start *****\n\r");
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
printf("\n\r Refreshes the IWDG !!!\n\r");
HAL_IWDG_Refresh(&hiwdg);
HAL_Delay(800);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
因為設置超時溢出為 1 秒,所以這裡每隔 800 毫秒餵狗一次 HAL_IWDG_Refresh(&hiwdg);