stm32有兩個(gè)看門狗,,獨(dú)立看門狗和窗口看門狗,,其實(shí)兩者的功能是類似的,,只是喂狗的限制時(shí)間不同,。
獨(dú)立看門狗是限制喂狗時(shí)間在0-x內(nèi),,x由你的相關(guān)寄存器決定。喂狗的時(shí)間不能過(guò)晚,。
窗口看門狗,,所以稱之為窗口就是因?yàn)槠湮构窌r(shí)間是一個(gè)有上下限的范圍內(nèi),你可以通過(guò)設(shè)定相關(guān)寄存器,,設(shè)定其上限時(shí)間和下限時(shí)間,。喂狗的時(shí)間不能過(guò)早也不能過(guò)晚。
窗口看門狗的上窗口就是配置寄存器WWDG->CFR里設(shè)定的W[6:0];
下窗口是固定的0x40;
當(dāng)窗口看門狗的計(jì)數(shù)器在上窗口值之外,,或是低于下窗口值都會(huì)產(chǎn)生復(fù)位,。
上窗口的值可以只有設(shè)定,7位二進(jìn)制數(shù)最大只可以設(shè)定為127(0x7F),,最小又必須大于下窗口的0x40,,所以其取值范圍為64~127(即:0x40~0x7F);
配置寄存器WWDG->CFR中為計(jì)數(shù)器設(shè)定時(shí)鐘分頻系數(shù),確定這個(gè)計(jì)數(shù)器可以定時(shí)的時(shí)間范圍,,從而確定窗口的時(shí)間范圍,。
窗口看門狗的時(shí)鐘來(lái)自于PCLK1,,在時(shí)鐘配置中,其頻率為外部時(shí)鐘經(jīng)倍頻器后的二分頻時(shí)鐘,,即為36MHz,,根據(jù)手冊(cè)可以知道其定時(shí)時(shí)間計(jì)算方法:
36Mhz下相關(guān)窗口看門狗的喂狗時(shí)間范圍:
WDGTB(計(jì)數(shù)器分頻值)最早喂狗時(shí)間/us最晚喂狗時(shí)間/ms
0 113 7.28
1 227 14.56
2 455 29.12
3 910 58.25
本例直接寄存器實(shí)現(xiàn)4種測(cè)試模式,測(cè)試窗口看門狗的復(fù)位原理,。
MODE_1 0 // 在30ms時(shí)喂狗,,在窗口范圍內(nèi)喂狗,LED燈閃爍
MODE_2 0 // 在10ms時(shí)喂狗,,在窗口范圍外導(dǎo)致復(fù)位,,LED燈常亮
MODE_3 0 // 在100ms時(shí)喂狗,在窗口范圍外喂狗導(dǎo)致復(fù)位
MODE_4 1 // 主函數(shù)不執(zhí)行喂狗,,開啟提前喚醒中斷,,在WWDG中斷函數(shù)中喂狗
庫(kù)函數(shù)實(shí)現(xiàn)在提前喚醒中斷中,喂狗操作,,PA4口LED正常閃爍,。當(dāng)外部中斷發(fā)生(按下PA0按鍵),長(zhǎng)時(shí)間不喂狗,,引發(fā)窗口看門狗復(fù)位,。
直接操作寄存器
相關(guān)寄存器如下:
控制寄存器WWDG->CR:低8位有效。
第8位為WDGA,看門狗激活位,。低7位[6:0]為看門狗計(jì)數(shù)器的計(jì)數(shù)值,。
配置寄存器WWDG->CFR:低十位有效。
第10位為EWI:提醒喚起中斷,。此位置1,,當(dāng)計(jì)數(shù)器值到達(dá)0x40時(shí),將產(chǎn)生中斷,。
第8,,9位WDGTB:為計(jì)數(shù)器分頻系數(shù)設(shè)置為:
00: CK計(jì)時(shí)器時(shí)鐘(PCLK1除以4096)除以1 01: CK計(jì)時(shí)器時(shí)鐘(PCLK1除以4096)除以2
10: CK計(jì)時(shí)器時(shí)鐘(PCLK1除以4096)除以4 11: CK計(jì)時(shí)器時(shí)鐘(PCLK1除以4096)除以8
低7位[6:0]:為窗口值。