MCU微課堂
CKS32F107XX系列獨(dú)立看門狗介紹
第六十七期 2025.11.24
看門狗簡(jiǎn)介
中科芯CKS32F107xx系列產(chǎn)品內(nèi)部提供兩個(gè)看門狗定時(shí)器單元,獨(dú)立型看門狗IWDG(Independent Watchdog)和窗口型看門狗WWDG(Window Watchdog),它們?cè)诎踩?、時(shí)間精確性和使用靈活性方面變現(xiàn)得非常優(yōu)秀。兩個(gè)看門狗定時(shí)器單元都可用來(lái)檢測(cè)由軟件錯(cuò)誤引起的故障,具體表現(xiàn)為當(dāng)計(jì)數(shù)器達(dá)到給定的超時(shí)值或未能在指定時(shí)間窗口內(nèi)刷新計(jì)數(shù)器的值,會(huì)觸發(fā)系統(tǒng)復(fù)位。
IWDG由MCU內(nèi)部獨(dú)立RC振蕩器產(chǎn)生的低速時(shí)鐘LSI(Low-speed Internal)驅(qū)動(dòng),因此即使主時(shí)鐘發(fā)生故障它也仍然有效。而WWDG是由從APB1分頻后得到的時(shí)鐘驅(qū)動(dòng),通過(guò)可配置的時(shí)間窗口來(lái)檢測(cè)應(yīng)用程序非正常的過(guò)遲或過(guò)早的操作。IWDG最適合應(yīng)用于那些需要看門狗作為一個(gè)在主程序之外,能夠完全獨(dú)立工作,并且對(duì)時(shí)間精度要求較低的場(chǎng)合,比如檢測(cè)由程序跑飛或死機(jī)引起的故障。WWDG最適合那些需要看門狗在精確計(jì)時(shí)窗口時(shí)間內(nèi)起作用的應(yīng)用程序,比如檢測(cè)由外部干擾或不可預(yù)見的邏輯條件造成的應(yīng)用程序背離正常運(yùn)行序列而產(chǎn)生的軟件故障。
IWDG詳細(xì)介紹
IWDG通俗的解釋它是一個(gè)12位的遞減計(jì)數(shù)器,當(dāng)計(jì)數(shù)器的值從某個(gè)值一直減到0的時(shí)候,就會(huì)產(chǎn)生一個(gè)系統(tǒng)復(fù)位信號(hào),即IWDG_RESET。如果在計(jì)數(shù)器沒減到0之前,“刷新”計(jì)數(shù)器的值,就不會(huì)產(chǎn)生復(fù)位信號(hào),“刷新”這個(gè)動(dòng)作就是我們經(jīng)常說(shuō)的喂狗。IWDG直接由VDD電壓域供電,即使在MCU停止模式和待機(jī)模式下仍然能照常工作。
1、IWDG功能框圖解析
下圖是獨(dú)立看門狗的功能框圖,分6個(gè)部分進(jìn)行說(shuō)明。

① LSI時(shí)鐘:IWDG的時(shí)鐘由低速時(shí)鐘LSI驅(qū)動(dòng),即使主時(shí)鐘發(fā)生故障它也仍然有效,非常獨(dú)立。這里需要注意的是,由于RC振蕩器的原理和特性(根據(jù)溫度和環(huán)境會(huì)有一定的漂移),所以IWDG的定時(shí)時(shí)間并不一定非常精確,只適用于對(duì)時(shí)間精度要求比較低的場(chǎng)合。
② 計(jì)數(shù)器時(shí)鐘和IWDG_PR寄存器:遞減計(jì)數(shù)器的時(shí)鐘由LSI經(jīng)過(guò)一個(gè)8位的預(yù)分頻器得到,預(yù)分頻器寄存器IWDG_PR的值決定分頻因子,分頻因子可以是:4、8、16、32、64、128、256。分頻因子(假設(shè)為W)和IWDG_PR值的關(guān)系是W = 4 * 2^IWDG_PR。
③ 狀態(tài)寄存器IWDG_SR:顧名思義,IWDG_SR表示獨(dú)立看門狗模塊的當(dāng)前狀態(tài),該寄存器只有位0:PVU(Prescaler Value Update)和位1:RVU(Reload Value Update)有效,且只能讀不能寫。PVU置1指示預(yù)分頻值的更新正在進(jìn)行中,更新完成后由硬件置0。RVU置1表示重裝載值的更新正在進(jìn)行中,更新完畢之后由硬件置0。只有當(dāng)RVU或PVU等于0的時(shí)候才可以進(jìn)行下一次更新操作。
④ 重載寄存器IWDG_RLR:重載寄存器是一個(gè)12位的寄存器,里面裝著要刷新到計(jì)數(shù)器的值,這個(gè)值的大小決定著獨(dú)立看門狗的溢出時(shí)間。溢出時(shí)間Tout(s) = (4 * 2^IWDG_PR) / fIWDG * IWDG_RLR。
⑤ 遞減計(jì)數(shù)器:IWDG的遞減計(jì)數(shù)器是一個(gè)12位寄存器,設(shè)置范圍是0~4095,一個(gè)計(jì)數(shù)器時(shí)鐘計(jì)數(shù)器就減1,當(dāng)計(jì)數(shù)器減到0時(shí),IWDG會(huì)產(chǎn)生一個(gè)系統(tǒng)復(fù)位信號(hào)IWDG_RESET,讓程序重新啟動(dòng)運(yùn)行,如果在計(jì)數(shù)器減到0之前刷新計(jì)數(shù)器的值(重新寫入新值),就不會(huì)產(chǎn)生復(fù)位信號(hào),重新刷新計(jì)數(shù)器值的這個(gè)動(dòng)作俗稱喂狗。
⑥ 密鑰寄存器IWDG_KR:密鑰寄存器IWDG_KR是獨(dú)立看門狗IWDG的一個(gè)核心控制寄存器,主要有三種寄存器值對(duì)應(yīng)三種控制效果。

