- #include "gd32f1x0_rcu.h" // 必须包含RCU寄存器定义头文件
- void check_reset_source(void) {
- // 1. 读取复位状态寄存器(使用GD32标准库宏定义,避免手动计算地址)
- uint32_t reset_flags = RCU->RSTSCK; // RCU->RSTSCK 等价于访问复位状态寄存器
-
- // 2. 解析复位源(根据GD32F1x0数据手册,各bit定义如下)
- if (reset_flags & RCU_RSTSCK_PORRST) {
- // 上电复位(POR)/掉电复位(PDR)
- } else if (reset_flags & RCU_RSTSCK_EXTRST) {
- // 外部复位(NRST引脚)
- } else if (reset_flags & RCU_RSTSCK_WDTRST) {
- // 窗口看门狗(WWDG)复位 或 独立看门狗(IWDG)复位
- } else if (reset_flags & RCU_RSTSCK_SWRST) {
- // 软件复位(通过NVIC_SystemReset()触发)
- } else if (reset_flags & RCU_RSTSCK_LPRST) {
- // 低功耗复位(从深度睡眠模式唤醒时的复位)
- }
-
- // 3. 清除复位标志(必须手动清除,否则下次读取仍为旧值)
- RCU->RSTSCK |= RCU_RSTSCK_RSTFCLR; // 写1清除所有复位标志
- }
|