為什么要看門狗
由于單片機的作業經常會受到外界電磁場的干擾,造成程式的跑飛,陷入死回圈,程式的正常運行被打斷,由單片機控制的系統無法繼續作業,會造成整個系統陷入停滯狀態,發生不可預料的結果,所以出于對單片機運行狀態進行實時監測的考慮,便產生了一種專門的用于檢測單片機程式運行狀態的模塊或者芯片,俗稱“看門狗(watchdog)”,
看門狗解決的問題是什么
在啟動正常運行的時候,系統不能復位,
在系統跑飛(程式例外執行)的情況,系統復位,程式重新執行,
STM32看門狗
- STM32內置兩個看門狗設備(獨立看門狗/視窗看門狗)可以用來檢測和解決由軟體錯誤引起的故障,當計數器達到給定的超時值時,觸發一個中斷(僅適用于視窗看門狗)或者產生系統復位.
- 獨立看門狗(IWDG)由專用的低速時鐘(LSI)驅動,即使主時鐘發生故障它仍然有效,適用于需要看門狗作為一個在主程式之外能夠完全獨立作業,并且對時間精度要求低的場合,
- 視窗看門狗由從APB1時鐘分頻后得到的時鐘驅動,通過可配置的時間視窗來檢測應用程式非正常的過遲或者過早操作,適用于要求看門狗在精確計時串口起作用的程式,
功能概述
獨立看門狗中有兩個暫存器鍵值暫存器(IWDG_KR)和自動重裝在暫存器(IWDG_RLR),以下文中用KR和RLR代替,
4. 在KR中寫入0xCCCC,開始啟用獨立看門狗,此時計數器開始從其復位值0xFFF遞減,當計數 器值到尾值0x000時產生復位信號(IWDG_RESET),
5. 在任意時刻,往KR中寫入0xAAAA,即喂狗,RLR的值就會重新加載到計數器,從而避免看門狗復位,
6. 如果程式例外,就無法正常喂狗,從而系統復位,
簡單來理解,這兩個暫存器就是一個用于定時,一個用于計數,而所說的喂狗就是只要RLR從KR中將狗狼拿出,當沒有“狗糧”了,看門狗就會復位,
獨立看門狗框圖

看門狗的配置步驟
看門狗初始化函式HAL_IWDG_Init();
IWDG_HandleTypedef iwdg;
iwdg.Instance = IWDG;
iwdg.Init.Prescaler = IWDG_PRESCALER_64;
iwdg.Init.Reload = 500;
HAL_IWDG_Init(&iwdg);
啟動看門狗函式HAL_IWDG_Start();
HAL_IWDG_Start(&iwdg);
喂狗函式HAL_IWDG_Refresh();
HAL_IWDG_Refresh(&iwdg);
以上是本人學習時所做的一些筆記,希望各位大佬指正,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/109947.html
標籤:AI
