STM32有2個看門狗:獨立看門狗和窗口看門狗。
獨立看門狗IWDG--獨立于系統(tǒng)之外,因為有獨立時鐘,所以不受系統(tǒng)影響的系統(tǒng)故障探測器,主要用于監(jiān)視硬件錯誤。
窗口看門狗WWDG----系統(tǒng)內(nèi)部的故障探測器,時鐘與系統(tǒng)相同。如果系統(tǒng)時鐘不走了,這個狗也就失去了作用了,主要用于監(jiān)視軟件錯誤。
簡單的講,看門狗就是檢測系統(tǒng)故障的,如果因為系統(tǒng)故障而沒有及時喂狗,則引發(fā)復(fù)位重啟。
對于一般的看門狗,程序可以在它產(chǎn)生復(fù)位前的任意時刻刷新看門狗,但是這樣有一個隱患,有可能程序跑亂了又跑回正常的地方,或者跑亂的程序正好執(zhí)行了刷新看門狗操作,這樣的情況下一按的看門狗就檢測不出來故障了;但是如果使用窗口看門狗,程序員可以根據(jù)程序正常執(zhí)行的時間設(shè)置刷新看門狗的一個時間窗口,保證不會提前刷新看門狗,也不會滯后刷新看門狗,這樣可以檢測出程序沒有按照正常的路徑運行,非正常地跳過了某些程序段的情況。
WWDG與IWDG的主要區(qū)別是有一個窗口控制,WWDG的中斷不是用于日常喂狗的,如果用于日常喂狗動作,那WWDG的相對于IWDG,功能也就沒什么特別了。WWDG的中斷是給程序員最后一次喂狗的機會,一般進入這個中斷時,表示你在其他地方安排的喂狗操不能湊效了,而發(fā)生這種現(xiàn)象時,肯定是系統(tǒng)有問題了,或者程序有Bug或者干擾,在這種情況下,這個中斷時為了讓你的程序在發(fā)生真正的看門狗復(fù)位前,有一個緊急處理的機會,如保存重要數(shù)據(jù),或者系統(tǒng)剎車,說白了,就是讓CPU寫“遺囑”;
由此看出,簡單的再WWDG中斷中喂狗,既沒有發(fā)揮WWDG相對于IWDG的優(yōu)勢,又因為在中斷中喂狗,而為以后的產(chǎn)品留下了隱患。