天天看點

STM32-FSMC-SRAM

一. 首先了解一下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配置正确的情況下,即就是在指定的位址上讀寫資料。