窗口看門狗介紹
窗口看門狗用于監(jiān)測由于外部干擾或不可預知的邏輯條件所產生的軟件錯誤,這樣的軟件錯誤通常會導致應用程序不按照預期的方式運行。除非程序在遞減計數器的T6位變?yōu)?之前刷新遞減計數器,看門狗電路將在一個預置的時間間隔后產生系統復位;如果在7位的遞減計數器數值達到窗口寄存器數值之前刷新遞減計數器,同樣會產生系統復位。這就意味著只能在一個有限的時間窗口內刷新遞減計數器。
窗口看門狗時序圖
計算公式:
(0x7F-0x3F)*(12288/16Mhz)
窗口看門狗功能說明
如果開啟了看門狗(設置了WDGA=1),當7位的遞減計數器(T[6:0]位)從0x40變?yōu)?x3F時(即T6變?yōu)?),看門狗產生一個復位信號并把復位引腳拉低。如果軟件刷新計數器時,計數器的數值大于窗口寄存器中的數值,同樣會產生復位。
在正常的操作期間,應用程序必須定期地寫入WDGCR寄存器,以避免產生復位;這個寫的動作必須在計數器的數值小于窗口寄存器的數值時進行。寫入WDGCR寄存器的數值必須是介于0x7F和0x40之間
● 開啟看門狗:
如果(通過選擇字節(jié))選擇了軟件看門狗,在系統復位后看門狗處于關閉狀態(tài)。設置WDGCR寄存器中的WDGA位將開啟看門狗,隨后在下次復位之前將不能關閉看門狗。如果(通過選擇字節(jié))選擇了硬件看門狗,看門狗將始終開啟,而WDGA位將不起作用。
● 控制遞減計數器:
遞減計數器是自由運行計數器:即使未開啟看門狗,它依然不斷地遞減計數。當開啟看門狗時,必須設置T6位以避免立刻產生復位。T[5:0]位中包含了看門狗產生復位前允許的時間延遲;因為寫入WDGCR寄存器時,預分頻器的狀態(tài)是不可知的,所以這個時間延遲介于一個最小和最大數值之間。窗口寄存器(WDGWR)的數值是指定窗口的高限:為防止復位,必須在遞減計數器的數值小于窗口寄存器的數值并大于0x3F時刷新遞減計數器。
注意:T6 位可以用于產生一個軟件復位(即設置WDGA位同時清除 T6 位)
WWDG_CR寄存器
單片機源程序如下:
- /***********************************************************************
- * 開發(fā)平臺: 劍齒虎STM8開發(fā)板
- * 作 者: 劉洋
- * 版 本: V1.0
- * 日 期: 2017-11-25
- *
- * STVD開發(fā)環(huán)境 版本 V4.3.12
- * ST庫函數 版本 V2.2.0
- ***********************************************************************/
- #include "pbdata.h"//引入自定義公共頭文件
- void BSP_Configuration(void);//硬件初始化函數聲明
- /***********************************************************************
- * 函 數 名: main
- * 功能說明: c程序入口
- * 形 參:無
- * 返 回 值: 錯誤代碼(無需處理)
- ***********************************************************************/
- int main(void)
- {
- BSP_Configuration();//硬件驅動初始化函數
-
- printf("窗口看門狗測試程序\r\n");
-
- while(1)//主程序循環(huán),反復執(zhí)行循環(huán)體里的語句
- {
- WWDG_Refresh();
- }
- }
- /***********************************************************************
- * 函 數 名: BSP_Configuration
- * 功能說明: 初始化硬件設備。只需要調用一次。該函數配置CPU寄存器和外設的寄存器并初始化一些全局變量。
- * 形 參:無
- * 返 回 值: 無
- ***********************************************************************/
- void BSP_Configuration(void)
- {
- CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//時鐘速度為內部16M,1分頻,
- UART1_Congfiguration();//調用RS232串口1初始化函數
- LED_Init();//調用LED初始化函數
- delay_ms(1000);
- WWDG_Configuration();
- rim();//打開總中斷
- }
- /*斷言函數:它的作用是在編程的過程中為程序提供參數檢查*/
- #ifdef USE_FULL_ASSERT
- void assert_failed(u8* file,u32 line)
- {
- while(1)
- {
- }
- }
- #endif
復制代碼
所有資料51hei提供下載:
【眾拳】劍齒虎STM8開發(fā)板的實驗代碼下載:
眾拳STM8窗口看門狗(WWDG)實驗程序.zip
(1.82 MB, 下載次數: 31)
2017-12-16 14:56 上傳
點擊文件名下載附件
|