本帖最后由 Peixu 于 2023-8-31 18:55 编辑
APM32E103 复位源判断
我们在开发项目的过程中MCU难免会遇到一些奇奇怪怪复位的情况,而这种方法可以方便我们观察判断是什么原因引起的复位。
在APM32用户手册我们可以看到控制/状态寄存器(RCM_CSTS)描述中了不同复位源。
下面这段代码已经完成了把读取不同复位状态寄存器的出来
- void Check_Reset(void)
- {
- printf(" CSR = %x\r\n", RCM->CSTS);
- if(RCM_ReadStatusFlag(RCM_FLAG_PINRST) != RESET ) // PINRST 引脚复位
- {
- printf("PIN reset \r\n");
- }
- if(RCM_ReadStatusFlag(RCM_FLAG_PWRRST) != RESET ) // 上电掉电复位
- {
- printf("POR/PDR reset \r\n");
- }
- if(RCM_ReadStatusFlag(RCM_FLAG_SWRST) != RESET ) // 软件复位
- {
- printf("Software reset \r\n");
- }
- if(RCM_ReadStatusFlag(RCM_FLAG_IWDTRST) != RESET ) // 独立看门狗复位
- {
- printf("Independent watchdog reset \r\n");
- }
- if(RCM_ReadStatusFlag(RCM_FLAG_WWDTRST) != RESET ) // 窗口看门狗复位
- {
- printf("Window watchdog reset \r\n");
- }
- if(RCM_ReadStatusFlag(RCM_FLAG_LPRRST) != RESET ) // 低功耗复位
- {
- printf("(Low-power reset \r\n");
- }
- RCM_ClearStatusFlag(); //清除复位标志
- printf("\r\n");
- }
最后在main函数中调用即可食用~
|