1. 程式人生 > 其它 >【STM32F4】十、視窗看門狗(WWDG)

【STM32F4】十、視窗看門狗(WWDG)

技術標籤:STM32stm32嵌入式arm

目錄

一、視窗看門狗概述

1. 視窗看門狗與獨立看門狗的不同

1.1 獨立看門狗

在講視窗看門狗之前,我們先簡單說一說獨立看門狗。想詳細瞭解獨立看門狗的讀者,請進入這條連結

獨立看門狗的主要組成器件包括時鐘、遞減計數器、鍵暫存器、重灌載暫存器

獨立看門狗啟動後,遞減計數器中的數字就會每時鐘週期都減1,直到減為0,獨立看門狗就認為程式跑飛了,則會引發系統復位

為了避免看門狗引發復位,我們就需要告訴看門狗“程式沒有跑飛,仍在我的掌控之中” ,如何通知看門狗這條資訊呢?我們就需要給鍵暫存器發一個裝載訊號,鍵暫存器接到訊號後,就會命令重灌載暫存器把它裝載的值賦給遞減計數器,以此來更新遞減計數器。

只要我們保證在每次遞減計數器減到0之前能更新它其中的數值,就能保證看門狗不會引發復位,這個操作就是我們常說的“喂狗”。

示意圖大致如下,OneNote用得不好請見諒……

1.2 視窗看門狗

視窗看門狗,其最重要的組成部件仍然是時鐘、遞減計數器、鍵暫存器、重灌載暫存器

,而關鍵在於它的理解視窗

視窗看門狗的視窗指的是 上限時間/上視窗下限時間/下視窗,其中:

上限時間下限時間實際上就是兩個不同的數值,在遞減計數器從初值開始遞減的過程中,會經過這兩個數值。
遞減計數器初值 > 上限時間 > 下限時間

上限時間下限時間有各自不同的作用:

  • 啟動視窗看門狗後,遞減計數器開始從初值遞減;
  • 如果在減到上限時間前,使用者對遞減計數器的值進行了重灌載,那麼將引發系統復位
  • 如果在上限時間減到下限時間的視窗期間,使用者對遞減計數器的值進行了重灌載,那麼這是正常的喂狗,程式正常執行,不會引發復位
  • 如果在減到下限時間時,使用者仍沒有喂狗,那麼將同獨立看門狗
    減到0的效果一樣,引發系統復位

注: 下限時間不是0,它的值由系統固定,是0x3F

附上視窗看門狗的內部結構示意圖如下:

工作流程示意圖大致如下:

1.3 視窗看門狗可引發中斷

視窗看門狗引發中斷,使用者可以在中斷服務函式中進行喂狗。

獨立看門狗不能引發中斷。

1.4 時鐘來源、精度不同

獨立看門狗的原始時鐘訊號來源於LSI,是獨立時鐘,但頻率低,精度低。
視窗看門狗的時鐘來源於PCLK1,並非獨立時鐘,但頻率高,精度高。


2. 視窗看門狗的工作細節

2.1 在何時喂狗比較合適?

上面講到,下限時間是一個固定值,是0x3F,即二進位制011 1111

那麼,在遞減計數器從100 0000減到011 1111的瞬間,也就是即將引發復位的前一刻,視窗看門狗會先引發中斷(若其中斷已被使能),使用者就可以在中斷服務函式中編寫程式,進行喂狗

2.2 計數器和控制暫存器配合工作,產生中斷

上面提到,在 100 0000 遞減到 011 1111 的瞬間,會引發中斷,那麼,實際上只要檢測這個二進位制數的第6位(從0開始計位數)是否從1變到了0,就可以判斷是否要引發中斷。

計數器的示意圖如下:

可以看到,計數器共有八個位,分別為T0、T1、T2、T3、T4、T5、T6,用來計數;以及一個WDGA,用來使能視窗看門狗。

而系統(視窗看門狗控制暫存器WWDG_CR)只要檢測T6位是否從1變到了0,就能知道是否要引發中斷。

3. 視窗看門狗超時時間計算

分頻係數計算:

分頻暫存器設定為WDG_TB時,實際得到的分頻係數是`

4096 x ( 2 ^ WDG_TB)

由於視窗看門狗的原始時鐘從PCLK接收而來,頻率非常高(精確),因此要固定得對它除以4096進行分頻,以減小其頻率;然後再除以2 ^ WDG_TB進一步分頻。

根據分頻係數,以及原始頻率Fpclk,可以得到新時鐘訊號的新時鐘週期新時鐘頻率的倒數**,即:

4096 x ( 2 ^ WDG_TB) / Fpclk

時鐘週期 x 遞減計數器初值:

看門狗的超時時間是指遞減計數器減到下限時間所用的總時間,所以在得到時鐘週期(遞減計數器每個時鐘週期減1)後,還要乘上遞減計數器的初值,得到最終的視窗看門狗超時時間,即:

4096 x ( 2 ^ WDG_TB)  x (T[5:0] + 1)/ Fpclk

上式中T[5:0] + 1中,**T[5:0]**是指遞減計數器二進位制初值的 0 ~ 5 位,為什麼不取第6位呢?

因為我們想要的是從初值減到下限時間的值,而遞減計數器總共有6位,下限時間是011 1111,加1後得到100 0000;而遞減計數器初值是1xx xxxx,用1xx xxxx 減去 100 0000,得到的自然就是 0 ~ 5 位,即T[5:0],也就是xx xxxx。
在此基礎上加1,是為了彌補100 0000到011 1111的1次計數。

二、視窗看門狗程式編寫

1. 視窗看門狗常用庫函式