【STM32】FSMC—扩展外部 SRAM 初步使用 1
基于野火指南者《零死角玩转 STM32F103—指南者》的学习
STM32F103系列
FSMC Flexible Static Memory Controller简介
1.详细功能参看《STM32F10x参考手册》,这边是概述
是一个外设,挂载在AHB总线下。
可以用于驱动包括 SRAM
、NOR FLASH
以及 NAND FLSAH
类型的存储器,不能驱动如 SDRAM
这种动态的存储器
STM32F429 系列的控制器中,它具有 FMC 外设,支持控制 SDRAM 存储器。
简单来说
类似于GPMC,可以以直接寻址的方式操作外置的存储设备,比如挂载一块SRAM在0x6000 0000处,不需要再像操作外置存储设备那样使用相关协议写一个字节,直接*(char)0x6000 0000 = 0x01就可以了。
2.根据外接的存储设备选引脚
2.1 控制不同类型存储器的时候会有一些不同的引脚,看起来有非常多
2.2 不同模式使用不同引脚,根据框图分为NOR/PSRAM
,NAND
,PC卡信号
三类
2.3 FSMC_A
和数据线 FSMC_D
是所有控制器都共用
3. 对于同一种类的存储器也可以有不同模式,以NOR/PSRAM模式为例子
我们需要操作的是NOR型存储器,所以选择NOR型模式,
复用模式和非复用模式依照实际情况选择(也就是地址线和数据线是否复用)
复用引脚和非复用
FSMC 信号名称 | 信号方向 | 功能 |
---|---|---|
CLK | 输出 | 时钟(同步突发模式使用);; |
NE[x] | 输出 | 片选,x = 1…4 |
NADV | 输出 | 地址、数据线复用时作锁存信号 |
A[25:0] | 输出 | 地址总线 |
D[15:0] | 输入/输出 | 双向数据总线 |
NOE | 输出 | 输出使能 |
NWE | 输出 | 写使能 |
NWAIT | 输入 | NOR 闪存要求 FSMC 等待的信号 |
NBL[1] | 输出 | 高字节使能(存储器信号名称为:NUB) PSRAM使用 |
NBL[0] | 输出 | 低字节使能(存储器信号名称为:NLB) PSRAM使用 |
N表示低有效
其他型号的存储器引脚分配详见资料手册
4.地址映射 与 地址线
地址映射 分配给FSMC的地址是哪里?
FSMC 连接好外部的存储器并初始化后,就可以直接通过访问地址来读写数据 其中这部分在内存中有着固定的存储地址,存储单元是映射到 STM32 的内部寻址空间的;在程序里,定义一个指向这些地址的指针,然后就可以通过指针直接修改该存储单元的内容,FSMC 外设会自动完成数据访问过程,读写命令之类的操作不需要程序控制。
0x6000 0000 至 0x9FFF FFFF用于FSMC。
FSMC 把整个 存储区域分成了 4 个 Bank 区域,NOR 及 SRAM 存储器只能使用 Bank1 的地址,在每个 Bank 的内部又分成了 4 个小块,每个小块有相应的控制引脚用于连接片选信号FSMC_NE1/2/3/4
当 STM32 访问0x60000000-0x63FF FFFF 地址空间时,其实就是访问FSMC BANK1的第1块
区域,FSMC_NE1 引脚会自动设置为低电平
0x60000000-0x6FFF FFFF这片地址也就是Bank1的256M字节空间,在芯片内部由AHB总线上的28根地址线(ADDR[27:0])寻址。这里ADDR 是内部AHB地址总线
,其中ADDR[25:0]对应外部存储器地址FSMC_A[25:0],而HADDR[26:27]对应4个区.
ADDR[25:0],有26根地址线,也就是可以进行2**26地址范围的寻址,(也就是0x400 0000
)。
HADDR[26:27]对4个区进行寻址.
四个区对应二进制,红色部分就是bit HADDR[26:27]:
Bank1:0110-00
00 0000-0000 0000-0000 0000-0000 ,即 60 00 00 00;
Bank2:0110-01
00 0000-0000 0000-0000 0000-0000 ,即 64 00 00 00;
Bank3:0110-10
00 0000-0000 0000-0000 0000-0000 ,即 68 00 00 00;
Bank4:0110-11
00 0000-0000 0000-0000 0000-0000 ,即 6c 00 00 00;
总结:对于存储块BANK1cpu给他分配的地址是0x60000000-0x6FFF FFFF,那么cpu对他寻址的话是使用32根地址线,其中低ADDR[25:0]根可以外接到外部存储器进行0x400 0000范围的寻址,ADDR[27:26]根可以在Bank中的四部分选择一个。
外部存储器宽度
默认情况下存储器的一个地址对应的是1个byte,那么可以正常当作cpu上内部存储一样读取。如果存储器地址数据为16位,32位,也就是两个字节一个地址,四个字节一个地址,那么控制16位,32位宽度的存储设备,且不支持单字节访问就比较麻烦了。
存储器地址数据为16位,32位的这种类型的存储器,我们本来对应64M个的byte的地址,就变成了32M个的双字节byte的地址,也就是最后一位ADDR[bit0]无效了,因为地址一次要加2
HADDR[27:0]
:AHB总线对外设FSMC寻址的地址线,AHB总线与FSMC的连接
FSMC_A[25:0]
:FSMC外设对外部扩展存储的寻址线。
不同类型的存储器 不同类型的控制方式
根据类型选择模式:FSMC可以控制很多类型的器件,模式1 —— SRAM/CRAM
类型模式下还有模式ABCD : 对于模式1还有ABCD四种模式,这里选择模式B进行说明
FSMC 控制异步 NOR FLASH 的时序
FSMC 读 NOR FLASH 的时序图(模式 B)
当内核发出访问某个指向外部存储器地址时,FSMC 外设会根据配置控制信号线产生时序访问存储器,上图中的是访问外部异步 NOR FLASH(模式 B)时 FSMC外设的读写时序。
以读时序为例,该图表示一个存储器操作周期由地址建立周期(ADDSET)、数据建立周期(DATAST)以及 2个 HCLK周期组成。在地址建立周期中,地址线发出要访问的地址,数据掩码信号线指示出要读取地址的高、低字节部分,片选信号使能存储器芯片;地址建立周期结束后读使能信号线发出读使能信号,接着存储器通过数据信号线把目标数据传输给 FSMC,FSMC 把它交给内核。
FSMC 写 NOR FLASH 的时序图(模式 B)
写时序类似,区别是它的一个存储器操作周期仅由地址建立周期(ADDSET)和数据建立周期(DATAST)组成,且在数据建立周期期间写使能信号线发出写信号,接着FSMC把数据通过数据线传输到存储器中。
FSMC寄存器
NOR/PSRAM/SRAM 设备使用相同的控制器;
NAND/PC 卡设备使用相同的控制器;
控制 NOR FLASH 的有 FSMC_BCR1/2/3/4 控制寄存器、FSMC_BTR1/2/3/4 片选时序寄存器以及 FSMC_BWTR1/2/3/4 写时序寄存器。
FSMC时钟
FSMC 外设挂载在 AHB 总线上,时钟信号来自于 HCLK(默认 72MHz),控制器的同步时钟输出就是由它分频得到。
它的时钟频率可通过 FSMC_BTR 寄存器的 CLKDIV 位配置,HCLK 与 FSMC_CLK 的分频系数(CLKDIV),可以为 2~16 分频
它可用于与同步类型的 NOR FLASH 芯片通过FSMC_CLK 引脚输出进行同步通讯。
对于异步类型的存储器,不使用同步时钟信号,所以时钟分频配置不起作用。
其他资料
收集参考资料: keil中扩展RAM的使用与配置
相关文章:
【STM32】FSMC—扩展外部 SRAM 初步使用 1
基于野火指南者《零死角玩转 STM32F103—指南者》的学习 STM32F103系列 FSMC Flexible Static Memory Controller简介 1.详细功能参看《STM32F10x参考手册》,这边是概述 是一个外设,挂载在AHB总线下。 可以用于驱动包括 SRAM、NOR FLASH 以及 NAND FL…...
保姆级教程 --redis启动命令
1、在redis目录 打开命令 windowr 输入cmd 2、输入 redis-server.exe redis.windows.conf 启动redis命令,看是否成功 3、可能会启动失败,报28 Nov 09:30:50.919 # Creating Server TCP listening socket 127.0.0.1:6379: bind: No error 4、报错后&am…...
【C++】构造函数分类 ① ( 构造函数分类简介 | 无参构造函数 | 有参构造函数 | 拷贝构造函数 | 代码示例 - 三种类型构造函数定义与调用 )
文章目录 一、构造函数分类1、构造函数分类简介2、构造函数分类代码分析无参构造函数有参构造函数拷贝构造函数 二、代码示例 - 三种类型构造函数定义与调用 一、构造函数分类 1、构造函数分类简介 C 构造函数可以分为以下几类 : 无参构造函数 : 最简单也是默认的构造函数 , 函…...
胡焕庸线,我国东西地级市分布密度分界线
背景 黑河—腾冲线,又名胡焕庸线,是我国人口密度分布的东西近似分界线。今天把地级市坐标分布密度做成热力图,并与胡焕庸线一起展示时,惊奇的发现,胡焕庸线貌似也是我车东西地级市分布密度的分界线。 生成folium地图…...
里氏替换原则在继承关系中子类对父类方法的重写(覆盖)或重载时应遵循的规则
什么是里氏替换原则:只要父类能出现的地方子类就可以出现,而且 替换为子类也不会产生任何错误或异常,使用者可能根本就不需要知道是父类还是子类。但是,反过来就不行了,有子类出现的地方,父类未必就能适应。…...
【脑机接口开源数据处理包】brainflowBrainFlow是一个库,旨在获取,解析和分析脑电图,肌电图,心电图和其他类型的数据从生物传感器。
BrainFlow是一个库,旨在获取,解析和分析脑电图,肌电图,心电图和其他类型的数据从生物传感器。 brainflow开源库官网地址 [https://brainflow.readthedocs.io/en/stable/](https://brainflow.readthedocs.io/en/stable/) 它提供了…...
#452. 序列操作
序列操作 - 题目 - Daimayuan Online Judge 问题描述: 思路:首先想的是第二次操作的y可以将前面所以操作进行抵消,只需要第二次操作的最大值即可。但是发现,对于第一个操作,它是单点修改,每修改一次对于第…...
《Python深度学习-Keras》精华笔记3:解决深度学习多分类问题
公众号:机器学习杂货店作者:Peter编辑:Peter 持续更新《Python深度学习》一书的精华内容,仅作为学习笔记分享。 本文是第三篇:介绍如何使用Keras解决Python深度学习中的多分类问题。 多分类问题和二分类问题的区别注意…...
区块链世界的大数据入门之zkMapReduce简介
1. 引言 跨链互操作性的未来将围绕多链dapp之间的动态和数据丰富的关系构建。Lagrange Labs 正在构建粘合剂,以帮助安全地扩展基于零知识证明的互操作性。 2. ZK大数据栈 Lagrange Labs 的ZK大数据栈 为一种专有的证明结构,用于在任意动态分布式计算的…...
Python流程控制语句-条件判断语句练习及应用详解
文章目录 简介条件判断语句(if语句)练习1:判断奇偶数练习2:判断闰年练习3:计算狗的年龄相当于人的年龄练习4:根据成绩奖励练习5:选择婚姻对象 小结 python 学习专栏推荐python基础知识ÿ…...
(十)ElasticSearch高级使用【别名,重建索引,refresh操作,高亮查询,查询建议】
1.别名使用 1)别名作用 在开发中,随着业务需求的迭代,较⽼的业务逻辑就要⾯临更新甚⾄是重构,⽽对于es来说,为了 适应新的业务逻辑,可能就要对原有的索引做⼀些修改,⽐如对某些字段做调整&…...
基于小波神经网络的中药材价格预测,基于ANN的小波神经网络中药材价格预测
目标 背影 BP神经网络的原理 BP神经网络的定义 BP神经网络的基本结构 BP神经网络的神经元 BP神经网络的激活函数, BP神经网络的传递函数 小波神经网络(以小波基为传递函数的BP神经网络) 代码链接:基于小波神经网络的中药材价格预测,ANN小波神经网络中药材价格预测资源-CS…...
thinkPhp5返回某些指定字段
//去除掉密码$db new UserModel();$result $db->field(password,true)->where("username{$params[username]} AND password{$params[password]}")->find(); 或者指定要的字段的数组 $db new UserModel();$result $db->field([username,create_time…...
基于docker环境的tomcat开启远程调试
背景: Tomcat部署在docker环境中,使用rancher来进行管理,需要对其进行远程调试。 操作步骤: 1.将容器中的catalina.sh映射出来,便于对其修改,添加远程调试相关参数。 注意:/data/produce2201…...
ELK日志框架图总结
ELK日志框架图总结 本文目录 ELK日志框架图总结Elastic Stack介绍模式分层图beatselasticsearchkibana模式logstashelasticsearchkibana模式beatslogstashelasticsearchkibana模式beats缓存/消息队列logstashelasticsearchkibana模式elkspringboot Elastic Stack介绍 官网&…...
go 每天定时任务 --chatGPT
问:clearLog(hour,cmds),定时执行shell 命令,hour 为每天的几点,cmds 为linux命令数组字符串(如 1,{"ls","cd"}) gpt: 要编写一个 Go 函数 clearLog,该函数可…...
Lightdb 23.3 plorasql函数支持DML
开篇立意 oracle在函数中使用dml语句时,有两者情况。即:(1)直接使用select调用该函数;(2)在匿名块中调用该函数。 针对第一种情况我们测试一下 简单的函数: create table nested_t…...
电容笔值不值得买?开学季比较好用的电容笔
眼看着新学期即将到来,到底应该选择什么样的电容笔?一款原装的苹果Pencil,就卖到了将近一千块,这对于很多人来说,都是一个十分昂贵的价格。事实上,由于平替电容笔的价格非常便宜,只要一二百元就…...
Mybatis 框架 ( 五 ) 分页
4.6.分页 Mybatis-plus 内置分页插件, 并支持多种数据库 官网 : 分页插件 | MyBatis-Plus (baomidou.com) 4.6.1.增加拦截器 通过 MapperScan 指定 mapper接口的路径 import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plug…...
Python模板注入
概念 发生在使用模板引擎解析用户提供的输入时。模板注入漏洞可能导致攻击者能够执行恶意代码或访问未授权的数据。 模板引擎可以让(网站)程序实现界面与数据分离,业务代码与逻辑代码分离。即也拓宽了攻击面,注入到模板中的代码可…...
Java常用的设计模式
单例模式(Singleton Pattern): 确保一个类只有一个实例,并提供一个全局访问点。示例:应用程序中的配置管理器。 工厂模式(Factory Pattern): 用于创建对象的模式,封装对象的创建过程。示例&…...
攻防世界-WEB-Web_php_include
打开靶机 通过代码审计可以知道,存在文件包含漏洞,并且对伪协议php://进行了过滤。 发现根目录下存在phpinfo 观察phpinfo发现如下: 这两个都为on 所以我们就可以使用data://伪协议 payload如下: - ?pagedata://text/plain,…...
angular中多层嵌套结构的表单如何处理回显问题
最近在处理angular表单时,有一个4层结构的表单。而且很多元素时动态生成,如下: this.validateFormthis.fb.group({storeId: ["test12"],storeNameKey:[],config:this.fb.group({ tableSize:this.fb.group({toggle:[false],groupSiz…...
Leetcode646. 最长数对链
Every day a Leetcode 题目来源:646. 最长数对链 解法1:动态规划 定义 dp[i] 为以 pairs[i] 为结尾的最长数对链的长度。 初始化时,dp 数组需要全部赋值为 1。 计算 dp[i] 时,可以先找出所有的满足 pairs[i][0]>pairs[j]…...
Windows 下安装NPM
第一步: 下载node.js的windows版 当前最新版本是https://nodejs.org/dist/ 第二步:设置环境变量 把node.exe所在目录加入到PATH环境变量中。 配置成功后可以在CMD中通过node --version 看到node.js对应的版本号 C:\Users\fn>node --version v6.10.2 第三步: 安装git 直接…...
【ARM CoreLink 系列 2 -- CCI-400 控制器简介】
文章目录 CCI-400 介绍DVM 机制介绍DVM 消息传输过程TOKEN 机制介绍 下篇文章:ARM CoreLink 系列 3 – CCI-550 控制器介绍 CCI-400 介绍 CCI(Cache Coherent Interconnect)是ARM 中 的Cache一致性控制器。 CCI-400 将 Interconnect 和coh…...
LeetCode(力扣)77. 组合Python
LeetCode77. 组合 题目链接代码 题目链接 https://leetcode.cn/problems/combinations/description/ 代码 class Solution:def combine(self, n: int, k: int) -> List[List[int]]:result []return self.backtracking(n, k, 1, [], result)def backtracking(self, n, k…...
uniapp h5 微信缓存,解决版本更新还是旧版本
文章目录 一、微信缓存是什么?二、如何解决1.打包入口文件解决2.给请求url加时间戳3.给打包的js文件添加时间戳并修改打包后的css文件夹 总结 一、微信缓存是什么? 微信缓存是指微信客户端为了提高用户的使用体验,会在用户使用微信过程中将一…...
Nacos——Distro一致性协议
Nacos——Distro一致性协议 1. 理论 一致性一直都是分布式系统中绕不开的话题。根据CAP中,要么CP(保证强一致性牺牲可用性),要么AP(最终一致性来保证可用性),在市面上也有几种一致性算法,像Paxos,Raft,Zoo…...
大模型参数高效微调PEFT的理解和应用
简介 近年的大型语言模型(也被称作基础模型),大多是采用大量资料数据和庞大模型参数训练的结果,比如常见的ChatGPT3有175B的模型参数量。随着Large Language Model(LLM)的横空出世,网络模型对常见问题的解答有了很强的…...
wordpress theme/优化关键词的方法正确的是
题目 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。 示例 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3->3 输出: 1->2->3 思路 解决删除重复问题的一个有效的思路就是双指针法&#x…...
佛山网页搜索排名提升/seo好seo
1.邮件传输和路由 邮件系统的主要功能是邮件传递,而邮件路由和传输完成了邮件在内部和外部的传递。 Exchange2007的管理员可以配置在组织内仅仅使用中心传输服务器来路由和传输邮件,或者使用中心传输服务器和边缘传输服务器来路由和传输邮件 当仅仅使用中…...
网站手机版建设/十大短视频平台排行榜
1 背景 结构方程模型是很常见的一种研究,目前R已经可以完成该内容的分析。 本文将介绍用R进行SEM的分析和研究。 2 数据介绍 PS: 数据链接上传到资源,可以关注后免费下载(只有积分和关注两个选项呀),一般小伙伴用来…...
电子商务网站建设影响因素/新品上市的营销方案
apache flinkApache flink是下一代大数据工具,也称为4G大数据。 这是真正的流处理框架(不会将流切成小批)。 Flink的内核(核心)是流式运行时,它还提供分布式处理,容错等功能。Flink以一致的高速…...
做足彩网站推广/东莞网络营销全网推广
大家好,我是 CUGGZ。今天来分享 12 个 yyds 的微信小程序开源项目,速速收藏!全文概览:wechat-app-mall:微信小程序商城;Vant Weapp:小程序 UI 组件库;iView Weapp:小程序…...
嘉兴市建设派出所网站/百度推广哪家做的最好
原文链接:http://doc.redisfans.com/pub_sub/index.html Redis的Pub/Sub模型可以应对工作中的一些简单应用,涉及到复杂应用还是推荐使用诸如RabbitMQ或ActiveMQ等。publish channel message 将message发送到指定频道,例:publis…...