WWDG:
中文名:窗口看門狗
是一個7位遞減計數(shù)器新蟆,不斷向下遞減計數(shù)觅赊,當(dāng)減到一個固定值0x40時還不喂狗,就會產(chǎn)生一個MCU復(fù)位琼稻,這個值叫做窗口的下限吮螺,是固定的值,不能改變。
與IWDG不同之處在于:
在WWDG的遞減計數(shù)器減少到某一值之前喂狗鸠补,也會產(chǎn)生復(fù)位萝风,這個值叫做窗口的上限,上限值由用戶獨(dú)立設(shè)置紫岩,WWDG計數(shù)器的值必須在上窗口和下窗口之間時规惰,才可以刷新(喂狗)而不產(chǎn)生復(fù)位。
時序圖
T[6:0]是窗口控制寄存器(WWDG_CR)的低7位泉蝌,W[6:0]是窗口配置寄存器(WWDG_CFR)的低7位歇万。
T[6:0]就是窗口看門狗的計數(shù)器值,W[6:0]就是窗口看門狗的上窗口勋陪,下窗口是固定值0X40,當(dāng)窗口看門狗的計數(shù)器值在上窗口之外或者低于下窗口值時被刷新都會產(chǎn)生復(fù)位贪磺。
標(biāo)號①:WWDG時鐘
標(biāo)號②:WWDG預(yù)分頻器
分頻后的計數(shù)器時鐘:CK_CNT=PCLK1/4096/(2^WDGTB);//WDGTB是分頻因子
/*除以4096是中文參考手冊內(nèi)規(guī)定,沒有為什么
標(biāo)號③:計數(shù)器
窗口看門狗的超時時間計算公式如下:
Twwdg = (40962^WDGTB(T[5:0]+1))/PCLK1;
Twwdg為窗口看門狗的超時時間诅愚,單位是ms
PCLK1為APB1的時鐘頻率寒锚,最大為36MHz
WDGTB為窗口看門狗的預(yù)分頻系數(shù)
T[5:0]為窗口看門狗的計數(shù)器低6位
窗口看門狗的計數(shù)最大值0X7F,因為是7位呻粹,所以最大是1111111
二壕曼、WWDG配置步驟
wwdg相關(guān)庫函數(shù)在stm32f10x_wwdg.c和stm32f10x_wwdg.h中
(1)使能WWDG時鐘:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);
(2)設(shè)置WWDG窗口值和分頻系數(shù)
void WWDG_SetWindowValue(uint8_t WindowValue);
void WWDG_SetPrescaler(uin32_t WWDG_Prescaler);
分頻系數(shù)為WWDG_Prescaler_x x可以為1,2,4苏研,8
(3)開啟WWDG中斷并分組
NVIC_Init();
WWDG_EnableIT();
(4)設(shè)置計數(shù)器初始值并使能WWDG
void WWDG_Enable(uint8_t Counter);
void WWDG_SetCounter(uint8_t Counter);
(5)編寫WWDG中斷服務(wù)函數(shù)
WWDG_IRQHandler
WWDG_ClearFlag();
四等浊、編寫窗口看門狗程序
功能:系統(tǒng)開啟時,D1指示燈點(diǎn)亮500ms時間摹蘑,然后熄滅筹燕。
D2指示燈不斷閃爍表示正在喂狗,如果喂狗超時將重啟系統(tǒng)衅鹿,D1指示燈點(diǎn)亮500ms時間撒踪,然后熄滅。繼續(xù)喂狗
程序框架:
(1)初始化WWDG(使能WWDG時鐘大渤,設(shè)置窗口以及分頻系數(shù)制妄,使能中斷等);
(2)編寫窗口看門狗中斷服務(wù)函數(shù)
(3)編寫主函數(shù)