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

 

 

posted @   碧霄长博  阅读(451)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示