打印

stm32用fsmc外扩sram问题~请大侠帮我分析下

[复制链接]
5395|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sky007tao|  楼主 | 2013-1-28 09:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sky007tao 于 2013-1-28 09:27 编辑

   我用的st的官方例程,例程里用的是bank1的ne3,而我想用的是bank1的ne1,IO口做了相应的修改,初始化的地方将两处bank1的ne3改为bank1的ne1,可是程序运行不起来,进入调试模式后发现程序停在了“硬件错误中断”那个函数,void HardFault_Handler(void)”函数,进入了死循环,请问该如何解决?谢谢~

sram是IS61LV51216,下面是初始化的部分程序,红色部分就是我更改的代码。
p.FSMC_AddressSetupTime = 0;
  p.FSMC_AddressHoldTime = 0;
  p.FSMC_DataSetupTime = 2;
  p.FSMC_BusTurnAroundDuration = 0;
  p.FSMC_CLKDivision = 0;
  p.FSMC_DataLatency = 0;
  p.FSMC_AccessMode = FSMC_AccessMode_A;
  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM3;
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
  FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
  FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
  FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
  FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  
  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM3, ENABLE);
沙发
sky007tao|  楼主 | 2013-1-28 09:29 | 只看该作者
本帖最后由 sky007tao 于 2013-1-28 09:36 编辑

用官方历程去连接硬件并且程序不更改则运行正常,可以正常读写。

使用特权

评论回复
板凳
fugushatu| | 2013-1-28 16:16 | 只看该作者
内存越界?

使用特权

评论回复
地板
sky007tao|  楼主 | 2013-1-29 09:00 | 只看该作者
不是内存越界,有人指点过了~
回复作者:wolfdong7
好像改bank1的ne3,需要改好几个地方。

比如:实验例程是块1区3。 我想将它修改成块1区4.  
第一修改地址,即0x6800 0000 改成0x6c00 0000  
第二修改地址总线,将PG10,改成GP12.  
第三修改初始化,将FMSC_Bank1_NORSRAM3 全部改成 FMSC_Bank1_NORSRAM4

使用特权

评论回复
5
21世纪黄毛| | 2013-1-29 13:31 | 只看该作者
fugushatu 发表于 2013-1-28 16:16
内存越界?

..\OBJ\SRAM.axf: Error: L6406E: No space in execution regions with .ANY selector matching lcd.o(.text).
内存越界是什么?我这个问题怎么解决啊:'(

使用特权

评论回复
6
sky007tao|  楼主 | 2013-1-29 13:37 | 只看该作者
21世纪黄毛 发表于 2013-1-29 13:31
..\OBJ\SRAM.axf: Error: L6406E: No space in execution regions with .ANY selector matching lcd.o(.t ...

你的提示应该是代码段空间不够了,也就是ROM不够用了,你的LCD.c里定义了太多的字库数组或者图片,注释掉一些const 类型的数组应该就可以编译了~

使用特权

评论回复
7
21世纪黄毛| | 2013-1-29 14:41 | 只看该作者
sky007tao 发表于 2013-1-29 13:37
你的提示应该是代码段空间不够了,也就是ROM不够用了,你的LCD.c里定义了太多的字库数组或者图片,注释掉 ...

谢你,是数组定义太大了。

使用特权

评论回复
8
龙的图腾| | 2013-5-21 13:38 | 只看该作者
将#define GUI_NUMBYTES  0x200000改小就可以了,比如#define GUI_NUMBYTES  0x2000

使用特权

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

本版积分规则

3

主题

10

帖子

0

粉丝