STM32F103ZET6獨立看門狗

2022-08-24 13:51:15 字數 2044 閱讀 2053

1、iwdg簡介

stm32f103zet6的獨立看門狗(iwdg)是由內部lsi(內部約40khz低速時鐘)時鐘驅動的。由於iwdg是由內部低速時鐘驅動,所以就算主時鐘發生故障,iwdg依然能夠工作。

由於lsi是乙個內部rc時鐘,所以時鐘不是很準確的40khz,而是在30khz~60khz之間變化的時鐘,所以iwdg時間的計算並不是很準確,只能是乙個大概的值。一般用40khz來估算。

iwdg的計數器是乙個遞減計數器,當iwdg被啟用後,計數器開始向下遞減計數,當計數器計數至0x0000時產生復位訊號,使晶元復位。

當晶元處於停止和待機模式下工作時,iwdg依然繼續工作。

2、iwdg工作原理

當iwdg被啟用後,iwdg的計數器開始向下遞減計數,當iwdg的計數器的值遞減到0x000時,晶元就會復位。所以為了保證晶元正常工作,必須在iwdg的計數器的值遞減到0x000之前,重新給iwdg的計數器賦值,否者晶元就會不斷的復位。

必須注意的是:iwdg一旦啟用,就不能在被關閉,想要關閉iwdg,只能復位,並且在復位後不能開啟iwdg。

3、iwdg的配置

iwdg的暫存器並不複雜,只有iwdg_kr鍵值暫存器、iwdg_pr分頻暫存器、iwdg_rlr重裝載暫存器這3個暫存器。

iwdg_kr鍵值暫存器:

當向iwdg_kr暫存器寫入0xcccc後,iwdg就開始工作,iwdg的計數器從iwdg_rlr暫存器的值開始向下遞減計數,當計數到0x0000時,就會產生乙個復位訊號。

需要注意的是iwdg_rlr和iwdg_pr這兩個暫存器是有寫保護的,當操作這兩個暫存器的時候,必須先向iwdg_kr暫存器寫入0x5555,之後才能操作iwdg_rlr和iwdg_pr這兩個暫存器。

iwdg_pr暫存器:

iwdg_pr暫存器是iwdg的預分頻暫存器。iwdg_pr暫存器可以對iwdg的時鐘進行分頻,分頻係數從4分頻到256分頻。iwdg_pr暫存器只用到了低3位,pr[2:0]組成iwdg的分頻係數。如下:

iwdg_rlr暫存器:

iwdg_rlr暫存器只有低12位有效,所以iwdg的計數值最大只有0xfff。

iwdg的配置流程:

首先向iwdg_kr寫入0x5555,取消iwdg_pr和iwdg_rlr的寫保護;

取消寫保護之後設定iwdg_pr和iwdg_rlr的值;

為了將iwdg_rlr暫存器的值載入到iwdg的計數器中,將0xaaaa的值寫入iwdg_kr暫存器中。

最後將值0xcccc寫入iwdg_kr暫存器中啟動iwdg。

iwdg的時間計算:

假設iwdg的預分頻係數為pr,重裝載值為rlr,那麼iwdg的時間計算公式為:

t = ((4*2^pr)*rlr)/40000 (計算後的單位為秒)

4、hal庫操作iwdg

iwdg初始化

**如下:

void iwdg_init(void

)

iwdg_handle是iwdg的控制代碼。

iwdg_handle.instance = iwdg是將控制代碼指向外設iwdg。

iwdg_handle.init.prescaler = iwdg_prescaler_4是設定iwdg的分頻係數。

iwdg_handle.init.reload = 0xfff是設定iwdg的重裝載值。

hal_iwdg_init(&iwdg_handle)是將控制代碼傳入hal_iwdg_init函式對iwdg進行初始化。

iwdg重新更新計數器(餵狗)**如下:

void iwdg_clr(void

)

將控制代碼引數傳入hal_iwdg_refresh函式,hal_iwdg_refresh函式的作用是更新iwdg的計數值,防止iwdg的計數值計算到0x0000時產生復位訊號。

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 結論 同樣...