针对探索者板子,SRAM实验,有几个问题不能理解,所以发帖求助下各位大大:
1、原子哥的程序中,在对IS62WV51216控制引脚的初始化中,只是初始化为FSMC,硬件连接如下
//控制引脚硬件连接
BU <------------> PE1
LB <------------> PE0
OE <------------> PD4
WE <------------> PD5
CE <------------> PG10
而在对FSMC的初始化配置中:
[mw_shl_code=c,true] FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM3;// 这里我们使用NE3 ,也就对应BTCR[4],[5]。
FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM;// FSMC_MemoryType_SRAM; //SRAM
FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;//存储器数据宽度为16bit
FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable;// FSMC_BurstAccessMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable;
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 = &readWriteTiming;
FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &readWriteTiming; //读写同样时序
FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); //初始化FSMC配置[/mw_shl_code]
问题1:
这个地方,读和写同时序。这个是怎么来的?为什么就同时序了?
问题2:
IS62WV51216控制引脚在对SARM的读操作函数和写操作函数中,都没有去特意的设置,请问这是为什么?难道是因为在FSMC初始化的时候,
FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; //存储器写使能 的效果?
[mw_shl_code=c,true]//在指定地址(WriteAddr+Bank1_SRAM3_ADDR)开始,连续写入n个字节.
//pBuffer:字节指针
//WriteAddr:要写入的地址
//n:要写入的字节数
void FSMC_SRAM_WriteBuffer(u8* pBuffer,u32 WriteAddr,u32 n)
{
for(;n!=0;n--)
{
*(vu8*)(Bank1_SRAM3_ADDR+WriteAddr)=*pBuffer;
WriteAddr++;
pBuffer++;
}
}
//在指定地址((WriteAddr+Bank1_SRAM3_ADDR))开始,连续读出n个字节.
//pBuffer:字节指针
//ReadAddr:要读出的起始地址
//n:要写入的字节数
void FSMC_SRAM_ReadBuffer(u8* pBuffer,u32 ReadAddr,u32 n)
{
for(;n!=0;n--)
{
*pBuffer++=*(vu8*)(Bank1_SRAM3_ADDR+ReadAddr);
ReadAddr++;
}
} [/mw_shl_code]
问题3,SRAM的读写有什么要求还是怎么样?在写操作中*(vu8*)(Bank1_SRAM3_ADDR+WriteAddr)=*pBuffer;在读操作中*pBuffer++=*(vu8*)(Bank1_SRAM3_ADDR+ReadAddr);这个为什么要这么写?
以上问题,还请各位大大及原子哥,帮忙说明下,感谢各位了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2、FSMC一旦配置好,你就可以直接读写SRAM中的指定地址的数据了!不需要设置什么其他的引脚,这些是FSMC自动完成的!
3、写是对指定地址写,肯定要用指针。读是对指定地址读,也需要用到指针。采用vu8*是为了实现字节读写。更多详细的内容请自行买本C语言书籍认真学习指针章节。
一周热门 更多>