📢:如果你也對機器人、人工智能感興趣,看來我們志同道合?
📢:不妨瀏覽一下我的博客主頁【https://blog.csdn.net/weixin_51244852】
📢:文章若有幸對你有幫助,可點贊 👍 收藏 ?不迷路🙉
📢:內容若有錯誤,敬請留言 📝指正!原創文,轉載注明出處
文章目錄
- WWDG工作原理
- WWDG關鍵寄存器
- 上窗口值和下窗口值
- 問答
- WWDG使能后,遞減計數器就開始工作了是嗎?
- 上窗口值為0x5f,計數器初始值設置為0x7f,那么計數器遞減到什么時候開始喂狗?
- 是減到0x5e,立馬就喂狗嗎?
- 所以如果上窗口值設置的比較小,喂狗很可能來不及完成嗎?
WWDG工作原理
WWDG 內部有一個遞減計數器,從設定的初始值開始向下計數。它設定了一個特定的時間窗口,系統必須在這個窗口內完成特定的操作或響應,即計數器值必須落在有效刷新時間窗口內時才能成功喂狗。如果計數器計數到 0 時,未及時刷新,或者在計數器值大于上窗口閾值時就進行刷新,都會觸發系統復位。
WWDG關鍵寄存器
以 STM32 為例,窗口看門狗的功能通過以下寄存器配置實現:
控制寄存器(WWDG_CR)
位 7(WDGA):使能看門狗功能。
位 6:0(W [6:0]):設置上窗口閾值,決定有效刷新時間窗口的上限。
配置寄存器(WWDG_CFR)
位 8:7(EWI):使能提前喚醒中斷(當計數器值降至 0x40 時觸發中斷,用于提前提醒程序刷新看門狗)。
位 6:0(T [6:0]):設置計數器時鐘分頻系數,用于調整計數器遞減速度。
狀態寄存器(WWDG_SR)
僅 1 位(EWIF):記錄提前喚醒中斷是否發生,需軟件清零。
上窗口值和下窗口值
上窗口值和下窗口值是決定其有效刷新時間范圍的核心參數,二者共同定義了一個 “時間窗口”,程序必須在該窗口內完成 “喂狗”(刷新計數器)操作,否則將觸發系統復位。
下窗口值:是一個固定不變的閾值,在大多數微控制器(如 STM32)中,其值固定為 0x40。
上窗口值:是一個可通過寄存器配置的閾值,代表有效刷新時間窗口的上限。
在 STM32 中,上窗口值由 WWDG_CR 寄存器的 W [6:0] 位 定義,取值范圍為 0x40 < 上窗口值 ≤ 0x7F(即 65~127,共 63 個可選值)。
程序必須在計數器值從初始值遞減至小于等于上窗口值,且大于下窗口值(0x40)時進行刷新。
過早刷新(計數器值 > 上窗口值時刷新)會被視為無效操作,同樣會觸發復位。
問答
WWDG使能后,遞減計數器就開始工作了是嗎?
是的,WWDG 使能后,遞減計數器就開始工作
上窗口值為0x5f,計數器初始值設置為0x7f,那么計數器遞減到什么時候開始喂狗?
當計數器遞減到小于 0x5F 且大于等于 0x40 時就可以開始喂狗。即計數器從 0x7F 開始遞減,減到 0x5E 及以下(但不小于 0x40)時,就進入了可以喂狗的窗口范圍。
是減到0x5e,立馬就喂狗嗎?
窗口看門狗的喂狗時機是在計數器的值處于上窗口值和下窗口值之間時進行。當計數器從初始值 0x7F 遞減到 0x5E 時,已經進入了可喂狗的窗口范圍,但具體的喂狗時機可以根據程序的實際情況來決定,只要在計數器遞減到 0x40 之前完成喂狗操作,就可以避免看門狗復位。
所以如果上窗口值設置的比較小,喂狗很可能來不及完成嗎?
上窗口值決定了喂狗窗口的起始時間。上窗口值較小,意味著計數器從初始值遞減到可喂狗窗口的時間較短,留給程序執行到喂狗代碼的時間就少。例如,若初始值為 0x7F,上窗口值設為 0x45,計數器從 0x7F 遞減到 0x45 很快,可能程序還未執行到喂狗部分,計數器就已經接近或達到下窗口值 0x40 了,容易導致喂狗來不及。