一,窗口看門(mén)狗介紹
獨(dú)立看門(mén)狗的喂狗范圍 0-X(X由預(yù)分頻器和重裝載值決定,最大值為0xFFF)
獨(dú)立看門(mén)狗相關(guān)介紹:傳送門(mén):獨(dú)立看門(mén)狗
相比于獨(dú)立看門(mén)狗,窗口看門(mén)狗限定了喂狗時(shí)間段(由喂狗上限和喂狗下限值限定的喂狗范圍)
所以形象的稱作窗口看門(mén)狗
二,為什么需要窗口看門(mén)狗
獨(dú)立看門(mén)狗:在0-重載值之間任意時(shí)間都可以喂狗
如果程序跑飛后又跑回正常
或者跑亂的程序正好執(zhí)行了刷新看門(mén)狗
這樣獨(dú)立看門(mén)狗是不能檢查到并復(fù)位芯片的
窗口看門(mén)狗:限制了喂狗時(shí)間
如果程序跑飛并且在限制的時(shí)間段喂狗是很困難的
從而保證了程序的正常運(yùn)行
1234567891011
三,獨(dú)立看門(mén)狗和窗口看門(mén)狗比較
獨(dú)立看門(mén)狗:
驅(qū)動(dòng):由LSI驅(qū)動(dòng),即使主時(shí)鐘發(fā)生故障它仍有效
適用場(chǎng)景:
作為主程序之外能夠完全獨(dú)立工作
對(duì)時(shí)間精度要求較低
123456
窗口看門(mén)狗:
驅(qū)動(dòng):由APB1時(shí)鐘分頻后得到時(shí)鐘驅(qū)動(dòng)
適用場(chǎng)景:
在精確計(jì)時(shí)窗口起作用的程序
12345
四,獨(dú)立看門(mén)狗工作原理
CNT:遞減計(jì)數(shù)器
窗口上限:寄存器設(shè)置
窗口下限:0x3F
隨時(shí)間推移,計(jì)數(shù)器值遞減,經(jīng)過(guò)上窗口W和下窗口
重載值-》上窗口:這段時(shí)間不允許喂狗,如果喂狗會(huì)使芯片復(fù)位
上窗口-》下窗口:這段時(shí)間允許喂狗,下窗口位固定值(0x3F)
下窗口:進(jìn)入下窗口會(huì)產(chǎn)生復(fù)位
T6位:
0x3F=00111111
在計(jì)數(shù)器到達(dá)0x3F之前第六位為1
所以當(dāng)計(jì)數(shù)器到達(dá)窗口下限前T6位為1,到達(dá)窗口下限后T6位為低電平
復(fù)位:
當(dāng)計(jì)數(shù)器到達(dá)窗口下限(喂狗失敗),會(huì)產(chǎn)生MCU復(fù)位信號(hào),使芯片復(fù)位
12345678910111213141516171819
五,窗口看門(mén)狗復(fù)位分析
遞減計(jì)數(shù)器時(shí)鐘:
時(shí)鐘來(lái)源PCLK1
由于PCLK1時(shí)鐘頻率過(guò)高/4096
再經(jīng)過(guò)預(yù)分頻器WDGTB
預(yù)分頻后作為遞減計(jì)數(shù)器時(shí)鐘
WWDG_CR寄存器:
T7:WDGA啟動(dòng)位-使能窗口看門(mén)狗
T0-6 :6位遞減計(jì)數(shù)器寄存器
WWDG_CFR寄存器:
W0-6:設(shè)置窗口看門(mén)狗上窗口值
比較器:
比較遞減計(jì)數(shù)器CNT和上窗口寄存器大小關(guān)系
遞減計(jì)數(shù)器值》上窗口值 比較結(jié)果為1
1234567891011121314151617
分析一: 計(jì)數(shù)器值》上窗口值時(shí),喂狗,會(huì)產(chǎn)生復(fù)位
當(dāng)計(jì)數(shù)器值》上窗口值時(shí),比較器比較結(jié)果輸出為1
此時(shí)喂狗,與門(mén)1下端輸入為1
所以,或門(mén)1上端輸入為1,導(dǎo)致與門(mén)2右端輸入為1
此時(shí)看門(mén)狗處于使能狀態(tài),與門(mén)2左端輸入為1
所以芯片產(chǎn)生復(fù)位
123456
分析二: 計(jì)數(shù)器值到達(dá)0x3F,會(huì)產(chǎn)生復(fù)位
當(dāng)計(jì)數(shù)器值到達(dá)0x3F時(shí),T6位從1跳變到0
或門(mén)1下端輸入通過(guò)取反置1,所以或門(mén)1輸出值為1,與門(mén)右側(cè)輸入值為1
此時(shí)看門(mén)狗處于使能狀態(tài),與門(mén)2左端輸入為1
所以芯片產(chǎn)生復(fù)位
12345
總結(jié):窗口看門(mén)狗有兩種情況會(huì)產(chǎn)生復(fù)位
1,喂狗時(shí)間大于窗口上限值
2,計(jì)數(shù)器值從0x40減到0x3F
如果啟動(dòng)看門(mén)狗并且允許中斷,當(dāng)遞減計(jì)數(shù)器等于0x40時(shí),會(huì)產(chǎn)生喚醒中斷EWI,它可以用于喂狗避免WWDG復(fù)位
12345
窗口看門(mén)狗使用注意
上窗口值W[6:0]必須大于下窗口值0x40(0x40產(chǎn)生喚醒中斷),否則窗口看門(mén)狗就沒(méi)有窗口了
12
六,窗口看門(mén)狗的超時(shí)時(shí)間
時(shí)鐘來(lái)源:
Fpclk1除以4096再經(jīng)過(guò)WDGTB預(yù)分頻器
f = Fpclk1 / (4096 * 2^WDGTB)
123
超時(shí)時(shí)間:
窗口看門(mén)狗時(shí)鐘周期(時(shí)鐘頻率f分之1) *
t = 1/f * 看門(mén)狗計(jì)數(shù)器重載值
123
七,窗口看門(mén)狗相關(guān)寄存器
直接寫(xiě)WWDG_CR[6:0]實(shí)現(xiàn)喂狗
獨(dú)立看門(mén)狗喂狗:向鍵值寄存器IWDG_KR寫(xiě)0xAAAA喂狗。將IWDG_RLR寄存器值重新裝載到計(jì)數(shù)器
123
位0-6設(shè)置上窗口值
位7-8設(shè)置時(shí)基-窗口看門(mén)狗的時(shí)鐘頻率
位9提前喚醒中斷使能位(1:使能)當(dāng)計(jì)數(shù)器到達(dá)0x40產(chǎn)生中斷
1234
WWDG_SR只用到位0:提前喚醒中斷標(biāo)志
當(dāng)計(jì)數(shù)器達(dá)到0x40時(shí),由硬件置1,需軟件清零
123
八,窗口看門(mén)狗相關(guān)庫(kù)函數(shù)
stm32f10x_wwdg.h中找到相關(guān)函數(shù)頭文件
九,窗口看門(mén)狗相關(guān)配置步驟
十,窗口看門(mén)狗代碼:
HARDWARE/WDG目錄新建wgd.h
HARDWARE/WDG目錄新建wgd.c
USER/main.c主函數(shù)編寫(xiě)
以上程序?qū)崿F(xiàn):
程序初始化LED點(diǎn)亮延時(shí)300ms熄滅
窗口看門(mén)狗從0x7F開(kāi)始遞減計(jì)數(shù),上窗口為0x5F,下窗口為0x7F
計(jì)數(shù)器到達(dá)0x40進(jìn)入提前喚醒中斷,
在中斷函數(shù)中進(jìn)行喂狗操作,計(jì)數(shù)器翻轉(zhuǎn)(從0x7F重新計(jì)數(shù)),LED1翻轉(zhuǎn)
以此循環(huán)。。.
翻轉(zhuǎn)頻率為從0x7F計(jì)數(shù)到0x40,翻轉(zhuǎn)時(shí)間可以根據(jù)公式計(jì)算
正常喂狗:
LED0亮300ms之后熄滅,LED1不斷閃爍
喂狗失?。ㄗ⑨尩粑构泛瘮?shù)):
程序不斷復(fù)位,LED0閃爍
評(píng)論
查看更多