OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6598|回复: 5

请问stm32外部扩展SARM,它的存储器内部地址是连续的吗?

[复制链接]

6

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2013-12-16
在线时间
0 小时
发表于 2014-1-14 10:27:43 | 显示全部楼层 |阅读模式
我做了一个实验,往内部起始地址0x68000000,开始写入数据,总共写160k,可是到了第65600个数据的时候,好像就不是我想要的数据了?就出错了。我记得又一次看过资料,好像说的是,要换页写入是吗?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

233

主题

961

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1815
金钱
1815
注册时间
2011-10-9
在线时间
230 小时
发表于 2014-1-14 13:56:59 | 显示全部楼层
我的没这个问题 也不需要换页写  会否你的 U16爆了啊  刚好是U16 65535多一点的位置
回复 支持 反对

使用道具 举报

6

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2013-12-16
在线时间
0 小时
 楼主| 发表于 2014-1-14 14:15:33 | 显示全部楼层
回复【2楼】simms01:
---------------------------------
u16爆了,是什么意思呢?不会吧,IS62wv5126bll-55TLI,内存不是1M*Byte的吗?我才存储了160k。65536多一点的位置会怎么样呢?我真的是不知道啊?请大神指点迷津。
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-1-14 14:19:43 | 显示全部楼层
回复【3楼】头发很乱:
---------------------------------
就是说你的数字超过了u16的取值范围了(0 ~ 65535),你试下定义u32试下
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

6

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2013-12-16
在线时间
0 小时
 楼主| 发表于 2014-1-14 14:46:25 | 显示全部楼层
回复【4楼】 Badu_Space :
---------------------------------
我在配置FSMC_SRAM是这样配置的:
  FSMC_NORSRAMTimingInitStructure.FSMC_AddressSetupTime = 3;
  FSMC_NORSRAMTimingInitStructure.FSMC_AddressHoldTime = 0;
  FSMC_NORSRAMTimingInitStructure.FSMC_DataSetupTime = 3;
  FSMC_NORSRAMTimingInitStructure.FSMC_BusTurnAroundDuration = 0;
  FSMC_NORSRAMTimingInitStructure.FSMC_CLKDivision = 0;
  FSMC_NORSRAMTimingInitStructure.FSMC_DataLatency = 0;
  FSMC_NORSRAMTimingInitStructure.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_8b;
  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 = &FSMC_NORSRAMTimingInitStructure;
  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &FSMC_NORSRAMTimingInitStructure;

  FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); 

  /* Enable FSMC Bank1_SRAM Bank */
  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM3, ENABLE);  

在给变量赋值时采用的是二维数组400*400的形式,变量定义是u8型的,采用的0~255循环,不会存在越界或者爆了的啊,
for(i=0;i<400;i++)
{
n=0;
for(j=0;j<400;j++)
{
if(n<255)
{

FSMC_SRAM_WriteHalfWord(WRITE_ADDR, n);
if(i==164)
{
USART1_printf(USART1, " WRITE_ADDR=%d\r",WRITE_ADDR);
USART1_printf(USART1, "\r Buffer[%d\r][%d\r]=%d \r\n",i,j,FSMC_SRAM_ReadHalfWord(WRITE_ADDR));
}
n++;
WRITE_ADDR++;
}  
else 
{
n=0;

n++;
WRITE_ADDR++;
}
}  
}
这是发送的数据,0~163行都是1,2,3...一到第164行,就从65开始了,然后到了328行就又有变化了。这到底是怎么回事?







回复 支持 反对

使用道具 举报

6

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2013-12-16
在线时间
0 小时
 楼主| 发表于 2014-1-14 15:20:27 | 显示全部楼层
回复【2楼】simms01: 
回复【4楼】Badu_Space:
---------------------------------
楼上两位大神,感谢你们指点,你们的思想很系统啊,服了,对你们的景仰如滔滔江水啊。我的一部分片面之词,你们马上就知道u16爆了,确实是u16爆了。
u16 index;

UserToPMABufferCopy(&Tx_Buffer[index],ENDP2_TXADDR,64);       //以致于刚好差不多是65535过了一点就爆了。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-6 16:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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