SRAM又称育龙静态随机读写存储器,里面的数据在SRAM正常供电的情况下,会一直保持。STM3F407芯片内部有自带192KB的SRAM,但对于很多嵌入式应用来说,容量远远不够。因此在开发板上外扩了一颗容量1MB、16位位宽的SRAM:IS62WV51216。其访问速度最高可达45ns,且无须额外的刷新和时钟电路,简化了SRAM底层驱动程序的编写。
对于学习过如何利用C++来申请、分配、释放计算机内存的用户来说,Malloc和Free这两个函数并不陌生。对于STM32来讲,在Labview里面也需要手操作Malloc和Free这两个函数。
本次实验将演示如何通过分块式内存管理的思想来管理费用STM32内部和外部的SRAM资源,并对开辟的内存进行访问。
本次实验预期效果:外部SRAM初始化成功后,返回内存大小为1024KB,即1MB,说明开发板上外扩的SRAM没有坏点;开辟一段大小为100KB的内存,并返回这段连续内存的物理首地址,然后成功写入一段指定长度的字符串。
外扩SRAM硬件连接:SRAM直接挂在STM32的FSMC总线上,无须额外的GPIO。

本次实验没有涉及到中断服务,因此,直接创建一个包含while循环的主VI即可。
一,程序步骤
1,初始化外部SRAM
2,初始化外部内存池
3,申请分配100KB内存
4,写入指定长度的字符串
5,依次读出内存中的字符
6,获取内存使用率
7,释放已申请的内存
二,程序编写
1,初始化外部SRAM
对于STM32外扩的SRAM必须进行初始化,一旦初始化成功后,该函数便会返回外部SRAM实际可用的内存空间大小。内部自带的SRAM用户无须干涉,在系统上电时由RTX系统负责加载应用程序。

2,初始化外部内存池
初始化外部内存池默认情况下,STM32内部自带的SRAM其中一部分连续的空间划分为内部内存池;再将外部SRAM中的前768KB空间划分为到外部内存池中。这样就有了两个可供外部程序使用的内存池,但尽量不要使用内部内存池,将其全部留给RTX使用,这样会使RTX运行更加流畅。

3,申请分配100KB内存
从外部内存池中申请、分配一段指定大小的内存空间。分配成功以后,会返回这段连续空间的物理学首地址。

4,写入指定长度的字符串

5,依次读出内存中的字符


6,获取内存使用率


7,释放已申请的内存


完成整个程序
三,编译、*载下**
1,程序运行后,前面板显示的信息:
SRAM_Size显示控件显示的内容为1024KB,说明SRAM芯片没有坏点存在;SRAM Memeory Usage显示使用量为13%,也就是100KB/1024KB=13%,符合我们的期望值。

2,单击Memory Free按键进行释放刚刚申请的SRAM资料,SRAM的使用量就变为0,证明已经完成释放。

3,按下开发板的复位键,Value显示控件每隔100ms刷新一次,依次显示字符串中的每个字符的16进制值
