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