[APM32E1]

APM32E103 复位源的判断

[复制链接]
332|2
手机看帖
扫描二维码
随时随地手机跟帖
Peixu|  楼主 | 2023-8-31 18:39 | 显示全部楼层 |阅读模式
本帖最后由 Peixu 于 2023-8-31 18:55 编辑

APM32E103 复位源判断
我们在开发项目的过程中MCU难免会遇到一些奇奇怪怪复位的情况,而这种方法可以方便我们观察判断是什么原因引起的复位。
在APM32用户手册我们可以看到控制/状态寄存器(RCM_CSTS)描述中了不同复位源。
a629450e5e1ef4ee79ecc4bbc3a25def
d2a305aa7f1d76b1e2b7b3463066f016
下面这段代码已经完成了把读取不同复位状态寄存器的出来
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函数中调用即可食用~

使用特权

评论回复
zhanglli| | 2023-8-31 21:23 | 显示全部楼层
是什么原因引起的复位

使用特权

评论回复
Peixu|  楼主 | 2023-9-4 11:06 | 显示全部楼层
zhanglli 发表于 2023-8-31 21:23
是什么原因引起的复位

可以使用这种方法来进行判断~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

32

帖子

0

粉丝