[STM32] stm32对nand flash进行读写操作,程序进入HardFault_Handler()

[复制链接]
4592|2
 楼主| Mobile1991 发表于 2015-3-10 21:03 | 显示全部楼层 |阅读模式
调试STM32读写nand flash K9F1G08U0D的程序,程序实现的功能是对nand flash的第一块的前两页
写数据,且从第一页的第一个字节地址开始写,写完之后,对两页的数据进行读取,若读取得到的
数据之前写入的数据一致,则执行其他操作。

通过函数 FSMC_NAND_WriteSmallPage(TxBuffer, WriteReadAddr, PageNumber)对nand flash写;
然后通过函数FSMC_NAND_ReadSmallPage (RxBuffer, WriteReadAddr, PageNumber)对之前写的两页
进行读。
调试中发现,当程序执行到语句:
status = FSMC_NAND_ReadSmallPage (RxBuffer, WriteReadAddr, PageNumber);
时,便会进入到HardFault_Handler()函数中,不断地执行while(1)中的空语句。

通过网上提供的“解决stm32进入HardFault_Handler()的定位方法“,将问题定位在
FSMC_NAND_ReadStatus()函数上。
程序进入HardFault_Handler(),通常是由于堆栈溢出或数组过节或指针指飞;
虽然FSMC_NAND_ReadStatus()函数中有指针,但我并不认为指针指飞了,所以
现在还不知道原因出在哪里。
有遇到过此类问题的坛友吗?先将程序呈上,希望有机会交流学习一下,先谢过~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| Mobile1991 发表于 2015-3-11 10:44 | 显示全部楼层
问题解决了:
当;Stack_Size EQU 0x00000400  //栈
      Heap_Size EQU 0x00000200  //堆
这时,堆栈溢出,程序就会进入HardFault_Handler();
于是,将堆栈空间设置的大一点:
比如:
     Stack_Size EQU 0x00000400  //栈
     Heap_Size EQU 0x00000400  //堆
或者
     Stack_Size EQU 0x00000800  //栈
     Heap_Size EQU 0x00000200  //堆
airwill 发表于 2015-3-11 14:41 | 显示全部楼层
支持一下楼主. 自己搞定这个麻烦的问题.
堆栈问题是个比较难于发现的问题.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

45

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部