野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11712|回复: 5

求助,关于STM32进入硬件错误中断的问题

[复制链接]
发表于 2017-3-31 03:19:19 | 显示全部楼层 |阅读模式
       使用的型号是STM32F103RCT6,RAM是48K,在启动函数里修改了堆是4096,也就是4K,栈是1K,我有一个Chip_det()函数,里面会进行字库的读取,如果在CPU_Init();里面调用,就能正常运行,如果放到while(1),大循环里就会触发硬件错误中断,触发的原因是文件系统的 f_lseek 函数,我一直追踪下去,发现是TM_FATFS_FLASH_SPI_disk_read函数的SPI_FLASH_BufferRead函数触发的,底层应该没问题,因为我这个函数放在CPU_Init();里是可以正常执行的,我跟踪时发现堆栈也没有溢出,有老司机知道是啥引起的吗?
QQ图片20170331031708.png
QQ截图20170331031823.png
回复

使用道具 举报

发表于 2017-3-31 09:12:36 | 显示全部楼层
不知道啊           ,会不会里面变量太多了? 把栈继续加大试一试。
回复 支持 反对

使用道具 举报

发表于 2017-3-31 09:12:58 | 显示全部楼层
文件系统定义的FIL FS等变量搞成全局的试试,那些变量非常大的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-31 09:32:26 | 显示全部楼层
fire 发表于 2017-3-31 09:12
不知道啊           ,会不会里面变量太多了? 把栈继续加大试一试。

加到很大都不行
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-31 09:34:29 | 显示全部楼层
随风 发表于 2017-3-31 09:12
文件系统定义的FIL FS等变量搞成全局的试试,那些变量非常大的

已经是全局了,还加了volatile
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-31 12:02:45 | 显示全部楼层
找到问题了,原来我挂载文件系统的时候用了局部变量 res_flash=f_mount(&fs, "0:",1);res_flash和fs都是局部变量,执行完这个函数后释放掉了,所以文件系统的指针也就没了,特此说明一下,希望大家不要和我犯同样的错误。伤神又费力。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-19 23:27 , Processed in 0.039113 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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