stm32_reset_cause: handle POR/PDR reset cause
This commit is contained in:
parent
d2c19fab24
commit
647db3be46
|
@ -252,7 +252,9 @@ void errorHandlerWriteReportFile(FIL *fd, int index) {
|
|||
}
|
||||
|
||||
auto cause = getMCUResetCause();
|
||||
if ((cause != Reset_Cause_NRST_Pin) && (cause != Reset_Cause_BOR) && (cause != Reset_Cause_Unknown)) {
|
||||
// TODO: should we also report Unknown?
|
||||
if ((cause != Reset_Cause_NRST_Pin) && (cause != Reset_Cause_BOR) &&
|
||||
(cause != Reset_Cause_POR) && (cause != Reset_Cause_Unknown)) {
|
||||
// not an expected cause
|
||||
needReport = true;
|
||||
}
|
||||
|
|
|
@ -106,6 +106,7 @@ typedef enum {
|
|||
Reset_Cause_WWatchdog, // Window watchdog
|
||||
Reset_Cause_Soft_Reset, // NVIC_SystemReset or by debugger
|
||||
Reset_Cause_NRST_Pin, // Reset from NRST pin
|
||||
Reset_Cause_POR, // POR/PDR reset
|
||||
Reset_Cause_Illegal_Mode, // Reset after illegal Stop, Standby or Shutdown mode entry
|
||||
Reset_Cause_BOR, // BOR reset
|
||||
Reset_Cause_Firewall, // Firewall reset
|
||||
|
|
|
@ -15,20 +15,22 @@
|
|||
|
||||
#ifdef STM32H7XX
|
||||
// Reset Status Register flags for H7
|
||||
#define BORRSTF RCC_RSR_BORRSTF
|
||||
#define PINRSTF RCC_RSR_PINRSTF
|
||||
#define PORRSTF RCC_RSR_PORRSTF
|
||||
#define SFTRSTF RCC_RSR_SFTRSTF
|
||||
#define IWDGRSTF RCC_RSR_IWDG1RSTF
|
||||
#define WWDGRSTF RCC_RSR_WWDG1RSTF
|
||||
#define SFTRSTF RCC_RSR_SFTRSTF
|
||||
#define PINRSTF RCC_RSR_PINRSTF
|
||||
#define LPWRRSTF RCC_RSR_LPWRRSTF
|
||||
#define BORRSTF RCC_RSR_BORRSTF
|
||||
#else
|
||||
// Control/Status Register flags for F4/F7
|
||||
#define BORRSTF RCC_CSR_BORRSTF
|
||||
#define PINRSTF RCC_CSR_PINRSTF
|
||||
#define PORRSTF RCC_CSR_PORRSTF
|
||||
#define SFTRSTF RCC_CSR_SFTRSTF
|
||||
#define IWDGRSTF RCC_CSR_IWDGRSTF
|
||||
#define WWDGRSTF RCC_CSR_WWDGRSTF
|
||||
#define SFTRSTF RCC_CSR_SFTRSTF
|
||||
#define PINRSTF RCC_CSR_PINRSTF
|
||||
#define LPWRRSTF RCC_CSR_LPWRRSTF
|
||||
#define BORRSTF RCC_CSR_BORRSTF
|
||||
#endif // STM32H7XX
|
||||
|
||||
static Reset_Cause_t readMCUResetCause() {
|
||||
|
@ -42,18 +44,20 @@ static Reset_Cause_t readMCUResetCause() {
|
|||
RCC->CSR |= RCC_CSR_RMVF;
|
||||
#endif
|
||||
|
||||
if (cause & IWDGRSTF) {
|
||||
if (cause & BORRSTF) {
|
||||
return Reset_Cause_BOR;
|
||||
} else if (cause & PINRSTF) {
|
||||
return Reset_Cause_NRST_Pin;
|
||||
} else if (cause & PORRSTF) {
|
||||
return Reset_Cause_POR;
|
||||
} else if (cause & SFTRSTF) {
|
||||
return Reset_Cause_Soft_Reset;
|
||||
} else if (cause & IWDGRSTF) {
|
||||
return Reset_Cause_IWatchdog;
|
||||
} else if (cause & WWDGRSTF) {
|
||||
return Reset_Cause_WWatchdog;
|
||||
} else if (cause & SFTRSTF) {
|
||||
return Reset_Cause_Soft_Reset;
|
||||
} else if (cause & PINRSTF) {
|
||||
return Reset_Cause_NRST_Pin;
|
||||
} else if (cause & LPWRRSTF) {
|
||||
return Reset_Cause_Illegal_Mode;
|
||||
} else if (cause & BORRSTF) {
|
||||
return Reset_Cause_BOR;
|
||||
}
|
||||
return Reset_Cause_Unknown;
|
||||
}
|
||||
|
@ -75,6 +79,8 @@ const char *getMCUResetCause(Reset_Cause_t cause) {
|
|||
return "NVIC_SystemReset or by debugger";
|
||||
case Reset_Cause_NRST_Pin:
|
||||
return "Reset from NRST pin";
|
||||
case Reset_Cause_POR:
|
||||
return "Power on/power-down reset";
|
||||
case Reset_Cause_Illegal_Mode:
|
||||
return "Reset after illegal Stop, Standby or Shutdown mode entry";
|
||||
case Reset_Cause_BOR:
|
||||
|
|
Loading…
Reference in New Issue