2、IWDG庫(kù)函數(shù)配置步驟
我們接下來(lái)介紹如何驅(qū)動(dòng)CKS32F107xx系列產(chǎn)品的IWDG工作。具體配置步驟如下:
(1)解除寄存器寫保護(hù)(向IWDG_KR寫入0x5555)
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //使能寫權(quán)限
(2)設(shè)置IWDG預(yù)分頻因子和重裝載值
void IWDG_SetPrescaler(uint8_t IWDG_Prescaler); //設(shè)置IWDG預(yù)分頻值
void IWDG_SetReload(uint16_t Reload); //設(shè)置IWDG重裝載值
此時(shí)可以計(jì)算出看門狗溢出時(shí)間,比如我們最終設(shè)定IWDG_PR值為 4,IWDG_RLR值625,那么就可以得到 Tout = (4 * 2^IWDG_PR) / 40KHz * IWDG_RLR = 64 / 40 * 625 = 1s,看門狗的溢出時(shí)間是1s,只要在1s之內(nèi),寫入0xAAAA到IWDG_KR,就不會(huì)觸發(fā)看門狗復(fù)位。這里需要提醒大家的是,由于看門狗的時(shí)鐘不是準(zhǔn)確的40KHz,所以喂狗時(shí)間應(yīng)適當(dāng)提前。
(3)重載計(jì)數(shù)值喂狗(向IWDG_KR寫入0xAAAA)
IWDG_ReloadCounter(); //把重裝載寄存器IWDG_RLR的值放到計(jì)數(shù)器中
(4)開啟看門狗(向IWDG_KR寫入0xCCCC)
IWDG_Enable(); //使能 IWDG
通過(guò)上面4個(gè)步驟,就可以啟動(dòng)IWDG獨(dú)立看門狗了,之后在程序里面就必須周期性的進(jìn)行喂狗(一般會(huì)使用定時(shí)器定時(shí)的調(diào)用IWDG_ReloadCounter函數(shù)),否則將導(dǎo)致系統(tǒng)復(fù)位。注意IWDG在一旦開啟,系統(tǒng)運(yùn)行時(shí)就不能再被關(guān)閉,想要關(guān)閉,只能重啟,并且重啟之后要迅速關(guān)閉IWDG。
實(shí)驗(yàn)例程
為本期微課堂配套了一個(gè)例子,整體功能如下:
(1)系統(tǒng)上電后,LED會(huì)點(diǎn)亮,進(jìn)入主程序while循環(huán),不執(zhí)行任何操作,無(wú)法執(zhí)行喂狗程序,IWDG觸發(fā)系統(tǒng)復(fù)位,可以看到LED在不停的閃爍。
(2)按下USER按鍵,執(zhí)行喂狗操作,LED常亮。

-
mcu
+關(guān)注
關(guān)注
147文章
19094瀏覽量
402726 -
寄存器
+關(guān)注
關(guān)注
31文章
5616瀏覽量
130347 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3370瀏覽量
124368 -
獨(dú)立看門狗
+關(guān)注
關(guān)注
0文章
26瀏覽量
4520
原文標(biāo)題:MCU微課堂|CKS32F107XX系列獨(dú)立看門狗介紹
文章出處:【微信號(hào):中科芯MCU,微信公眾號(hào):中科芯MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
中科芯CKS32F107XX系列MCU的bxCAN介紹
獨(dú)立看門狗(IWDG)的基礎(chǔ)知識(shí)
STM32中的獨(dú)立看門狗和窗口看門狗是什么
MCU獨(dú)立看門狗和窗口看門狗的區(qū)別
什么是stm32看門狗?獨(dú)立看門狗和窗口看門狗工作原理解析
MCU獨(dú)立看門狗與窗口看門狗的區(qū)別
STM32中的獨(dú)立看門狗和窗口看門狗
STM32中的獨(dú)立看門狗和窗口看門狗
MCU如何集成看門狗的功能
CKS32F107xx系列時(shí)鐘系統(tǒng)具體配置方法講解
CKS32F107xx系列MCU中ADC介紹
中科芯CKS32F107XX系列MCU的電源控制介紹
中科芯CKS32F107XX系列MCU的獨(dú)立看門狗介紹
評(píng)論