STM32 单片机重启(查看上次重启原因)

STM32 HAL 复位源识别
        STM32启动后可以识别本次启动是对应哪一种复位源,从而可以根据复位源的状态,做一些特殊处理。

HAL库的复位源识别
        以下代码,识别是那种方式进行复位的,只需要将自己在那种方式复位运行的程序添加进去即刻,在这里面尽量进行一些事件更改,不要进行长时间任务运行。

void Check_Rst(void)
{
    my_printf(" CSR = %x\r\n", RCC->CSR);
    if(__HAL_RCC_GET_FLAG(RCC_FLAG_PINRST) != RESET ) // NRST 引脚复位
    {
        my_printf("PIN reset \r\n");
    }
    if(__HAL_RCC_GET_FLAG(RCC_FLAG_PORRST) != RESET ) // 上电掉电复位
    {
        my_printf("POR/PDR reset \r\n");
    }
    if(__HAL_RCC_GET_FLAG(RCC_FLAG_SFTRST) != RESET ) //  软件复位
    {
        my_printf("Software reset  \r\n");
    }
    if(__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST) != RESET ) // 独立看门狗复位
    {
        my_printf("Independent watchdog reset \r\n");
    }
    if(__HAL_RCC_GET_FLAG(RCC_FLAG_WWDGRST) != RESET ) // 窗口看门狗复位
    {
        my_printf("Window watchdog reset \r\n
### STM32CubeMX 配置单片机意外重启原因分析及解决方案 #### 单片机意外重启现象描述 当STM32单片机发生异常重启时,通常表现为程序突然中断并重新启动。这种行为可能是由多种因素引起的,包括但不限于硬件设计缺陷、外部干扰以及软件逻辑错误。 #### 原因分析 ##### 电源稳定性不足 如果供电电压不稳定或存在瞬态波动,则可能导致MCU进入复位状态。确保电源电路具有足够的滤波电容来稳定电压是非常重要的[^1]。 ##### 外部电磁干扰(EMI) 强烈的电磁场会对敏感信号线造成影响,从而触发看门狗定时器或其他保护机制而导致系统重置。采取屏蔽措施减少外界噪声侵扰有助于提高系统的抗噪能力。 ##### 软件编程失误 不当的操作如访问非法地址空间、堆栈溢出等问题也会引起处理器陷入不可预期的状态最终导致重启。编写健壮的应用层代码对于预防此类情况至关重要。 ##### 看门狗定时器未及时喂狗 内置WDT(Watch Dog Timer)是一个用来检测应用程序是否卡死的安全特性;但如果忘记定期刷新计数器则会强制执行一次软复位操作。合理规划好喂狗周期能有效避免不必要的重启事件发生。 #### 解决策略 ##### 提升硬件可靠性 - **优化PCB布局**:保持良好的接地平面完整性,远离大电流路径布置关键控制线路。 - **增强去耦合处理**:靠近芯片放置旁路电容器以吸收快速变化的电流脉冲带来的冲击。 ##### 改善固件质量 - **启用调试接口**:利用串口打印日志信息帮助定位潜在问题所在位置。 - **增加异常捕获机制**:实现全局中断服务例程捕捉未知异常以便后续排查。 - **调整WDT参数设定**:适当延长超时期限给予更多喘息机会让主循环有足够时间完成任务前进行喂养动作。 ```c // 定义一个函数用于喂狗 void WDG_Feed(void){ HAL_WWDG_Refresh(&hwwdg, PeriodValue); // 刷新窗口看门狗 } ``` ##### 实施防护手段 - **加入自检流程**:开机初期对内存变量初始化检查防止残留数据引发混乱。 - **采用多重校验方式**:比如CRC验证重要结构体内容一致性保障传输过程无误码产生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值