看門狗芯片--SP706SEN--調試記錄


一、前因后果

工程中,設備為了穩定可靠,會增加外部看門狗,但是外部看門狗一旦啟動,就停不下來,必須在固定的時間范圍內進行喂狗,不然看門狗芯片就會產生一個復位信號復位MCU。以前大家都認為看門狗一旦工作,就不能進行控制,也不便於程序調試,所以在硬件上,會使用單片機來控制看門狗芯片的電源,原理圖如下:

最近在工程中由於MCU的復位信號一直是低電平,導致程序下不下去,最后查原因,發現是看門狗電路這一塊造成的,然后就仔細看SP706SEN的手冊,發現WDI引腳這樣描述:如果WDI引腳處於浮空或高阻狀態,則禁止看門狗功能;

二、程序處理

在程序中,初始化引腳時,把WDI初始化為浮空輸入,當需要開啟看門狗的時候,把WDI引腳設置為推挽輸出,開啟后,在定時器函數里翻轉該引腳狀態,以達到喂狗的目的,程序如下:

 1   /*Configure GPIO pin : PtPin */
 2   GPIO_InitStruct.Pin = WATCHDOG_FLAG_Pin;
 3   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;    
 4   GPIO_InitStruct.Pull = GPIO_NOPULL;
 5   HAL_GPIO_Init(WATCHDOG_FLAG_GPIO_Port, &GPIO_InitStruct);
 6 
 7 }
 8 
 9 /* USER CODE BEGIN 2 */
10 // 開啟看門狗函數
11 void watchDogEN(void)
12 {
13   GPIO_InitTypeDef GPIO_InitStruct;
14   GPIO_InitStruct.Pin = WATCHDOG_FLAG_Pin;
15   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
16   GPIO_InitStruct.Pull = GPIO_NOPULL;
17   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
18   HAL_GPIO_Init(WATCHDOG_FLAG_GPIO_Port, &GPIO_InitStruct);
19 }
 1 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
 2 {
 3     if(htim == (&htim3))    // 定時1s
 4     {        
 5         HAL_GPIO_TogglePin(WATCHDOG_FLAG_GPIO_Port, WATCHDOG_FLAG_Pin);    // 喂狗
 6         HAL_GPIO_TogglePin(RUN_GPIO_Port, RUN_Pin);
 7     }
 8     else if (htim == (&htim4))
 9     {        
10         SensRxFlag = 1;
11     }
12 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM