STM32F103ZET6視窗看門狗

2022-08-24 13:51:12 字數 2370 閱讀 3846

1、wwdg簡介

視窗看門狗(wwdg)通常被用來檢測由外部干擾或不可預見的邏輯條件造成的應用程式背離正常的執行序列而產生的軟體故障。

wwdg是乙個不斷往下遞減的計數器。當wwdg的計數器遞減到固定值0x40時,還沒有重新賦值計數值(俗稱餵狗),就會產生乙個復位訊號,使晶元復位,這個0x40的固定值就叫做視窗的下限值,視窗下限值不需要設定。

wwdg還有乙個視窗上限值,當wwdg的計數器的值大於視窗上限值的時候,如果給wwdg的計數器重新賦值(餵狗),也會產生乙個復位訊號,使晶元復位,視窗的上限值可以通過程式設定。

也就是說在使用wwdg的時候,給wwdg的計數器重新賦值不能夠太早,也不能夠太晚,必須在一定時間之內。

2、wwdg的時間計算

wwdg是掛載在apb1匯流排上的外設,所以wwdg的時鐘源來自pclk1。需要注意的是pclk1在給wwdg提供時鐘源的時候已經被4096分頻了,這個分頻是晶元預設的,沒辦法更改。所以wwdg時鐘的時鐘源應該是pclk1/4096。

由於wwdg不像iwdg一樣有獨立的時鐘源,在使用wwdg的時候,需要先使能wwdg的時鐘,否則無法使用。

wwdg的時鐘可以被分頻,通過配置wwdg_cfr配置暫存器的bit8~bit7位的wdgtb[1:0]可以對來自pclk1/4096的時鐘進行分頻,如下:

所以wwdg的時鐘計算公式如下:

wwdg_clk = pclk1/(4096*pr)

pclk1是apb1匯流排時鐘,pr是wwdg的分頻係數。

得出wwdg的時鐘大小之後,就可以算出wwdg的計數器每遞減一次所經過的時間,如下:

step_time = 1/wwdg_clk = (4096*pr)/pclk1

如果pclk1的單位為mhz,那麼計算出來的單位就是us級;如果pclk1的單位為khz,那麼計算出來的單位就是ms級。

假設pclk1 = 36mhz,那麼wwdg的最小超時時間為:

得出wwdg計數器每遞減一次所經過的時間後,還需要根據wwdg計數器的初值和固定值0x40計算wwdg計數器的遞減次數。假設初值設定為x,那麼wwdg產生復位訊號的時間計算如下:

twwdg = ((4096*pr)/pclk1)*(x - 0x40)

3、wwdg的視窗值

wwdg計數器的值必須在乙個範圍內才可以重新賦值,這個範圍又視窗上限值和視窗下限值組成。

wwdg的視窗下限值是乙個固定值,該值固定位0x40。

wwdg的視窗上限值是由wwdg_cfr配置暫存器的bit6~bit0位組成。wwdg的視窗上限值必須大於固定值0x40,如果小於等於固定值0x40就失去了視窗的價值,而且也不能大於計數器的值,由於wdg計數器的最大值為0x7f,所以wwdg的視窗上限值必須小於0x7f。

在實際使用中,一般使用wwdg的中斷功能,在中斷服務函式中對wwdg進行餵狗。如果開啟了wwdg的中斷功能,當wwdg的計數器逐漸遞減到0x40的時候就會產生中斷,在中斷服務函式內對wwdg的計數器重新賦值。如果wwdg的計數器遞減到0x3f時,wwdg的計數器還沒有重新賦值,那麼就會產生復位。      

3、wwdg配置流程

在使用wwdg之前,必須先使能wwdg的時鐘,否者無法使用wwdg的功能。

通過wwdg_cfr配置暫存器設定wwdg的時鐘分頻係數、視窗上限值、中斷啟動。

通過wwdg_cr控制暫存器設定wwdg的使能、計數器初值。

通過nvic配置wwdg的中斷分組、優先順序、中斷使能。

編寫中斷服務函式進行餵狗操作。

4、hal庫操作wwdg

初始化**如下: 

wwdg_handletypedef wwdg_handle_init;

void wwdg_init(void

)

首先定義乙個wwdg的控制代碼結構體變數,該變數是乙個全域性變數。

通過hal_wwdg_init函式對wwdg進行初始化,設定分頻係數、計數器初值、視窗上限值,開啟中斷。

通過hal_nvic_setpriority函式設定wwdg的中斷優先順序。

通過hal_nvic_enableirq函式使能wwdg的中斷功能。

wwdg中斷服務函式如下:

void wwdg_irqhandler(void

)void hal_wwdg_earlywakeupcallback(wwdg_handletypedef *hwwdg)

hal_wwdg_earlywakeupcallback是wwdg的**函式,在hal_wwdg_irqhandler函式中呼叫。

通過hal_wwdg_refresh函式對wwdg的計數器進行重新賦值。

STM32F103ZET6學習總結

1.任何外設在使用之前,必須先使能相應的時鐘。2.使用不同外設時,gpio引腳應該如何配置?1 gpio mode ain 模擬輸入 2 gpio mode in floating 浮空輸入 3 gpio mode ipd 下拉輸入 4 gpio mode ipu 上拉輸入 5 gpio mode ...

STM32F103ZET6移植FreeRTOS過程

2.解壓 我們需要幾個檔案 1 在freertosv9.0.0 freertos source 下的所有c檔案 ps 並不是所有都一定要用,按需要取 2 在freertosv9.0.0 freertos source include整個資料夾 3 在freertosv9.0.0 freertos s...

STM32F103ZET6 電容觸控按鍵

開關閉合,電容充電,直至電容兩端電壓 v1 rc電路充放電公式 vt v0 v1 v0 1 exp t rc v0 為電容上的初始電壓值 v1 為電容最終可充到或放到的電壓值 vt 為t時刻電容上的電壓值。如果v0為0,也就是從0v開始充電。那麼公式簡化 vt v1 1 exp t rc 結論 同樣...