STM32學(xué)習(xí)——獨(dú)立看門狗
為什么需要看門狗?
在由單片機(jī)構(gòu)成的微型計(jì)算機(jī)系統(tǒng)中,由于單片機(jī)的工作常常會(huì)受到來自外界電磁場(chǎng)的干擾,造成程序的跑飛,而陷入死循環(huán),程序的正常運(yùn)行被打斷,由單片機(jī)控制的系統(tǒng)無法繼續(xù)工作,會(huì)造成整個(gè)系統(tǒng)陷入停滯狀態(tài),發(fā)生不可預(yù)料的后果。所以出于對(duì)單片機(jī)運(yùn)行狀態(tài)進(jìn)行實(shí)時(shí)監(jiān)測(cè)的考慮,便產(chǎn)生了一種專門用于檢測(cè)單片機(jī)程序運(yùn)行狀態(tài)的模塊或者芯片,俗稱“看門狗”(watchdog)。
看門狗解決的問題是什么?
在啟動(dòng)正常運(yùn)行的時(shí)候,系統(tǒng)不能復(fù)位。
在系統(tǒng)跑飛(程序異常執(zhí)行)的情況,系統(tǒng)復(fù)位,程序重新執(zhí)行。
?
STM32內(nèi)置兩個(gè)看門狗
獨(dú)立看門狗(IWDG)由專用的低速時(shí)鐘(LSI)驅(qū)動(dòng),即使主時(shí)鐘發(fā)生故障它仍有效。
獨(dú)立看門狗適合應(yīng)用于需要看門狗作為一個(gè)在主程序之外能夠完全獨(dú)立工作,并且對(duì)時(shí)間精度要求低的場(chǎng)合。
窗口看門狗由從APB1時(shí)鐘分頻后得到時(shí)鐘驅(qū)動(dòng)。通過可配置的時(shí)間窗口來檢測(cè)應(yīng)用程序非正常的過遲或過早操作。
窗口看門狗最適合那些要求看門狗在精確計(jì)時(shí)窗口起作用的程序。
獨(dú)立看門狗功能描述
在鍵值寄存器(IWDG_KR)中寫入0xCCCC,開始啟用獨(dú)立看門狗。此時(shí)計(jì)數(shù)器開始從其復(fù)位值0xFFF遞減,當(dāng)計(jì)數(shù)器值計(jì)數(shù)到尾值0x000時(shí)會(huì)產(chǎn)生一個(gè)復(fù)位信號(hào)(IWDG_RESET)。
無論何時(shí),只要在鍵值寄存器IWDG_KR中寫入0xAAAA(通常說的喂狗),自動(dòng)重裝載寄存器IWDG_RLR的值就會(huì)重新加載到計(jì)數(shù)器,從而避免看門狗復(fù)位
如果程序異常,就無法正常喂狗,從而系統(tǒng)復(fù)位。

鍵值寄存器IWDG_KR:0~15位有效。
預(yù)分頻寄存器IWDG_PR:0~2位有效。具有寫保護(hù)功能,要操作先取消寫保護(hù)。
重裝載寄存器IWDG_RLR:0~11位有效。具有寫保護(hù)功能,要操作先取消寫保護(hù)。
狀態(tài)寄存器IWDG_SR:0~1位有效。
鍵寄存器(IWDG_KR)

預(yù)分頻寄存器(IWDG_PR)

重裝載寄存器(IWDG_RLR)

狀態(tài)寄存器(IWDG_SR)

獨(dú)立看門狗超時(shí)時(shí)間

超時(shí)時(shí)間的公式為

Tout:超時(shí)時(shí)間
PR:IWDG_PR寄存器中位[2:0]的十進(jìn)制值
RLR:重裝載寄存器IWDG_RLR所對(duì)應(yīng)的重裝載數(shù)值(比如最短裝載值1,最長(zhǎng)裝載值0xFFF)。
?
??????????????????????