硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2047|回复: 4
收起左侧

[RESET] STM32H7各种复位原因查找方法

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106749
QQ
发表于 2022-1-22 11:43:37 | 显示全部楼层 |阅读模式
mbed-os/reset_reason.c at master · ARMmbed/mbed-os (github.com)

  1. /* mbed Microcontroller Library
  2. * Copyright (c) 2006-2017 ARM Limited
  3. * SPDX-License-Identifier: Apache-2.0
  4. *
  5. * Licensed under the Apache License, Version 2.0 (the "License");
  6. * you may not use this file except in compliance with the License.
  7. * You may obtain a copy of the License at
  8. *
  9. *     http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. */
  17. #include "reset_reason_api.h"

  18. #ifdef DEVICE_RESET_REASON

  19. #include "device.h"

  20. reset_reason_t hal_reset_reason_get(void)
  21. {
  22. #ifdef RCC_FLAG_LPWRRST
  23.     if (__HAL_RCC_GET_FLAG(RCC_FLAG_LPWRRST)) {
  24.         return RESET_REASON_WAKE_LOW_POWER;
  25.     }
  26. #endif

  27. #ifdef RCC_FLAG_LPWR1RST
  28.     if ((__HAL_RCC_GET_FLAG(RCC_FLAG_LPWR1RST)) || (__HAL_RCC_GET_FLAG(RCC_FLAG_LPWR2RST))) {
  29.         return RESET_REASON_WAKE_LOW_POWER;
  30.     }
  31. #endif

  32. #ifdef RCC_FLAG_WWDGRST
  33.     if (__HAL_RCC_GET_FLAG(RCC_FLAG_WWDGRST)) {
  34.         return RESET_REASON_WATCHDOG;
  35.     }
  36. #endif

  37. #ifdef RCC_FLAG_WWDG1RST
  38.     if (__HAL_RCC_GET_FLAG(RCC_FLAG_WWDG1RST)) {
  39.         return RESET_REASON_WATCHDOG;
  40.     }
  41. #endif

  42. #ifdef RCC_FLAG_IWDGRST
  43.     if (__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST)) {
  44.         return RESET_REASON_WATCHDOG;
  45.     }
  46. #endif

  47. #ifdef RCC_FLAG_IWDG1RST
  48.     if (__HAL_RCC_GET_FLAG(RCC_FLAG_IWDG1RST)) {
  49.         return RESET_REASON_WATCHDOG;
  50.     }
  51. #endif

  52. #ifdef RCC_FLAG_SFTRST
  53.     if (__HAL_RCC_GET_FLAG(RCC_FLAG_SFTRST)) {
  54.         return RESET_REASON_SOFTWARE;
  55.     }
  56. #endif

  57. #ifdef RCC_FLAG_PORRST
  58.     if (__HAL_RCC_GET_FLAG(RCC_FLAG_PORRST)) {
  59.         return RESET_REASON_POWER_ON;
  60.     }
  61. #endif

  62. #ifdef RCC_FLAG_BORRST
  63.     if (__HAL_RCC_GET_FLAG(RCC_FLAG_BORRST)) {
  64.         return RESET_REASON_BROWN_OUT;
  65.     }
  66. #endif

  67. #ifdef RCC_FLAG_PINRST
  68.     if (__HAL_RCC_GET_FLAG(RCC_FLAG_PINRST)) {
  69.         return RESET_REASON_PIN_RESET;
  70.     }
  71. #endif

  72.     return RESET_REASON_UNKNOWN;
  73. }


  74. uint32_t hal_reset_reason_get_raw(void)
  75. {
  76. #if TARGET_STM32H7
  77.     return RCC->RSR;
  78. #else /* TARGET_STM32H7 */
  79.     return RCC->CSR;
  80. #endif /* TARGET_STM32H7 */
  81. }


  82. void hal_reset_reason_clear(void)
  83. {
  84.     __HAL_RCC_CLEAR_RESET_FLAGS();
  85. }

  86. #endif // DEVICE_RESET_REASON
复制代码


回复

使用道具 举报

3

主题

1223

回帖

1232

积分

至尊会员

积分
1232
发表于 2022-1-25 10:14:57 | 显示全部楼层
回复

使用道具 举报

3

主题

9

回帖

18

积分

新手上路

积分
18
发表于 2022-1-25 18:51:02 | 显示全部楼层
就是通过RCC的复位状态寄存器看的
微信截图_20220125184920.png
回复

使用道具 举报

13

主题

89

回帖

128

积分

初级会员

积分
128
发表于 2023-11-8 10:16:51 | 显示全部楼层
这个API怎么使用,是复位后立即调用“hal_reset_reason_get”来获取复位后的原因吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106749
QQ
 楼主| 发表于 2023-11-9 08:05:11 | 显示全部楼层
qq1646544 发表于 2023-11-8 10:16
这个API怎么使用,是复位后立即调用“hal_reset_reason_get”来获取复位后的原因吗

对,是这样的。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-4 08:08 , Processed in 0.167220 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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