【實(shí)驗(yàn)五】窗口看門狗實(shí)驗(yàn)
一、實(shí)驗(yàn)?zāi)康?/p>
1)了解STM32窗口看門狗;
2)了解STM32窗口看門狗與獨(dú)立看門狗的異同;
3)會(huì)使用窗口看門狗;
4)利用STM32窗口看門狗的中斷功能來(lái)喂狗。
二、STM32 窗口看門狗簡(jiǎn)介
窗口看門狗通常被用來(lái)監(jiān)測(cè),由外部干擾或不可預(yù)見的邏輯條件造成的應(yīng)用程序背離正常的運(yùn)行序列而產(chǎn)生的軟件故障。除非遞減計(jì)數(shù)器的值在T6位變成0前被刷新,看
門狗電路在達(dá)到預(yù)置的時(shí)間周期時(shí),會(huì)產(chǎn)生一個(gè)MCU復(fù)位。在遞減計(jì)數(shù)器達(dá)到窗口寄存器數(shù)值之前,如果7位的遞減計(jì)數(shù)器數(shù)值(在控制寄存器中)被刷新, 那么也將產(chǎn)生一個(gè)MCU
復(fù)位。這表明遞減計(jì)數(shù)器需要在一個(gè)有限的時(shí)間窗口中被刷新。
簡(jiǎn)而言之,窗口看門狗有兩個(gè)門限就上窗口和下窗口;下窗口值是固定的0x40;而上窗口由我們自己設(shè)置;當(dāng)看門狗的計(jì)數(shù)器在上窗口值之外被刷新,或者低于下窗口值都
會(huì)產(chǎn)生復(fù)位。
涉及的寄存器有:控制寄存器(WWDG_CR)、配置寄存器(WWDG_CFR)、狀態(tài)寄存器(WWDG_SR)。
配置步驟:
1) 使能 WWDG 時(shí)鐘
2) 設(shè)置窗口值和分頻數(shù)
3) 開啟 WWDG 中斷并分組
4) 設(shè)置計(jì)數(shù)器初始值并使能看門狗
5) 編寫中斷服務(wù)函數(shù)
獨(dú)立看門狗與窗口看門狗的異同:相同的地方就是二者在一定情況下都會(huì)產(chǎn)生MCU復(fù)位;而IWDG最適合應(yīng)用于那些需要看門狗作為一個(gè)在主程序之外,能夠完全獨(dú)立
工作,并且對(duì)時(shí)間精度要求較低的場(chǎng)合。 WWDG最適合那些要求看門狗在精確計(jì)時(shí)窗口起作用的應(yīng)用程序。
三、硬件設(shè)計(jì)
LED燈、窗口看門狗。
四、軟件設(shè)計(jì)
voidWWDG_Init(u8tr,u8wr,u32fprer)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);//WWDG時(shí)鐘使能
WWDG_CNT=tr&WWDG_CNT;//初始化WWDG_CNT.
WWDG_SetPrescaler(fprer);////設(shè)置IWDG預(yù)分頻值
WWDG_SetWindowValue(wr);//設(shè)置窗口值
WWDG_Enable(WWDG_CNT);//使能看門狗,設(shè)置counter.
WWDG_ClearFlag();//清除提前喚醒中斷標(biāo)志位
WWDG_NVIC_Init();//初始化窗口看門狗NVIC
WWDG_EnableIT();//開啟窗口看門狗中斷
}
//重設(shè)置WWDG計(jì)數(shù)器的值
voidWWDG_Set_Counter(u8cnt)
{
WWDG_Enable(cnt);//使能看門狗,設(shè)置counter.
}
//窗口看門狗中斷服務(wù)程序
voidWWDG_NVIC_Init()
{
NVIC_InitTypeDefNVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel=WWDG_IRQn;//WWDG中斷
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//搶占2,子優(yōu)先級(jí)3,組2
NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;//搶占2,子優(yōu)先級(jí)3,組2
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);//NVIC初始化
}
voidWWDG_IRQHandler(void)
{
WWDG_SetCounter(WWDG_CNT);//當(dāng)禁掉此句后,窗口看門狗將產(chǎn)生復(fù)位
WWDG_ClearFlag();//清除提前喚醒中斷標(biāo)志位
LED1=!LED1;//LED狀態(tài)翻轉(zhuǎn)
}
五、實(shí)驗(yàn)結(jié)果
成功!