一. 首先了解一下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配置正确的情况下,即就是在指定的地址上读写数据。