STM32意外复位问题调试

最近在使用STM32座项目时遇到一个奇怪的问题。系统一开始运行很正常但是在长时间运行之后会随机的出现STM2单片机无故产生复位的问题。因为在调试的过程中收获颇多,所以打算记录一下这一次的调试过程。

首先做问题分析,既然单片机在运行一段时间之后会产生复位。那具体是什么原因引起的单片机复位呢?拍脑子一想会不会是没有及时喂狗导致看门狗溢出引起的复位。为了证明这一点我们查询了stm32的数据手册有关于复位源的介绍

由上面的描述我们可以知道在RCC_CSR中记录了单片机复位的类型。因此我们只要在单片机启动时去读取该寄存器中的对应状态位即可判断出单片机上一次是因为何种原因产生复位的。注意:RCC_CSR寄存器是需要软件清除的。如果已经产生的复位标志没有被清除他会一直被存储,即使不在有对应的复位产生该复位标志还是一直存在。所以我们在使用其判断上一次复位类型时需要先软件清除方可使用。

通过上面的方法果然确定了复位的原因是由看门狗溢出引起的复位。那到底是什么原因引起的看门狗溢出?在线调试发现是因为产生了hardfault错误系统进入了hardfault的while循环所以没有喂狗而导致看门狗溢出引起系统复位。

为什么会引起hardfault错误呢?这个真的很奇怪哎。不过不怕只要我们能定位到单片机在引起hardfault错误前执行了什么程序应该就能进一步去判断问题引起的原因。这里介绍一下在keil中定位的方法。当进入Hard Fault断点后,菜单栏Peripherals >Core Peripherals >Fault Reports打开异常发生的报告,查看发生异常的原因。

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值