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