由於在standby mode,看門狗仍然能繼續工作,但是其他時鐘都關閉了,沒法喂狗,這樣會導致mcu不停復位。網上找的方法如下:1. 開啓RTC,定期喂狗後再次睡眠。該方法視乎可行,但是不夠省電。
2,使用復位標誌,區分上電覆位和看門狗復位。
if (RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET)
但是實際測試有問題,STM32無法區分上電覆位和看門狗復位。
爲此借鑑了其他方法總結了如下結果:
1. MCU 正常啓動後,在進入省電模式的函數那裏把省電內容替換位系統復位。
2. 在省電模式(即系統復位)後,mcu會重啓,初始化IO口讀取存儲在EEPROM的省電標誌位,如果位1,直接開啓看門狗並運行系統,如果爲0,則進入休眠函數。爲什麼這種方法可行,是因爲在進入休眠模式之前看門狗還沒有啓用,所有就不存在喂狗問題。
此外如果是上電立馬開機,則不用判斷標誌位,且發生看門狗復位也能開機。如果是需要按鍵開機,則需要判斷省電標誌位, 如果是看門狗復位也需要判斷標誌位, 以此判斷是否開機。