OpenEdv-开源电子网

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

FSMC每次读写数据时要地址是要+1还是加2?原理何在?

[复制链接]

27

主题

99

帖子

0

精华

高级会员

Rank: 4

积分
845
金钱
845
注册时间
2013-12-25
在线时间
102 小时
发表于 2014-10-20 17:06:03 | 显示全部楼层 |阅读模式
5金钱
我写了一个原子开发板读写SRAM的程序,我没有按照例程的读写数据时每次地址加2,但是读写正常。我就纳闷了,原子的例程不是说配置成16位数据模式地址需要每次加2吗,但是我加的是1啊,怎么就显示正常了啊,应该是不正常啊。。。跪求大神解释。万分感谢!!!!!!!!!!!

FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;           //存储器数据宽度为16位

/***************************
                          写数据     
***************************/
void SRAM_Write(u8* pBuffer,u32 WriteAddr)
{
               
  *(vu8*)(Bank1_SRAM3_ADDR+WriteAddr)=*pBuffer;  
}

 

/***************************
            读数据    
***************************/
void SRAM_Read(u8* pBuffer,u32 ReadAddr)
{           
  *pBuffer=*(vu8*)(Bank1_SRAM3_ADDR+ReadAddr);   
}


/**************************
    向指定地址写一个字节
**************************/

void fsmc_sram_test_write(u8 data,u32 addr)
{     
 SRAM_Write(&data,addr);
}

/**************************
      向指定地址读一个字节   
**************************/
u8 fsmc_sram_test_read(u32 addr)
{
 u8 data;
 SRAM_Read(&data,addr);
 return data;



  fsmc_sram_test_write(0x05,0x01);       //向地址0x01写数据0x05
  fsmc_sram_test_write(0x06,0x02);       //向地址0x02写数据0x06

  data_SRAM1= fsmc_sram_test_read(0x01);   //读地址0x01的数据
  data_SRAM2= fsmc_sram_test_read(0x02);  //读地址0x02的数据

    
  LCD_ShowxNum(30,70,data_SRAM1,6,16,0); //显示地址0x01存储的数据
  LCD_ShowxNum(30,100,data_SRAM2,6,16,0);  //显示地址0x02存储的数据


程序结果为:5

                     6





最佳答案

查看完整内容[请看2#楼]

u8时,加1即可。 u16要加2 u32要加4!
海到无边天作岸?
山登绝顶我为峰
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-10-20 17:06:04 | 显示全部楼层
u8时,加1即可。
u16要加2
u32要加4!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2014-10-20 19:13:36 | 显示全部楼层
请教,SRAM访问写个函数,不低效吗?
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

27

主题

99

帖子

0

精华

高级会员

Rank: 4

积分
845
金钱
845
注册时间
2013-12-25
在线时间
102 小时
 楼主| 发表于 2014-10-21 10:47:53 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
我改为u16但是显示结果为:6
                                       6
,这个原理到底是啥,很是不理解,原子哥能不能给我举个例子啊。。谢谢。。。。
海到无边天作岸?
山登绝顶我为峰
回复

使用道具 举报

27

主题

99

帖子

0

精华

高级会员

Rank: 4

积分
845
金钱
845
注册时间
2013-12-25
在线时间
102 小时
 楼主| 发表于 2014-10-21 14:15:59 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原子哥你好,请问硬件上连接了UB和LB这两根线,是不是数据就只能是8位,不能16位,要是不连接UB和LB这两根线只能是16位,数据位是8位还是16位不是软件决定而是硬件决定的????我想直接16位读写SRAM,能不能行??能行给我个例程,不能行的话有啥原因啊?????

谢谢》》》》》》》》》》》》》
海到无边天作岸?
山登绝顶我为峰
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-10-21 23:25:12 | 显示全部楼层
回复【5楼】为你分心:
---------------------------------
都可以的。
u8,u16,u32都可以。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

27

主题

99

帖子

0

精华

高级会员

Rank: 4

积分
845
金钱
845
注册时间
2013-12-25
在线时间
102 小时
 楼主| 发表于 2014-10-22 15:26:47 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
谢谢,,,,我明白了,我程序中原来有初始化的时候有点小问题,现在好了,谢谢。。。。。
海到无边天作岸?
山登绝顶我为峰
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 04:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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