下列函数应该是st通用的MCU重启原因函数,但没在其他st型号测过,暂不确定。
void checkResetReason(void)
{
uint32_t resetReason = RCC->CSR; // 读取复位控制与状态寄存器(RCC_CSR)
if (resetReason & RCC_CSR_PINRSTF)
{
// 通过外部复位按钮引起的复位
rt_kprintf("External reset triggered by external reset button.\n");
}
if (resetReason & RCC_CSR_SFTRSTF)
{
// 软件复位引起的复位
rt_kprintf("Software reset triggered.\n");
}
if (resetReason & RCC_CSR_WDGRSTF)
{
// 看门狗定时器引起的复位
rt_kprintf("Watchdog timer reset triggered.\n");
}
if (resetReason & RCC_CSR_BORRSTF)
{
// 电压监测(BOD)复位引起的复位
rt_kprintf("Brown-out reset triggered.\n");
}
if (resetReason & RCC_CSR_PORRSTF)
{
// 电源复位引起的复位
rt_kprintf("Power-on reset triggered.\n");
}
if (resetReason & RCC_CSR_SFTRSTF)
{
// 突发电源丢失复位引起的复位
rt_kprintf("Supply voltage under-threshold reset triggered.\n");
}
// 清除重启原因标志位
RCC->CSR |= RCC_CSR_RMVF; // RCC_CSR_RMVF is used to clear the reset flags
}