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);
}
下一篇:一种430软复位方法(原创)
- Keil MDK破解过程详解[18年05月20日 11:11]
- STM32F407之模拟I2C(二)之24C128[18年05月20日 12:18]
- STM32F1使用I/0模拟I2C接口[18年05月20日 12:17]
- STM32模拟I2C程序[18年05月20日 12:13]
- STM8S 模拟I2C程序[18年05月20日 12:14]
- 普通IO口模拟实现I2C通信及应用解析[18年05月20日 12:12]