OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4044|回复: 0

复位源判断复位判断复位检测重启检测重启原因

[复制链接]

3

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
金钱
222
注册时间
2021-1-19
在线时间
81 小时
发表于 2021-8-7 09:52:54 | 显示全部楼层 |阅读模式
在有时候不知道系统是在哪里造成的重启,可以使用下面的函数去在系统重启打印查看重启的原因。当然,如果有J-Link等能很快就知道了,但是有的项目的特定条件并不能使用在线模拟调试的时候,只能是通过这样的方式去知道重启的原因。
本贴记录一下这样的问题,这里只是一些常用的重启原因,具体详细的请自行去往RCC_GetFlagStatus()查找你认为的原因
适用于F103系列,其他的系列自己看依据自己的情况自行修改
  1. void Check_Rst(void)
  2. {
  3.     printf(" CSR = %x\r\n", RCC->CSR);
  4.     if(RCC_GetFlagStatus(RCC_FLAG_PINRST) != RESET ) // NRST 引脚复位
  5.     {
  6.         printf("PIN reset \r\n");
  7.     }
  8.     if(RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET ) // 上电掉电复位
  9.     {
  10.         printf("POR/PDR reset \r\n");
  11.     }
  12.     if(RCC_GetFlagStatus(RCC_FLAG_SFTRST) != RESET ) //  软件复位
  13.     {
  14.         printf("Software reset  \r\n");
  15.     }
  16.     if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET ) // 独立看门狗复位
  17.     {
  18.         printf("Independent watchdog reset \r\n");
  19.     }
  20.     if(RCC_GetFlagStatus(RCC_FLAG_WWDGRST) != RESET ) // 窗口看门狗复位
  21.     {
  22.         printf("Window watchdog reset \r\n");
  23.     }
  24.     if(RCC_GetFlagStatus(RCC_FLAG_LPWRRST) != RESET ) // 低功耗复位
  25.     {
  26.         printf("(Low-power reset \r\n");
  27.     }
  28.     RCC_ClearFlag();                        //清除复位标志
  29.     printf("\r\n");
  30. }
复制代码
以下为RCC_GetFlagStatus()在库函数的描述
  1. /**
  2.   * @brief  Checks whether the specified RCC flag is set or not.
  3.   * [url=home.php?mod=space&uid=271674]@param[/url]  RCC_FLAG: specifies the flag to check.
  4.   *   
  5.   *   For @b STM32_Connectivity_line_devices, this parameter can be one of the
  6.   *   following values:
  7.   *     @arg RCC_FLAG_HSIRDY: HSI oscillator clock ready
  8.   *     @arg RCC_FLAG_HSERDY: HSE oscillator clock ready
  9.   *     @arg RCC_FLAG_PLLRDY: PLL clock ready
  10.   *     @arg RCC_FLAG_PLL2RDY: PLL2 clock ready      
  11.   *     @arg RCC_FLAG_PLL3RDY: PLL3 clock ready                           
  12.   *     @arg RCC_FLAG_LSERDY: LSE oscillator clock ready
  13.   *     @arg RCC_FLAG_LSIRDY: LSI oscillator clock ready
  14.   *     @arg RCC_FLAG_PINRST: Pin reset
  15.   *     @arg RCC_FLAG_PORRST: POR/PDR reset
  16.   *     @arg RCC_FLAG_SFTRST: Software reset
  17.   *     @arg RCC_FLAG_IWDGRST: Independent Watchdog reset
  18.   *     @arg RCC_FLAG_WWDGRST: Window Watchdog reset
  19.   *     @arg RCC_FLAG_LPWRRST: Low Power reset
  20.   *
  21.   *   For @b other_STM32_devices, this parameter can be one of the following values:        
  22.   *     @arg RCC_FLAG_HSIRDY: HSI oscillator clock ready
  23.   *     @arg RCC_FLAG_HSERDY: HSE oscillator clock ready
  24.   *     @arg RCC_FLAG_PLLRDY: PLL clock ready
  25.   *     @arg RCC_FLAG_LSERDY: LSE oscillator clock ready
  26.   *     @arg RCC_FLAG_LSIRDY: LSI oscillator clock ready
  27.   *     @arg RCC_FLAG_PINRST: Pin reset
  28.   *     @arg RCC_FLAG_PORRST: POR/PDR reset
  29.   *     @arg RCC_FLAG_SFTRST: Software reset
  30.   *     @arg RCC_FLAG_IWDGRST: Independent Watchdog reset
  31.   *     @arg RCC_FLAG_WWDGRST: Window Watchdog reset
  32.   *     @arg RCC_FLAG_LPWRRST: Low Power reset
  33.   *   
  34.   * @retval The new state of RCC_FLAG (SET or RESET).
  35.   */
复制代码

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-26 02:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表