STM32有兩個看門狗,IWDG(獨立看門狗)、WWDG(視窗看門狗)
這兩個看門狗的說明在Reference manual有獨立2章出來
1.IWDG(Independent watchdog)
上圖是Reference manual裡的IWDG章的截圖,IWDG的簡介主要是再說,不管是獨立或著是視窗看門狗都可檢測軟體的錯誤導致故障,當計數值達到特定值產生系統從置。獨立看門狗由低速時鐘(LSI)驅動。
再來主要的特性:
獨立看門狗的時鐘由獨立的RC振盪器LSI提供,即使主時鐘發生故障它仍然有效。LSI 的頻率一般在30~60KHZ 之間,根據溫度和工作場合會有一定的漂移,我們一般取40KHZ,所以獨立看門狗的定時時間並一定非常精確,只適用於對時間精度要求比較低的場合。
遞減計數器的時鐘由LSI 經過一個8 位的預分頻器得到,我們可以操作預分頻器寄存器IWDG_PR 來設置分頻因數,分頻因數可以是:[4,8,16,32,64,128,256,256],計數器時鐘CK_CNT= 40/4*2^PRV,一個計數器時鐘計數器就減1。
獨立看門狗的計數器是一個12 位的遞減計數器,最大值為0XFFF,當計數器減到0時會產生一個重定信號:IWDG_RESET,讓程式重新開機運行,如果在計數器減到0 之前刷新了計數器的值的話,就不會產生重定信號,重新刷新計數器值的這個動作我們俗稱喂狗。
重新加載暫存器是一個12 位的暫存器,裡面裝著要刷新到計數器的值,這個值的大小決定著獨立看門狗的溢出時間。超時時間Tout = (4*2^prv) / 40 * rlv (s) ,prv 是預分頻器寄存器的值,rlv 是重裝載寄存器的值。
IWDG_KR 可以說是獨立看門狗的一個控制寄存器,主要有三種控制方式,往這個寄存器寫入下面三個不同的值有不同的效果。
0xAAAA:把RLR 的值重新加載到CNT
0x5555:PR和RLR這兩個暫存器可寫
0xCCCC:啟動獨立看門狗
通過寫往Key 暫存器寫0XCCC 來啟動看門狗是屬於軟體啟動的方式,一旦獨立看門狗啟動,它就關不掉,只有復位才能關掉。
狀態寄存器SR 只有位元0:PVU 和位1:RVU 有效,這兩位元只能由硬體操作,軟體操作不了。RVU:看門狗計數器重裝載值更新,硬體置1 表示重裝載值的更新正在進行中,更新完畢之後由硬體清0。PVU:看門狗預分頻值更新,硬體置‘1‘指示預分頻值的更新正在進行中,當更新完成後,由硬體清0。所以只有當RVU/PVU等於0的時候才可以重新加載暫存器/預分頻暫存器。
今天先介紹到這邊,明天來看看如何使用這獨立看門狗。