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配置正确的情况下,即就是在指定的地址上读写数据。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于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)