STM32 FSMC接口控制SRAM(芯片型号:IS61WV102416BLL)

server/2024/10/11 11:24:19/

目录

概述

1 硬件介绍

1.1 SRAM的电路

1.2 IS61WV102416ALL芯片

2 STM32Cube配置工程

2.1 配置FSMC

2.2 其他参数配置

2.3 生成工程

3 SRAM的功能验证

3.1 编写测试函数

3.1.1 写数据函数

3.1.2 读数据函数

3.2 完整代码

4 测试


测试代码下载地址:

stm32-f407-fsmc-sRAM资源-CSDN文库

概述

本文主要介绍使用STM32F4的FSMC控制SRAM,以扩展内存,文中介绍了SRAM相关的电路,以及和MCU之间的对应关系。还使用STM32Cube配置一个项目来实现FMSC操作SRAM的功能,并编写测试程序,验证该功能。

1 硬件介绍

1.1 SRAM的电路

1.2 IS61WV102416ALL芯片

TheISSIIS61WV102416ALL / BLLandIS64WV102416BLL高速,16m位静态RAM组织为1024K 16位。它是采用ISSI的高性能CMOS技术制造的。这个高度可靠的过程加上创新的电路设计技术,产量高性能、低功耗器件。

当CE为HIGH(未选择)时,设备假定a在待机模式下,功耗可以随CMOS输入电平降低。通过使用Chip Enable,可以方便地扩展内存使能输入,CE和OE。主动LOWWrite Enable (WE)控制对象的写和读内存。一个数据字节允许上字节和下字节LB (Byte)访问。

芯片框架结构:

芯片引脚定义:

2 STM32Cube配置工程

2.1 配置FSMC

选项名称类型
Chip SelectNE3
Memory typeSRAM
Address20 bits
Data16 bits

在 STM32Cube中的配置信息如下:

2.2 其他参数配置

SRAM芯片的使能信号与FSMC_NE3连接,所以它会被映射到STM32中的BANK1 NOR/SRAM3区域, 该区域的地址范围为0x68000000-0x6BFFFFFF,因此,当内核访问从基地址0x68000000开始的2MB空间时,FSMC外设会自动控制原理图中的引脚产生访问时序,访问这个外部SRAM存储器。

2.3 生成工程

完成以上配置后,可以点击GENERATE生成项目,打开工程后,fsmc.c中已经生成了和FSMC相关的代码,包括接口函数如下:

函数名称: void MX_FSMC_Init(void)

功能: FSMC接口参数初始化

函数名称: static void HAL_FSMC_MspInit(void)

功能: 和FSMC相关的IO初始化

3 SRAM的功能验证

3.1 编写测试函数

创建App/Fsmc文件目录,并在该目录下创建fsmc_test.c文件。然后在该文件中编写测试SRAM的带代码。

3.1.1 写数据函数

代码18行: 确定扩展SRAM地址的buff

代码29行:向RAM地址写数据

3.1.2 读数据函数

代码46行: 确定读数据的扩展SRAM地址

代码50行:从RAM中读取数据

3.2 完整代码

创建fsmc_test.c,然后在该文件中编写如下代码:

程序功能概述:

1)从地址0x68000000开始,写48k数据

2)从地址0x68000000开始,读48k数据

3)将写如下的数据打印出来

#include "fsmc_test.h"#define EXT_SRAM_ADDR   ((uint32_t)0x68000000)
#define EXT_SRAM_SIZE   (24* 1024)#define TEST_BUF_SIZE    1024*48
#define TEST_ADDRESS     0uint8_t g_TestBuf[TEST_BUF_SIZE];   /* 数据测试用缓冲区 */static void WriteTest(uint8_t _Value)
{uint32_t i, n;int32_t iTime1, iTime2;uint16_t *pBuf;uint16_t usTemp;pBuf = (uint16_t *)EXT_SRAM_ADDR;usTemp = (_Value << 8) + _Value;/* 写EEPROM, 起始地址 = 0,数据长度为 256 */iTime1 = HAL_GetTick();     /* 记下开始时间 */pBuf = (uint16_t *)EXT_SRAM_ADDR;for (n = 0; n < 10; n++){for (i = 0; i < EXT_SRAM_SIZE / 2; i++){*pBuf++ = usTemp;}}iTime2 = HAL_GetTick(); /* 记下结束时间 *//* 打印速度 */printf("数据写耗时: %dms, 写速度: %dKB/s\r\n", iTime2 - iTime1, (10 * (EXT_SRAM_SIZE / 1024)  * 1000) / (iTime2 - iTime1));
}static void ReadTest(void)
{uint16_t i;int32_t iTime1, iTime2;uint8_t *pBuf;/* 写EEPROM, 起始地址 = 0,数据长度为 256 */iTime1 = HAL_GetTick(); /* 记下开始时间 */pBuf = (uint8_t *)(EXT_SRAM_ADDR + TEST_ADDRESS);for (i = 0; i < TEST_BUF_SIZE; i++){g_TestBuf[i] = *pBuf++;}iTime2 = HAL_GetTick(); /* 记下结束时间 */printf("物理地址:0x%08X  大小: %d字节,  数据如下: \r\n", EXT_SRAM_ADDR + TEST_ADDRESS, TEST_BUF_SIZE);/* 打印数据 */for (i = 0; i < TEST_BUF_SIZE; i++){printf(" %02X", g_TestBuf[i]);if ((i & 31) == 31){printf("\r\n");   /* 每行显示16字节数据 */}else if ((i & 31) == 15){printf(" - ");}}/* 打印读速度 */printf("读耗时: %dms, 读速度: %dB/s\r\n", iTime2 - iTime1, (TEST_BUF_SIZE * 1000) / (iTime2 - iTime1));
}uint8_t bsp_TestExtSRAM(void)
{WriteTest(0x5A);ReadTest();
}

