我写了一个原子开发板读写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
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
u16要加2
u32要加4!
---------------------------------
我改为u16但是显示结果为:6
6
,这个原理到底是啥,很是不理解,原子哥能不能给我举个例子啊。。谢谢。。。。
---------------------------------
原子哥你好,请问硬件上连接了UB和LB这两根线,是不是数据就只能是8位,不能16位,要是不连接UB和LB这两根线只能是16位,数据位是8位还是16位不是软件决定而是硬件决定的????我想直接16位读写SRAM,能不能行??能行给我个例程,不能行的话有啥原因啊?????
谢谢》》》》》》》》》》》》》
---------------------------------
都可以的。
u8,u16,u32都可以。
---------------------------------
谢谢,,,,我明白了,我程序中原来有初始化的时候有点小问题,现在好了,谢谢。。。。。
一周热门 更多>