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

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

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

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

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