MCU微課堂
CKS32F107XX系列窗口看門狗介紹
第六十六期 2025.11.24
中科芯CKS32F107xx系列產(chǎn)品內(nèi)部提供兩個看門狗定時器單元,獨立型看門狗IWDG(Independent Watchdog)和窗口型看門狗WWDG(Window Watchdog),本文主要介紹WWDG的應(yīng)用,關(guān)于IWDG的詳情,請參看我們的IWDG微課堂內(nèi)容。
WWDG簡介
通過前面的課程,我們知道IWDG獨立看門狗的工作原理就是一個遞減計數(shù)器在LSI時鐘的驅(qū)動下不斷的往下遞減計數(shù),當(dāng)減到0之前如果沒有刷新遞減計數(shù)器的值(俗稱喂狗),便會觸發(fā)系統(tǒng)復(fù)位。
WWDG窗口看門狗也是一個遞減計數(shù)器不斷的往下遞減計數(shù)。但和IWDG獨立看門狗有四處不同:
(1)IWDG由獨立RC振蕩器產(chǎn)生的LSI驅(qū)動,不受主時鐘影響,但精度不高;WWDG由APB1分頻時鐘驅(qū)動,受主時鐘影響,精度高。
(2)IWDG直接由VDD電壓域供電,即使在MCU停止模式和待機(jī)模式下仍然能照常工作。
(3)IWDG計數(shù)器減到下限0時觸發(fā)復(fù)位,WWDG計數(shù)器減到下限0x40時觸發(fā)復(fù)位,下限值不同。
(4)IWDG計數(shù)器只有復(fù)位下限值0,WWDG計數(shù)器不僅有復(fù)位下限0x40,還有一個復(fù)位上限X(用戶設(shè)定),上限值與下限值之間形成一個復(fù)位窗口。WWDG計數(shù)器的值在減到上限X之前(窗口外)喂狗,同樣也會產(chǎn)生復(fù)位。因此WWDG必須在窗口上限和窗口下限之間才可以喂狗,這是窗口看門狗的特殊之處。

WWDG詳細(xì)介紹
1、WWDG功能框圖解析
下圖是獨立看門狗的功能框圖,分4個部分進(jìn)行說明。

① WWDG時鐘:窗口看門狗的時鐘來自APB1時鐘線分頻出的PCLK1,最大42MHz,由RCC時鐘控制器控制開啟。
② 計數(shù)器時鐘和WWDG_CFR寄存器:CK計時器時鐘 = PCLK1 / 4096,計數(shù)器時鐘由CK計時器時鐘經(jīng)過預(yù)分頻器分頻得到,分頻系數(shù)由配置寄存器WWDG_CFR的WWDGTB[1:0]控制,可以是0~3,因此計數(shù)器的時鐘CNT_CK = PCLK1 / 4096 / (2^WWDGTB),進(jìn)而可算出一個計數(shù)周期時間是T = 1 / CNT_CK。
③ 計數(shù)器和WWDG_CR寄存器:WWDG的計數(shù)器是一個7位遞減計數(shù)器,其值存放在控制器寄存器WWDG_CR的T[6:0]中,當(dāng)該計數(shù)器的值從0x40變?yōu)?x3F時,產(chǎn)生復(fù)位,因此計數(shù)器的值只能是在0x7F~0x40之間,有效位是T[5:0]。WWDG_CR的WDGA位則是窗口看門狗的激活位,可由軟件置1來啟動WWDG,要注意WDGA一旦置1,只能在硬件復(fù)位后才能清零。
④ 窗口上限值:WWDG的窗口下限值固定是0x40,但窗口上限值可以人為設(shè)定,具體可由WWDG_CFR配置寄存器的W[6:0]設(shè)置,其值必須大于0x40且小于0x7F,否則就失去了意義。
最后介紹的是狀態(tài)寄存器(WWDG_SR)和EWI(Early wakeup interrupt)中斷,該寄存器用來記錄當(dāng)前是否有提前喚醒EWI的中斷標(biāo)志。該寄存器僅有位0有效,其他都是保留位。當(dāng)計數(shù)器值達(dá)到0x40時,此位由硬件置1,它必須通過軟件寫0來清除。在初始化WWDG時,一般會先通過軟件寫0清除一次。用戶可以在EWI(Early wakeup interrupt)中斷服務(wù)程序里進(jìn)行一些必要的操作。
2、計算看門狗超時時間
窗口看門狗的時序圖如下。

