1. 程式人生 > >【stm32f103-學習筆記】測試看門狗

【stm32f103-學習筆記】測試看門狗

測試看門狗

開啟看門狗,程式跑飛時,看門狗會復位系統,嘗試恢復系統。

主程式:

    #include "...."
    int main(void)
{

    fun_init();    //延時函式、其他外設初始化
    IWDG_Init(6,350);//初始化並開啟看門狗
    while(1)
    {
        IWDG_Feed(); //喂狗
        TASK_1();  //任務1
        TASK_2();//任務2
    }
}

我的測試方法:
看門狗的時鐘和主頻不相同,設定使用外部晶振;在系統正常工作的時候用一根導線將晶振兩隻腳短接,主時鐘沒了,系統就相當於跑飛了,即沒有正常喂狗;
恢復外部時鐘一段時間後,按理應該是會產生看門狗復位;可是測試了幾次後發現:系統經常會出現跑飛但系統並不重啟的情況。

幾經查詢除錯,在系統時鐘初始化前 初始化看門狗,喂狗位置不變,按上文測試方法測試,測試通過

修改程式,將看門狗初始化位置修改:

.....
extern  IWDG_Init(6,350);
void SystemInit (void) 
{
    IWDG_Init(6,350);//初始化並開啟看門狗
    ...//復位後程序最先執行的位置
    ...//關於時鐘的設定
}
....

分析:
短接晶振一段時間後,看門狗起作用,並使系統成功復位,但系統如果在設定主頻時停住(沒有外部時鐘訊號),則無法繼續進行下一步,看門狗並沒有在復位後被初始化,即便此時恢復外部時鐘,系統已處於跑飛狀態,看門狗失效。