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); }
|