CH582常供电的情况下,出现上电复位问题

CH582,设备是24小时常供电的

开启了看门狗,OTA等等,可能会出现软件复位的情况

但是通过日志,却出现了"上电复位"的情况

void Get_Last_Reset_Sta(void)
{
    uint8_t ResetSta = 0;
    ResetSta = SYS_GetLastResetSta() & 0x07; // 获取系统上次复位状态
    switch (ResetSta)
    {
    case 0:
        PRINT("软件复位 = %#04X \r\n", ResetSta);
        break;
    case 1:
        PRINT("上电复位 RPOR = %#04X \r\n", ResetSta);
        Erase_All_Records();                  // 擦除Flash
        break;
    case 2:
        PRINT("看门狗超时复位 WTR = %#04X \r\n", ResetSta);
        break;
    case 3:
        PRINT("外部手动复位 MR = %#04X \r\n", ResetSta);
        break;
    case 5:
        PRINT("从下电模式唤醒时的复位 GRWSM = %#04X \r\n", ResetSta);
        break;

    default:
        PRINT("唤醒复位 LRW = %#04X \r\n", ResetSta);
        break;
    }
}

因为"上电复位"对我很重要,用来判别设备是不是第一次上电

理论上我都没有断过电,为什么会出现"上电复位"???


或者还有什么别的方法,用来判断设备是不是第一次上电???

您好,代码正常运行的情况下是可以靠复位状态寄存器判断上电的,但是运行异常时,该寄存器的值也不可预期。

常见的情况是ram被篡改,代码跑进了hardfault中断并复位,此时上电复位寄存器的值不可预期。

参考下篇博客添加串口打印,跟踪一下代码运行是否正常。

CH57x/CH58x/CH32V wch risc-v 芯片hardfault问题追踪&程序卡死追踪 - iot-fan - 博客园 (cnblogs.com)


只有登录才能回复,可以选择微信账号登录