打印
[STM32]

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

[复制链接]
3815|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()函数中有指针,但我并不认为指针指飞了,所以
现在还不知道原因出在哪里。
有遇到过此类问题的坛友吗?先将程序呈上,希望有机会交流学习一下,先谢过~

stm32 nand flash.rar

4.49 MB

相关帖子

沙发
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

粉丝