【stm32f103-學習筆記】測試看門狗
阿新 • • 發佈:2019-01-01
測試看門狗
開啟看門狗,程式跑飛時,看門狗會復位系統,嘗試恢復系統。
主程式:
#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);//初始化並開啟看門狗
...//復位後程序最先執行的位置
...//關於時鐘的設定
}
....
分析:
短接晶振一段時間後,看門狗起作用,並使系統成功復位,但系統如果在設定主頻時停住(沒有外部時鐘訊號),則無法繼續進行下一步,看門狗並沒有在復位後被初始化,即便此時恢復外部時鐘,系統已處於跑飛狀態,看門狗失效。