一、實驗?zāi)康?/p>
1)了解獨立看門狗的;
2)學(xué)會使用獨立看門狗;
3)通過WK_UP來喂狗,然后通過DS0提示復(fù)位狀態(tài)。
二、STM32獨立看門狗簡介
單片機系統(tǒng)在外界的干擾下會出現(xiàn)程序跑飛的現(xiàn)象導(dǎo)致出現(xiàn)死循環(huán), 看門狗電路就是為了避免這種情況的發(fā)生。 看門狗的作用就是在一定時間內(nèi)(通過定時計數(shù)器實現(xiàn))
沒有接收喂狗信號(表示 MCU 已經(jīng)掛了),便實現(xiàn)處理器的自動復(fù)位重啟(發(fā)送復(fù)位信號)。
STM32 的獨立看門狗由內(nèi)部專門的 40Khz 低速時鐘驅(qū)動,即使主時鐘發(fā)生故障,它也仍然有效。這里需要注意獨立看門狗的時鐘是一個內(nèi)部 RC 時鐘,所以并不是準確
的 40Khz,而是在 30~60Khz 之間的一個可變化的時鐘,只是我們在估算的時候,以 40Khz 的頻率來計算,看門狗對時間的要求不是很精確,所以,時鐘有些偏差,都是可以
接受的。
涉及的寄存器有:鍵寄存器IWDG_KR、預(yù)分頻器IWDG_PR、重裝載寄存器IWDG_RLR、狀態(tài)寄存器|IWDG_SR。
功能描述:
在鍵值寄存器(IWDG_KR)中寫入 0xCCCC,開始啟用獨立看門狗;此時計數(shù)器開始從其復(fù)位值 0xFFF 遞減計數(shù)。當(dāng)計數(shù)器計數(shù)到末尾 0x000 時,會產(chǎn)生一個復(fù)位信號
(IWDG_RESET)。無論何時,只要鍵寄存器 IWDG_KR 中被寫入 0xAAAA, IWDG_RLR 中的值就會被重新加載到計數(shù)器中從而避免產(chǎn)生看門狗復(fù)位 。
IWDG_PR 和 IWDG_RLR 寄存器具有寫保護功能。要修改這兩個寄存器的值,必須先向IWDG_KR 寄存器中寫入 0x5555。 將其他值寫入這個寄存器將會打亂操作順
序,寄存器將重新被保護。重裝載操作(即寫入 0xAAAA)也會啟動寫保護功能。
還有兩個寄存器,一個預(yù)分頻寄存器( IWDG_PR),該寄存器用來設(shè)置看門狗時鐘的分頻系數(shù)。 另一個重裝載寄存器。該寄存器用來保存重裝載到計數(shù)器中的值。該
寄存器也是一個 32位寄存器,但是只有低 12 位是有效的。
配置步驟:
1) 取消寄存器寫保護( 向 IWDG_KR 寫入 0X5555)
2) 設(shè)置獨立看門狗的預(yù)分頻系數(shù)和重裝載值
3) 重載計數(shù)值喂狗( 向 IWDG_KR 寫入 0XAAAA)
4) 啟動看門狗(向 IWDG_KR 寫入 0XCCCC)IWDG最適合應(yīng)用于那些需要看門狗作為一個在主程序之外,能夠完全獨立工作,并且對時間精度要求較低的場合。
三、硬件設(shè)計
LED燈、按鍵、獨立看門狗
四、軟件設(shè)計
獨立看門狗配置:
voidIWDG_Init(u8prer,u16rlr)
{
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//使能對寄存器IWDG_PR和IWDG_RLR的寫操作
IWDG_SetPrescaler(prer);//設(shè)置IWDG預(yù)分頻值:設(shè)置IWDG預(yù)分頻值為64
IWDG_SetReload(rlr);//設(shè)置IWDG重裝載值
IWDG_ReloadCounter();//按照IWDG重裝載寄存器的值重裝載IWDG計數(shù)器
IWDG_Enable();//使能IWDG
}
[cpp]view plaincopy
//喂獨立看門狗
voidIWDG_Feed(void)
{
IWDG_ReloadCounter();//reload
}
五、實驗結(jié)果
成功!