一、概述
1、看門狗簡介
在由單片機構成的微型計算機系統中,由于單片機的工作常常會受到來自外界磁場的干擾,造成各種寄存器和內存的數據混亂,會導致程序指針錯誤,不在程序區,取出錯誤的程序指令等,都會陷入死循環。程序的正常運行被打斷,由單片機控制的系統無法繼續正常工作,會造成整個系統陷入停滯狀態,發生不可預料的后果。看門狗就是定期的查看芯片內部的情況,一旦發生錯誤就向芯片發出重啟的電路。看門狗命令在程序的中斷中擁有最高的優先級。
2、IWDG簡介
此器件具有兩個嵌入式看門狗外設,具有安全性高、定時準確及使用靈活的優點。兩個看門狗外設(獨立和窗口)均可用于檢測并解決由軟件錯誤導致的故障;當計數器達到給定的超時值時,觸發一個中斷(僅適用于窗口型看門狗)或產生系統復位。
獨立看門狗(IWDG)由其專用低速時鐘(LSI)驅動,因此即便在主時鐘發生故障時仍然保持工作狀態。窗口看門狗(WWDG)時鐘由APB1時鐘經預分頻后提供,通過可配置的時間窗口來檢測應用程序非正常的過遲或過早的操作。IWDG最適合應用于那些需要看門狗作為一個在主程序之外,能夠安全獨立工作,并且對時間精度要求較低的場合。WWDG最適合那些要求看門狗在精度計時窗口起作用的應用程序。
3、IWDG主要特性 
圖6_0獨立看門狗框圖

圖6_1 32kHz(LSI)頻率條件下IWDG超時周期的最小值/最大值框圖
二、硬件電路

圖6_2引腳分配圖

圖6_3電路原理圖
在iCore3雙核心開發板中,采用一個獨立的按鍵與STM32F407的PH15相連,限流電阻為1K。
三、實驗原理
STM32內部包含獨立看門狗,通過看門狗可以監控程序運行,程序運行錯誤時,未在規定時間喂狗,自動復位ARM。本實驗通過按下,停止喂狗,制造程序運行錯誤,從而產生復位。
四、源代碼
1、主函數
- /*
- * Name : main
- * Description : ---
- * Author : ysloveivy.
- *
- * History
- * --------------------
- * Rev : 0.00
- * Date : 11/21/2015
- *
- * create.
- * --------------------
- */
- int main(void)
- {
- int i;
- for(i = 0;i < 10000000;i++);
- led.initialize();
- key.initialize();
- iwdg.initialize();
- while(1){
- while(!KEY_INPUT); //按鍵按下進入循環,不再喂狗,1秒后燈熄滅
- iwdg.feed_dog();
- for(i = 0;i < 5000000;i++);
- LED_RED_ON;
- LED_GREEN_OFF;
- LED_BLUE_OFF;
- for(i = 0;i < 5000000;i++);
- LED_RED_OFF;
- LED_GREEN_ON;
- LED_BLUE_OFF;
- for(i = 0;i < 5000000;i++);
- LED_RED_OFF;
- LED_GREEN_OFF;
- LED_BLUE_ON;
- }
- }
復制代碼 2、初始化函數和喂狗函數
- /*
- * Name : initialize
- * Description : ---
- * Author : ysloveivy.
- *
- * History
- * -------------------
- * Rev : 0.00
- * Date : 11/21/2015
- *
- * create.
- * -------------------
- */
- static int initialize(void)
- {
- //1s喂狗
- IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //取消寄存器的寫保護
- IWDG_SetPrescaler(4); //設置獨立看門狗的預分頻系數
- IWDG_SetReload(625); //設置獨立看門狗的重裝載值
- IWDG_ReloadCounter(); //重裝載計數器
- IWDG_Enable(); //使能獨立看門狗
- return 0;
- }
- /*
- * Name : feed_dog
- * Description : ---
- * Author : ysloveivy.
- *
- * History
- * -------------------
- * Rev : 0.00
- * Date : 11/21/2015
- *
- * create.
- * -------------------
- */
- static void feed_dog(void)
- {
- IWDG_ReloadCounter();
- }
復制代碼 五、實驗現象
iCore3雙核心板三色LED交替閃爍i,當按鍵按下超過1s,看門狗復位ARM.。
六、代碼包下載
網盤:http://pan.baidu.com/s/1c0frjHm
|