【WCH蓝牙系列芯片】-基于CH592开发板—复位状态寄存器(R8_RESET_STATUS)读取
-------------------------------------------------------------------------------------------------------------------------------------
在CH592芯片手册中可以看到有一个复位状态寄存器(R8_RESET_STATUS),这个 8 位寄存器记录了系统的复位状态和 FlashROM 的保护状态。可以看到低3位的数据对应着最近一次的复位状态。
比如低 3 位等于 001,说明是 上电复位,即芯片刚通电。
如果低 3 位等于 000,说明是 软件复位,通常是代码中调用了复位函数触发的。
如果是其他复位原因(如看门狗复位、外部引脚手动复位等),则再次打印数值。这样就可以程序运行中意外出现复位情况,便与分析复位原因,追查问题现象。


以蓝牙从机为例,在蓝牙从机中模拟各种的复位状态,然后再将复位寄存器的值,放在蓝牙广播中,这样便于在不方便接串口打印看日志的情况下,通过手机扫描蓝牙广播包的方式,来排查复位状态的原因。
void Print_Reset_Status_Binary(void) { uint8_t status = R8_RESET_STATUS; PRINT("================ RESET STATUS REPORT ================\n"); //打印原始 Hex 值 PRINT("R8_RESET_STATUS (Hex): 0x%02x\n", status); // 打印二进制字符串 (从 Bit 7 到 Bit 0) PRINT("R8_RESET_STATUS (Bin): "); for(int i = 7; i >= 0; i--) { if(status & (1 << i)) { PRINT("1"); } else { PRINT("0"); } // 加个空格区分高低半字节 if(i == 3) PRINT(" "); } PRINT("\n"); PRINT("---------------- Detail Parsing ---------------------\n"); // 解析 Bit 2-0: 复位标志 (最重要的部分) uint8_t rst_flag = status & RB_RESET_FLAG; PRINT("[Bit 2:0] Reset Source : %d%d%d (Bin) -> ", (rst_flag & 0x04) >> 2, (rst_flag & 0x02) >> 1, (rst_flag & 0x01)); switch(rst_flag) { case 0x00: // 000 PRINT("Software Reset (SR)\n"); break; case 0x01: // 001 PRINT("Power On Reset (RPOR)\n"); break; case 0x02: // 010 PRINT("WatchDog Timeout (WTR)\n"); break; case 0x03: // 011 PRINT("Manual Reset Pin (MR)\n"); break; case 0x05: // 101 PRINT("Wakeup from Shutdown (GRWSM)\n"); break; default: // 100, 110, 111 属于唤醒复位 if(rst_flag & 0x04) { PRINT("Wakeup Reset (LRW)\n"); } else { PRINT("Unknown\n"); } break; } PRINT("=====================================================\n"); }
这段程序读取了芯片内部的 复位状态寄存器 (R8_RESET_STATUS),并通过掩码操作判断具体的复位原因,首先将寄存器的值保存到变量 status 中,并以十六进制(Hex)格式打印出来和二进制格式进行打印。通过status & RB_RESET_FLAG屏蔽高 5 位(Bit 7-3),只保留低 3 位(Bit 2-0)。根据数据手册,这低 3 位决定了具体的复位原因, 判断具体的复位源。


在程序中,添加独立看门狗的程序,测试开启独立看门狗的功能,在主程序中不喂狗的情况下,程序复位,查看复位状态寄存器的值。



在一些特俗使用场合下,设备无法直接接触,可将这个复位状态寄存器 (R8_RESET_STATUS)值作为一个自定义的广播数数据,放在广播包中进行更新广播。这样可以通过手机APP直接观察复位状态寄存器值,判断复位原因。以看门狗复位为例,做个测试。



浙公网安备 33010602011771号