本帖最后由 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函数中调用即可食用~
|