当前位置: 首页 > news >正文

N32G003查看设备重启原因

文章目录

  • 前言
  • 1.实现
    • 1.1 RCC寄存器
  • 1.2 代码实现

前言

在嵌入式单片机开发中,我们经常需要获取设备重启的原因,以方便确认设备异常重启时因什么原因导致,并方便我们进一步的排查。目前网上关于STM32获取设备重启原因的文档和代码比较多,但是N32G003我在开发过程中没找到,且DeepSeek联网搜索也找不到,后自己对着芯片手册的寄存器找到了,这里和大家分享一下,用来感谢平时在网上获取到的帮助。

1.实现

1.1 RCC寄存器

在单片机中RCC寄存器一般负责管理时钟树和系统复位功能,其内部包含复位状态寄存器(STM32:RCC_CSR N32:RCC_CTRLSTS),用于记录导致最近一次复位的硬件原因。通过读取这些寄存器位,开发者可以快速定位重启来源(如电源异常、看门狗触发、外部中断等)。

通过RCC寄存器(尤其是RCC_CSR)可以快速识别硬件层面的重启原因(如电源、看门狗、电压异常等),而软件原因(如程序跑飞)通常需要结合日志或断点调试分析。实际开发中,建议在启动阶段优先检查RCC寄存器以排除硬件故障。

如果使用其他厂商的单片机(如TI、NXP),其RCC寄存器的名称和功能可能略有差异,但原理相似,可参考对应手册的Reset Control Register章节。
在这里插入图片描述

1.2 代码实现

void print_reset_reason(void)
{
    // 读取复位状态寄存器(需查阅具体手册确认地址)
    uint32_t csr = RCC->CTRLSTS;

    // 通过串口输出复位原因
    printf("Reset Reason: ");
   
    if(csr & RCC_CTRLSTS_LPWRRSTF)  // 低功耗复位
        printf("[Low-power reset]");
    if(csr & RCC_CTRLSTS_IWDGRSTF)  // 独立看门狗复位
        printf("[Independent watchdog reset]");
    if(csr & RCC_CTRLSTS_SFTRSTF)   // 软件复位
        printf("[Software reset]");
    if(csr & RCC_CTRLSTS_PORRSTF)   // 上电/掉电复位
        printf("[Power-on/power-down reset]");
    if(csr & RCC_CTRLSTS_PINRSTF)   // NRST引脚复位
        printf("[External reset]");
   
printf("\n");
    // 清除复位标志
    RCC->PRST |= RCC_REMOVE_RESET_FLAG;
}

相关文章:

  • 洛谷P1135多题解
  • Pytorch使用手册-音频数据增强(专题二十)
  • 显卡(Graphics Processing Unit,GPU)架构详细解读
  • Linux 第二次脚本作业
  • [设计模式] Builder 建造者模式
  • [Windows] 全国油价实时查询,可具体到城市
  • TCP/UDP调试工具推荐:Socket通信图解教程
  • vscode settings(二):文件资源管理器编辑功能主题快捷键
  • 字符串中字母的大小写转换
  • 【模板】Linux中cmake使用编译c++程序
  • 【JavaEE进阶】Spring DI
  • 基于Springboot银行信用卡额度管理系统【附源码】
  • 学术论文翻译
  • 俄罗斯方块
  • 多线程群聊服务器设计
  • 500字理透react的hook闭包问题
  • RPC 框架项目剖析
  • 网络和操作系统基础篇
  • Python pip 缓存清理:全面方法与操作指南
  • 【算法通关村 Day9】二分查找与二叉树的中序遍历
  • 伊朗外长:伊美第四轮间接谈判将于5月3日举行
  • 马上评|科学谋划“十五五”,坚定不移办好自己的事
  • 中央网信办:重点整治违规AI产品、利用AI制作发布谣言等突出问题
  • 量子传感新技术“攻克”退相干难题
  • 海量数据处于“原矿”状态,数据价值释放如何破局?
  • 举牌超200轮!中铁建7.76亿元竞得北京通州梨园宅地