硬汉嵌入式论坛

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

[STM32H7] 关于STM32H743异常重启的问题

[复制链接]

20

主题

57

回帖

117

积分

初级会员

积分
117
发表于 2024-3-18 10:52:56 | 显示全部楼层 |阅读模式
小弟最近使用STM32H743做了一个项目,运行了RT-Thread系统,组件主要使用了lwip、littleffs文件系统,硬件设计上有一个看门狗芯片,手册给出的喂狗时间是1.7S左右。

我在软件里面开了一个线程喂狗,喂狗线程优先级是最高的,喂狗周期是rt_thread_mdelay 100个毫秒。

现在遇到问题是,10几台设备,每次连续运行,10几个小时后就有1-2台重启了,由于不能连接仿真器、串口等调试工具,问题查起来非常麻烦,我开始怀疑是不是进入hardfault导致重启,
然后就在RTT的hardfault回调里面加入了测试代码,将hardfault信息直接写入到flash里面保存,这样重启后拆机读取看看,人为制造hardfault测试是可以信息保存到flash的并读取的。

这样修改后,进行了测试,然而重启的设备里面没有任何hardfault信息,已排除意外掉电造成的重启。

各位坛友有没有遇到类似的情况?
回复

使用道具 举报

85

主题

798

回帖

1053

积分

至尊会员

积分
1053
发表于 2024-3-18 11:36:12 | 显示全部楼层
上电读取重启标志,判断是什么引起的复位,RCC相关章节可以看一下。
回复

使用道具 举报

20

主题

57

回帖

117

积分

初级会员

积分
117
 楼主| 发表于 2024-3-18 15:04:11 | 显示全部楼层
庄永 发表于 2024-3-18 11:36
上电读取重启标志,判断是什么引起的复位,RCC相关章节可以看一下。

这个试过了,排除了软件调用复位指令,掉电复位。

感觉像是喂狗线程卡死,但是找不到原因。。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2024-3-19 07:27:48 | 显示全部楼层
bigfanofiot 发表于 2024-3-18 15:04
这个试过了,排除了软件调用复位指令,掉电复位。

感觉像是喂狗线程卡死,但是找不到原因。。

保存下这个看看。

STM32H7各种复位原因查找方法
https://forum.anfulai.cn/forum.p ... 0699&fromuid=58
(出处: 硬汉嵌入式论坛)

另外你当前的工程是怎么个喂狗机制。
回复

使用道具 举报

20

主题

57

回帖

117

积分

初级会员

积分
117
 楼主| 发表于 2024-3-19 13:19:33 | 显示全部楼层
eric2013 发表于 2024-3-19 07:27
保存下这个看看。

STM32H7各种复位原因查找方法

硬件设计上有一个看门狗芯片,软件里面开了一个线程喂狗,喂狗线程优先级是最高的,喂狗周期是rt_thread_mdelay 100个毫秒。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2024-3-19 15:33:15 | 显示全部楼层
bigfanofiot 发表于 2024-3-19 13:19
硬件设计上有一个看门狗芯片,软件里面开了一个线程喂狗,喂狗线程优先级是最高的,喂狗周期是rt_thread_ ...

当前得先锁定下是不是这个喂狗导致的。如果是这个喂狗导致的,那估计是卡死在其他高优先级中断里面了。
回复

使用道具 举报

5

主题

162

回帖

177

积分

初级会员

积分
177
发表于 2024-3-19 15:38:57 | 显示全部楼层
bigfanofiot 发表于 2024-3-19 13:19
硬件设计上有一个看门狗芯片,软件里面开了一个线程喂狗,喂狗线程优先级是最高的,喂狗周期是rt_thread_ ...

开软件定时器喂狗
回复

使用道具 举报

20

主题

57

回帖

117

积分

初级会员

积分
117
 楼主| 发表于 2024-3-20 10:54:21 | 显示全部楼层
eric2013 发表于 2024-3-19 15:33
当前得先锁定下是不是这个喂狗导致的。如果是这个喂狗导致的,那估计是卡死在其他高优先级中断里面了。

喂狗线程的优先级是最高的,比喂狗线程还高的只有RTT内核自己了
回复

使用道具 举报

1

主题

18

回帖

21

积分

新手上路

积分
21
发表于 2024-3-20 16:33:56 | 显示全部楼层
把看门狗芯片去掉,看看还死机?
回复

使用道具 举报

7

主题

18

回帖

39

积分

新手上路

积分
39
发表于 2024-3-20 17:09:30 | 显示全部楼层
看看有没有进MemManage_Handler中断
回复

使用道具 举报

20

主题

57

回帖

117

积分

初级会员

积分
117
 楼主| 发表于 2024-3-21 13:22:49 | 显示全部楼层
pokemonds 发表于 2024-3-20 17:09
看看有没有进MemManage_Handler中断

没有定义这个中断函数
回复

使用道具 举报

20

主题

57

回帖

117

积分

初级会员

积分
117
 楼主| 发表于 2024-3-21 13:26:20 | 显示全部楼层
pokemonds 发表于 2024-3-20 17:09
看看有没有进MemManage_Handler中断

RTT里面这个异常会进入hardfault的,但是我的串口终端没有任何信息记录(最近买了离线串口数据记录模块)
回复

使用道具 举报

39

主题

127

回帖

244

积分

高级会员

积分
244
发表于 2024-12-6 08:40:04 | 显示全部楼层
bigfanofiot 发表于 2024-3-21 13:26
RTT里面这个异常会进入hardfault的,但是我的串口终端没有任何信息记录(最近买了离线串口数据记录模块)

楼主问题解决了吗?我使用的是STM32F407+FreeRTOS在运行40小时后设备会自动重启,因为重启时间都是在大约运行40小时后,所以锁定是软件的问题。
排除看门狗,也没有设置软件重启。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2024-12-7 08:20:07 | 显示全部楼层
坚持再坚持 发表于 2024-12-6 08:40
楼主问题解决了吗?我使用的是STM32F407+FreeRTOS在运行40小时后设备会自动重启,因为重启时间都是在大约 ...

如果是这样的话,可以多开几个设备,分任务排查,注释掉对应任务创建,至少可以锁定那个任务导致的,然后进一步锁定程序。
回复

使用道具 举报

39

主题

127

回帖

244

积分

高级会员

积分
244
发表于 2024-12-7 10:58:03 | 显示全部楼层
eric2013 发表于 2024-12-7 08:20
如果是这样的话,可以多开几个设备,分任务排查,注释掉对应任务创建,至少可以锁定那个任务导致的,然后 ...

使用vTaskList打印每个任务的剩余stack空间,发现在定时器任务的最小剩余栈空间在运行3小时后由133降至了97(FreeRTOS使用了动态分配内存)。在长时间运行看看,会不会减少至0,因为在HardFault_Handler中设置了软件复位NVIC_SystemReset。
回复

使用道具 举报

6

主题

306

回帖

324

积分

高级会员

积分
324
发表于 2024-12-7 16:05:42 | 显示全部楼层
使用SES编译时能够看到最大的堆栈使用情况(静态),非常方便,一下就能定位到哪个函数用的最多,对应的线程堆栈就调大点。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-14 01:15 , Processed in 0.049143 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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