4 测试

编译代码,将编译的文件下载到板卡中,然后运行代码

代码第79行:向RAM写48k数据0x5a

代码第80行:读出数据,并打印到终端

运行程序后,在终端可以看见:

 

.......


http://www.ppmy.cn/server/42239.html

相关文章

学习java第七十一天

DI&#xff1a;依赖注入 依赖注入是spring容器中创建对象时给其设置依赖对象的方式&#xff0c;比如给spring一个清单&#xff0c;清单中列出了需要创建B对象以及其他的一些对象&#xff08;可能包含了B类型中需要依赖对象&#xff09;&#xff0c;此时spring在创建B对象的时候…

创新实训2024.05.12日志:建立易学知识库

1. 部署向量知识库到生产机 1.1. 基本环境配置 生产机上的环境还没有配好&#xff0c;这里我记录下需要配置的环境。 python 3.11.8 首先python环境最好选用3.11(准确来说支持3.8-3.11的任何release&#xff09;&#xff0c;我选择了python3.11.8 Python Release Python 3.…

冒泡排序----深刻理解版本

前面虽然向大家介绍了冒泡排序&#xff0c;但是表达的不是很清楚&#xff0c;这次我带着更深刻的理解向大家介绍以下冒泡排序。 1.冒泡排序 冒泡排序其实是一种排序算法&#xff0c;通过数据之间的相互比较将一堆混乱的数据按照升序或者降序的顺序排列。 2.解题思路 解题思…

租赁商城小程序基于ThinkPHP+FastAdmin+UniApp(源码搭建/上线/运营/售后/更新)

提供用户物品租赁服务的应用程序&#xff0c;方便客户搭建各种类型的租赁场景服务。通过小程序端多角色进行平台管理&#xff0c;用户租赁商品缴纳租金及押金&#xff0c;员工端可操作商品出库和归还&#xff0c;订单完成后押金原路退回。 ​在线预约和支付&#xff1a;用户可以…

【C++】学习笔记——多态_1

文章目录 十二、继承8. 继承和组合 十三、多态1. 多态的概念2. 多态的定义和实现虚函数重写的两个特殊情况override 和 final 3. 多态的原理1. 虚函数表 未完待续 十二、继承 8. 继承和组合 我们已经知道了什么是继承&#xff0c;那组合又是什么&#xff1f;下面这种情况就是…

MySQL--增删改查案例演示

一&#xff1a;显示数据库及模糊查询&#xff08;like&#xff09; mysql> show databases; -------------------- | Database | -------------------- | db_classes | | db_user | | information_schema | | mysql | | perfor…

【STM32-MX_GPIO_Init分析】

MX_GPIO_Init分析源码如下&#xff1a; __HAL_RCC_GPIOE_CLK_ENABLE源码如下&#xff1a; #define RCC ((RCC_TypeDef *) RCC_BASE) #define RCC_BASE (AHB1PERIPH_BASE 0x3800UL) #define AHB1PERIPH_BASE (PERIPH_BASE 0x00020000U…

部署xwiki服务需要配置 hibernate.cfg.xml如何配置?

1. 定位 hibernate.cfg.xml 文件 首先&#xff0c;确保您可以在 Tomcat 的 XWiki 部署目录中找到 hibernate.cfg.xml 文件&#xff1a; cd /opt/tomcat/latest/webapps/xwiki/WEB-INF ls -l hibernate.cfg.xml如果文件存在&#xff0c;您可以继续编辑它。如果不存在&#xff…