打印
[STM32L4]

关于使用stm32l452运行freertos+emwin+fatfs出现的硬件错误问题

[复制链接]
238|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jcky001|  楼主 | 2024-7-26 18:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
近期在使用STM32L452运行freertos+emwin+fatfs的时候发现了一个奇怪的硬件错误现象如下:运行系统开始正常,但是读书后写入SD卡并在LCD上显示波形一段时间系统卡死,调试发现进入了HardFault_Handler();
调试现场信息如下:

callstack如下:除了几个任务就进了硬件错误了

查询内存地址内如如下,都说找0800开头的是出问题函数的地址,不知道对不对:

查询改地址的反汇编代码如下:

对应到了SD_write函数上,之前仅仅测试写卡都是一直没问题的,不知道为什么加上了屏的显示任务运行一下就不行了。请高手看看排查问题的流程对吗?对的话,后面怎么找问题原因呢?

使用特权

评论回复
沙发
突然下起雨| | 2024-7-30 18:25 | 只看该作者
有可能是堆栈溢出了

使用特权

评论回复
板凳
突然下起雨| | 2024-7-30 18:25 | 只看该作者
检查堆栈溢出
堆栈溢出是嵌入式系统中常见的问题。每个任务都有独立的堆栈空间,如果某个任务的堆栈不够用,可能会导致HardFault。

使用特权

评论回复
地板
突然下起雨| | 2024-7-30 18:25 | 只看该作者
增加任务堆栈大小
尝试增加相关任务的堆栈大小,特别是SD卡写入和屏幕显示任务:

c
#define SD_TASK_STACK_SIZE    512
#define LCD_TASK_STACK_SIZE   512

xTaskCreate(sdTask, "SD Task", SD_TASK_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL);
xTaskCreate(lcdTask, "LCD Task", LCD_TASK_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL);


使用特权

评论回复
5
海滨消消| | 2024-8-4 16:56 | 只看该作者
堆栈溢出

使用特权

评论回复
6
laocuo1142| | 2024-8-4 16:57 | 只看该作者
内存访问越界

使用特权

评论回复
7
stormwind123| | 2024-8-4 17:02 | 只看该作者
代码和库不兼容

使用特权

评论回复
8
flycamelaaa| | 2024-8-4 19:00 | 只看该作者
硬件资源冲突

使用特权

评论回复
9
stormwind123| | 2024-8-4 20:23 | 只看该作者
检查是否有ISR中的代码可能导致问题,特别是那些与SD卡或LCD相关的

使用特权

评论回复
10
wailian1265k| | 2024-8-18 15:55 | 只看该作者
FORCED位或VECTTBL位是否被设置

使用特权

评论回复
11
wailian1265k| | 2024-8-18 16:01 | 只看该作者
在FreeRTOS中,任务的堆栈溢出是导致系统进入HardFault_Handler()的常见原因。

使用特权

评论回复
12
wailian1265k| | 2024-8-18 16:01 | 只看该作者
查看HardFault的寄存器值

使用特权

评论回复
13
wailian1265k| | 2024-8-18 16:01 | 只看该作者
确认SD卡初始化是否成功,检查SD卡是否正常工作,是否有硬件连接问题。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1473

主题

4212

帖子

6

粉丝