[APM32E1] APM32E103 复位源的判断

[复制链接]
 楼主| Peixu 发表于 2023-8-31 18:39 | 显示全部楼层 |阅读模式
本帖最后由 Peixu 于 2023-8-31 18:55 编辑

APM32E103 复位源判断
我们在开发项目的过程中MCU难免会遇到一些奇奇怪怪复位的情况,而这种方法可以方便我们观察判断是什么原因引起的复位。
在APM32用户手册我们可以看到控制/状态寄存器(RCM_CSTS)描述中了不同复位源。
a629450e5e1ef4ee79ecc4bbc3a25def
d2a305aa7f1d76b1e2b7b3463066f016
下面这段代码已经完成了把读取不同复位状态寄存器的出来
  1. void Check_Reset(void)
  2. {
  3.     printf(" CSR = %x\r\n", RCM->CSTS);
  4.     if(RCM_ReadStatusFlag(RCM_FLAG_PINRST) != RESET ) // PINRST 引脚复位
  5.     {
  6.         printf("PIN reset \r\n");
  7.     }
  8.     if(RCM_ReadStatusFlag(RCM_FLAG_PWRRST) != RESET ) // 上电掉电复位
  9.     {
  10.         printf("POR/PDR reset \r\n");
  11.     }
  12.     if(RCM_ReadStatusFlag(RCM_FLAG_SWRST) != RESET ) //  软件复位
  13.     {
  14.         printf("Software reset  \r\n");
  15.     }
  16.     if(RCM_ReadStatusFlag(RCM_FLAG_IWDTRST) != RESET ) // 独立看门狗复位
  17.     {
  18.         printf("Independent watchdog reset \r\n");
  19.     }
  20.     if(RCM_ReadStatusFlag(RCM_FLAG_WWDTRST) != RESET ) // 窗口看门狗复位
  21.     {
  22.         printf("Window watchdog reset \r\n");
  23.     }
  24.     if(RCM_ReadStatusFlag(RCM_FLAG_LPRRST) != RESET ) // 低功耗复位
  25.     {
  26.         printf("(Low-power reset \r\n");
  27.     }
  28.     RCM_ClearStatusFlag();            //清除复位标志
  29.     printf("\r\n");
  30. }
最后在main函数中调用即可食用~

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

可以使用这种方法来进行判断~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

58

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

32

主题

58

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部