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

目录

概述

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.xdnf.cn/news/1424933.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录——二叉树的最大深度(Leetcode104)

题目链接 层序遍历 当遍历到二叉树每一层最后一个节点时&#xff0c;depth /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* …

UART 16550 IP核使用详解

AXI UART 16550是Xilinx FPGA中提供的一个UART IP核&#xff0c;它允许通过AXI接口与UART设备进行通信。本文描述了如何使用Xilinx的Vivado Design Suite环境中的工具来定制和生成 UART 16550 IP核&#xff0c;以及如何配置和使用该IP核。 1 UART 16550 IP核的使用 以下是针对…

【算法】网络图中的dfs

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 引言一、单词搜索二、黄金矿工三、不同路径 |||四、图像渲染五、岛屿数量六、岛屿的最大面积七、被围绕的区域…

SSD与HDD仍然共存,并将长期共存!

在技术快速迭代的今天&#xff0c;固态硬盘&#xff08;SSD&#xff09;与传统硬盘&#xff08;HDD&#xff09;之间的竞争一直是存储领域的一大焦点。 扩展阅读&#xff1a; HDD回暖于2024&#xff0c;与SSD决战于2028 HDD的烦恼&#xff1a;HAMR会让SMR黯然失色吗&#xff…

Github 2024-05-12 php开源项目日报 Top10

根据Github Trendings的统计,今日(2024-05-12统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量PHP项目10Filament: 加速Laravel开发的完美起点 创建周期:1410 天开发语言:PHP协议类型:MIT LicenseStar数量:12228 个Fork数量:1990 次关…

电路元件伏安特性的测量

实验目的&#xff1a; 1. 掌握线性电阻、非线性电阻元件伏安特性的测量方法&#xff1b; 2. 掌握伏安测量法中测量样点的选择和绘制曲线的方法&#xff1b; 3. 学习直读式仪表和直流稳压电源等设备的使用方法。 实验原理、内容及步骤&#xff1a; 电路元件的特性一般可用该元…

前端简史之崛起:Router迁鼎

引 &#x1f4a1; Ajax 的出现&#xff0c;带来了 jQuery 时代&#xff1b;Node技术的发展&#xff0c;带来了前端工程化进阶&#xff1b;如果说前面二者是带来技术的革命&#xff0c;那么前端路由方案的多样化则带来了用户体验的升级以及项目管理的优化。 课程简介 《前端简史…

train_gpt2_fp32.cu - main

llm.c/test_gpt2_fp32.cu at master karpathy/llm.c (github.com) 源码 // ---------------------------------------------------------------------------- // main training loop int main(int argc, char *argv[]) {// read in the (optional) command line argumentsco…

C语言性能深度剖析:从底层优化到高级技巧及实战案例分析

C语言以其接近硬件的特性、卓越的性能和灵活性&#xff0c;在系统编程、嵌入式开发和高性能计算等领域中占据着举足轻重的地位。本文将深入探讨C语言性能优化的各个方面&#xff0c;包括底层原理、编译器优化、内存管理和高级编程技巧&#xff0c;并结合多个代码案例来具体分析…

6大部分,20 个机器学习算法全面汇总!!建议收藏!(上篇)

前两天有小伙伴说想要把常见算法的原理 公式汇集起来。 这样非常非常方便查看&#xff01;分为上下两篇&#xff0c;下篇地址&#xff1a; 本次文章分别从下面6个方面&#xff0c;涉及到20个算法知识点&#xff1a; 监督学习算法 无监督学习算法 半监督学习算法 强化学习…

PyQt5多线程全面系统地学习

文章目录 1. 基础知识1.1 简介1.1.1 多线程与多进程的概念多线程 (Multithreading)多进程 (Multiprocessing)1.1.2 多线程与多进程的区别1.1.3 应用场景多线程应用场景多进程应用场景 1.2 Python标准库中的线程与进程库1.2.1 threading 模块基本概念1.2.2 总结 2. PyQt5的多线程…

pytorch_trick(2) 在Jupyter初始化过程中自动加载常用包的设置方法

一、在Jupyter初始化过程中自动加载常用包的设置方法 在每一节课程的开头&#xff0c;我们都要导入常用包&#xff0c;由于这项工作重复而固定&#xff0c;因此我们也可以通过配置jupyter&#xff08;准确来说应该是ipython&#xff09;的startup文件&#xff0c;来使得每次新创…

Python函数之旅专栏(导航)

Python内置函数(参考版本:3.11.8)AELRabs( )enumerate( )len( )range( )aiter( )eval( )list( )repr( )all( )exec( )locals( )reversed( )anext( )round( )any( ) ascii( )FM  filter( )map( )S float( )max( )set( )Bformat( )memoryview( )setattr( )bin( )frozenset( )…

设计模式与软件体系结构课后练习参考答案

目录 软件设计模式第二章 创建型软件设计模式1. 工厂模式2. 生成器模式3. 单例模式 第三章 结构型软件设计模式1. 组合模式2. 适配器模式3. 外观模式4. 桥接模式 第四章 行为型软件设计模式1. 迭代器模式2. 访问者模式3. 中介者模式4. 策略模式5. 状态模式 案例分析工厂模式案例…

2010-2024年各地级市社会信用体系建设匹配DID数据

2010-2024年各地级市社会信用体系建设匹配DID数据 1、时间&#xff1a;2010-2024年 2、指标&#xff1a;行政区划代码、年份、所属省份、地区、社会信用体系建设示范区 3、范围&#xff1a;310个地级市 4、来源&#xff1a;国家发改委 5、指标解释&#xff1a; 社会信用体…

USB-OTG:1、OTG原理介绍

目录 &#x1f345;点击这里查看所有博文 随着自己工作的进行&#xff0c;接触到的技术栈也越来越多。给我一个很直观的感受就是&#xff0c;某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了&#xff0c;只有经常会用到的东西才有可能真正记…

深入剖析Tomcat(八) 载入器与打破双亲委派机制的自定义类加载器

写这篇文章让我头大了好几天&#xff0c;书中描述的内容倒是不多&#xff0c;可能也是那会Tomcat的现状。如今Tomcat发展了好多代&#xff0c;加上springboot的广泛应用&#xff0c;导致现在的类加载的步骤和Tomcat资料中描述的大相径庭。可能也是由于微服务的发展&#xff0c;…

Ubuntu 安装 eclipse 的详细过程及工程创建和编译配置

目录 一、安装环境二、下载依赖 java jdk三、下载 eclipse四、安装4.1 java 环境4.2 eclipse 安装4.3 打开 eclipse 五、配置 eclipse5.1 新建 C 工程5.2 工具链 配置5.3 头文件路径5.4 链接库5.5 编译 一、安装环境 Ubuntu 版本&#xff1a;22.04.3 位数&#xff1a;64-bit 二…

CRWU凯斯西储大学轴承数据,12k频率,十分类

CRWU凯斯西储大学轴承数据&#xff0c;12k频率&#xff0c;十分类。 from torch.utils.data import Dataset, DataLoader from scipy.io import loadmat import numpy as np import os from sklearn import preprocessing # 0-1编码 from sklearn.model_selection import Str…

基于HTML5和CSS3搭建一个Web网页(一)

倘若代码中有任何问题或疑问&#xff0c;欢迎留言交流~ 网页描述 创建一个包含导航栏、主内容区域和页脚的响应式网页。 需求: 导航栏: 在页面顶部创建一个导航栏&#xff0c;包含首页、关于我们、服务和联系我们等链接。 设置导航栏样式&#xff0c;包括字体、颜色和背景颜…