假設(shè)PCLK1時鐘為36MHz,按照上述計算方法,可以得到WWDG的超時時間計算公式Twwdg =1 / PCLK1 x 4096 x 2^WDGTB x (T[5:0]+1),范圍如下表。

3、WWDG庫函數(shù)配置步驟
(1)使能WWDG時鐘
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // WWDG 時鐘使能
(2)設(shè)置WWDG窗口上限和WDGTB分頻系數(shù)
void WWDG_SetWindowValue(uint8_t WindowValue); //設(shè)置WWDG 窗口上限
void WWDG_SetPrescaler(uint32_t WWDG_Prescaler); //設(shè)置WDGTB分頻系數(shù)
(3)開啟WWDG中斷并分組
WWDG_ClearFlag(); //清除提前喚醒中斷標(biāo)志位
NVIC_Init(); //設(shè)置中斷優(yōu)先級
WWDG_EnableIT(); //開啟窗口看門狗中斷
(4)設(shè)置計數(shù)器初始值并使能看門狗
void WWDG_Enable(uint8_t Counter); //設(shè)置計數(shù)器值并使能看門狗
完成以上4個步驟之后,我們就可以使用窗口看門狗了。之后在程序里面就必須周期性的在窗口上下限范圍內(nèi)進(jìn)行喂狗(一般調(diào)用WWDG_SetCounter函數(shù)),否則將導(dǎo)致系統(tǒng)復(fù)位。
4、WWDG的應(yīng)用場景
WWDG一般被用來監(jiān)測由外部干擾或不可預(yù)見的邏輯條件造成的應(yīng)用程序背離正常的運行序列而產(chǎn)生的軟件故障。比如一個十分關(guān)鍵的程序段正常運行的時間是58ms以內(nèi),在運行完這個段程序之后緊接著進(jìn)行喂狗,如果在規(guī)定的時間窗口內(nèi)還沒有喂狗,那就說明我們監(jiān)控的程序并沒有在預(yù)期的58ms內(nèi)運行完成,可以認(rèn)為出故障了或跑飛了,那么此時產(chǎn)生系統(tǒng)復(fù)位來解除這個故障,讓程序重新運行。
-
mcu
+關(guān)注
關(guān)注
147文章
19094瀏覽量
402734 -
看門狗
+關(guān)注
關(guān)注
10文章
611瀏覽量
73168 -
計數(shù)器
+關(guān)注
關(guān)注
32文章
2320瀏覽量
98485 -
定時器
+關(guān)注
關(guān)注
23文章
3370瀏覽量
124368
原文標(biāo)題:MCU微課堂|CKS32F107XX系列窗口看門狗介紹
文章出處:【微信號:中科芯MCU,微信公眾號:中科芯MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
中科芯CKS32F107XX系列MCU的bxCAN介紹
STM32中的獨立看門狗和窗口看門狗是什么
MCU獨立看門狗和窗口看門狗的區(qū)別
MCU獨立看門狗與窗口看門狗的區(qū)別
【MCU】基于STM32CubeMX 實現(xiàn)窗口看門狗 WWDG
STM32中的獨立看門狗和窗口看門狗
STM32中的獨立看門狗和窗口看門狗
CKS32F107xx系列時鐘系統(tǒng)具體配置方法講解
CKS32F107xx系列MCU中ADC介紹
中科芯CKS32F107XX系列MCU的電源控制介紹
中科芯CKS32F107XX系列MCU的窗口看門狗介紹
評論