本章參考資料:《stm32f4xx 中文參考手冊》 iwdg 章節。
學習本章時,配合《stm32f4xx 中文參考手冊》 iwdg 章節一起閱讀,效果會更佳,
特別是涉及到暫存器說明的部分。
iwdg
簡介stm32 有兩個看門狗,乙個是獨立看門狗另外乙個是視窗看門狗, 獨立看門狗號稱寵
物狗,視窗看門狗號稱警犬,本章我們主要分析獨立看門狗的功能框圖和它的應用。獨立
看門狗用通俗一點的話來解釋就是乙個 12 位的遞減計數器,當計數器的值從某個值一直減
到 0 的時候,系統就會產生乙個復位訊號,即 iwdg_reset。如果在計數沒減到 0 之前,
重新整理了計數器的值的話,那麼就不會產生復位訊號,這個動作就是我們經常說的餵狗。 看
門狗功能由 vdd 電壓域供電,在停止模式和待機模式下仍能工作。
①獨立看門狗時鐘
獨立看門狗的時鐘由獨立的
rc 振盪器
lsi
提供, 即使主時鐘發生故障它仍然有效,
非常獨立。
lsi
的頻率一般在
30~60khz
之間,根據溫度和工作場合會有一定的漂移, 我
們一般取
40khz
,所以獨立看門狗的定時時間並不一定非常精確,只適用於對時間精度要求比較低的場合。
②計數器時鐘
遞減計數器的時鐘由 lsi 經過乙個 8 位的預分頻器得到,我們可以操作預分頻器寄存
器 iwdg_pr 來設定分頻因子,分頻因子可以是: [4,8,16,32,64,128,256],計數器時鐘
ck_cnt= 40/ 4*2^prv,乙個計數器時鐘計數器就減一。
③計數器
獨立看門狗的計數器是乙個 12 位的遞減計數器,最大值為 0xfff,當計數器減到 0 時,
會產生乙個復位訊號:iwdg_reset,讓程式重新啟動執行,如果在計數器減到 0 之前重新整理
了計數器的值的話,就不會產生復位訊號,重新重新整理計數器值的這個動作我們俗稱餵狗。
④重裝載暫存器
重裝載暫存器是乙個 12 位的暫存器,裡面裝著要重新整理到計數器的值,這個值的大小決
定著獨立看門狗的溢位時間。超時時間 tout = (4*2^prv) / 40 * rlv (ms) , prv 是預分頻器寄存
器的值, rlv 是重裝載暫存器的值。
⑤鍵暫存器
鍵暫存器 iwdg_kr 可以說是獨立看門狗的乙個控制暫存器,主要有三種控制方式,
往這個暫存器寫入下面三個不同的值有不同的效果。
⑥狀態暫存器
狀態暫存器
sr 只有位 0:
pvu
和位 1
: rvu
有效,這兩位只能由硬體操作,軟體操
作不了。
rvu:看門狗計數器重裝載值更新,硬體置
1 表示重裝載值的更新正在進行中,
更新完畢之後由硬體清 0。
pvu:
看門狗預分頻值更新,硬體置
』1』指示預分頻值的更新正在
進行中,當更新完成後,由硬體清
0。所以只有當
rvu/pvu
等於 0
的時候才可以更新重灌
載暫存器
/預分頻暫存器。
怎麼用
iwdg
獨立看門狗一般用來檢測和解決由程式引起的故障,比如乙個程式正常執行的時間是
50ms,在執行完這個段程式之後緊接著進行餵狗,我們設定獨立看門狗的定時溢位時間為
60ms,比我們需要監控的程式 50ms 多一點,如果超過 60ms 還沒有餵狗,那就說明我們監
控的程式出故障了,跑飛了,那麼就會產生系統復位,讓程式重新執行。
**操練場:
int main(void)其中需要注意:else
/*初始化按鍵
*/key_gpio_config();
//iwdg 1s 超時溢位
iwdg_config(iwdg_prescaler_64 ,625
);
//while部分是我們在專案中具體需要寫的**,這部分的程式可以用獨立看門狗來監控
//如果我們知道這部分**的執行時間,比如是50ms,那麼我們可以設定獨立看門狗的
//溢位時間是60ms,比50ms多一點,如果要被監控的程式沒有跑飛正常執行的話,那麼
//執行完畢之後就會執行餵狗的程式,如果程式跑飛了那程式就會超時,到達不了餵狗的
//程式,此時就會產生系統復位。但是也不排除程式跑飛了又跑回來了,剛好餵狗了,
//歪打正著。所以要想更精確的監控程式,可以使用視窗看門狗,視窗看門狗規定必須
//在規定的視窗時間內餵狗。
while(1
) }}
這個定時1s左右的時間,
內部rc**頻率是乙個波動的範圍,我們取40khz計算。最後得到計數器時間約等於1s。
STM32獨立看門狗(IWDG)
在微控制器執行的過程中,我們可能會遇到程式陷入死迴圈的情況。很顯然我們需要對這種情況進行提前的預防。看門狗就是用來進行該工作的。看門狗分為獨立看門狗和視窗看門狗,這一節介紹的是獨立看門狗。stm32的獨立看門狗由內部專門的40khz低速時鐘驅動,與系統主時鐘分開工作,也就是說,主時鐘損壞時,看門狗仍...
獨立看門狗
用我自己的話來解釋一下看門狗 看門狗就是一段程式正常執行時,阻止程式復位的 另一方面也就是說,程式非正常執行時,不能執行,程式就會產生復位,從而跳出非正常程式執行狀態。在由微控制器構成的微型計算機系統中,由於微控制器的工作常常會受到來自外界電磁場的干擾,造成程式的跑飛,而陷入死迴圈,程式的正常執行被...
獨立看門狗實驗
這個實驗,如果沒有餵狗時,系統就會產生復位,導致系統斷電一下,所有led燈會滅一下 這裡用到了外部中斷 也可以不用 外部中斷可以自己加 include stm32f4xx.h void led init void void key init void void delay void void iwd...