STM32 關於復位型別的判斷及軟體復位 bug
STM 32在復位時,有嚴重BUG:
1. 上電覆位和外接的看門狗晶片重啟復位是無法區分開來的!RCC_FLAG_BORRST, RCC_FLAG_PINRST, RCC_FLAG_LPWRRST三個都復位了!
2. 這樣當要在上電覆位初始化關鍵程式碼時,這些程式碼看門狗復位則不用重啟,這個關鍵程式碼會導致應用業務的異常!若兩個中斷分不開,導致系統異常看門狗復位時影響業務!
/* RCC_FLAG_BORRST: POR/PDR or BOR reset //Power-on/power-down reset (POR/PDR reset) or brownout (BOR) reset RCC_FLAG_PINRST: Pin reset //NRST pin可能為看門狗重啟 RCC_FLAG_PORRST: POR/PDR reset RCC_FLAG_SFTRST: Software reset RCC_FLAG_IWDGRST: Independent Watchdog reset RCC_FLAG_WWDGRST: Window Watchdog reset RCC_FLAG_LPWRRST: Low Power reset */ /***************************************************************************************** 函 數 名: SysRstSrcRecord 參 數: 無 返 回 值: 系統重啟次數記錄 描 述: 記錄系統重啟的方式記錄 作 者: 李少雄 版 本: V1.0 2012年11月12日 ******************************************************************************************/ u8 SysRstSrcRecord(u8 *pstRest) { //u8 uchInfoChange=0; pstRest[0] = RCC_GetFlagStatus(RCC_FLAG_BORRST); pstRest[1] = RCC_GetFlagStatus(RCC_FLAG_PINRST); pstRest[2] = RCC_GetFlagStatus(RCC_FLAG_PORRST); pstRest[3] = RCC_GetFlagStatus(RCC_FLAG_SFTRST); pstRest[4] = RCC_GetFlagStatus(RCC_FLAG_IWDGRST); pstRest[5] = RCC_GetFlagStatus(RCC_FLAG_WWDGRST); pstRest[6] = RCC_GetFlagStatus(RCC_FLAG_LPWRRST);
} --------------------- 作者:love_maomao 來源:CSDN 原文:https://blog.csdn.net/love_maomao/article/details/8234084?utm_source=copy 版權宣告:本文為博主原創文章,轉載請附上博文連結!