一. 首先了解一下ROM,RAM和FLASH在单片中的作用
1.ROM :存储固化程序的(存放指令代码和一些固定数值,程序运行后不可改动)。
2.RAM:程序运行中数据的随机存取(掉电后数据消失)。
3.FLASH:存储用户程序和需要永久保存的数据,适用于速度要求高、容量要求大、掉电时要求数据不丢失的场合。。
二. EEPROM、SRAM的区别
1.EEPROM存储器:EEPROM存储器适用于速度不高、容量不大、掉电时要求数据不丢失的场合。一般用来存储系统参数。
2.SRAM存储器:SRAM相当于计算机的内存,读写速度相对较快,掉电后数据丢失。一般存储临时数据。
三.为什么要使用SRAM
1.SRAM属于RAM,单片机的RAM不足以存储大量的临时数据。
2.对数据的读写速度要求较高。
四.读写函数
以16为为例
#define Bank1_SRAM3_ADDR ((u32)(0x68000000))
u16 SRAMArray[250000] __attribute__((at(0X68000000))); //定义一个测试数组
void FSMC_SRAM_WriteBuffer(u16* pBuffer,u32 WriteAddr,u32 n) //写函数,16位写入
{
for(;n!=0;n--)
{
*(vu16*)(Bank1_SRAM3_ADDR+WriteAddr*2)=*pBuffer;
WriteAddr++;
pBuffer++;
}
}
void FSMC_SRAM_ReadBuffer(u16* pBuffer,u32 ReadAddr,u32 n) //写函数,16位读出
{
for(;n!=0;n--)
{
*pBuffer++=*(vu16*)(Bank1_SRAM3_ADDR+ReadAddr*2);
ReadAddr++;
}
}
如果是进行8位数据的操作,只需将u16替换为u8,ReadAddr*2替换为ReadAddr
如果已经写入,可以直接通过SRAMArray[n]数组来使用。
通过STM32的FSMC对外扩SRAM进行操作。硬件连接没问题,FSMC配置正确的情况下,即就是在指定的地址上读写数据。