【STM32】FSMC

news2024/9/21 12:25:48

FSMC在正点原子的HAL课程中用法较为单一,就是用来模拟8080时序驱动LCD屏幕,其实就是利用FSMC读写LCD模块的SRAM。当然,这个我也没有买,只学习了理论。

大部分图片来源:正点原子HAL库课程

 专栏目录:记录自己的嵌入式学习之路-CSDN博客


目录

1    用途

2    引脚

3    FSMC驱动LCD屏幕

3.1    GPIO8080和FSMC驱动的概念区别

​编辑

3.2    FSMC的五种异步时序

3.3    FSMC时序与GPIO8080时序的对比

3.4    FSMC的地址映射

3.5    FSMC的本质

3.6    8080 RS信号选择的实现

3.7    相关HAL库函数

3.8    重要结构体

3.9    实际使用


1    用途

FSMC,Flexible Static Memory Controller,灵活的静态存储控制器。

用于驱动SRAM,NOR FLASH,NAND FLASH及PC卡类型的存储器。配置好FSMC,定义一个指向这些地址的指针,通过对指针操作就可以直接修改存储单元的内容,FSMC自动完成读写命令和数据访问操作,不需要程序去实现时序。也就是无需手动去拉高、拉低信号实现选择写、读和选择读写命令、数据等东西。

F1/ F4(407)系列大容量型号,且引脚数目在100脚以上的芯片都有FSMC接口。F4/F7/H7系列就是FMC接口,区别是FMC可以直接驱动SDRAM,FSMC不行。


2    引脚

  • 引脚名称的N表示该信号是低电平有效。
  • 上面红框框着的部分是LCD要用到的。

3    FSMC驱动LCD屏幕

3.1    GPIO8080和FSMC驱动的概念区别

3.2    FSMC的五种异步时序

选择模式A的原因:

  • 操作屏幕实际操作的是屏幕的SRAM,因此模式B、C都不满足;
  • 而模式1在读时序时片选信号不翻转,但在8080时序中,要进行读写操作时WR和RD都是上升沿才有效,因此模式1也不满足;
  • 忽略过于高级的模式D;
  • 选择模式A;

3.3    FSMC时序与GPIO8080时序的对比

可以看到,总体来说FSMC的时序和8080是一致的,只是在实际使用中,各高低电平的脉宽需要根据8080的进行细微调整,具体需要查阅LCD屏幕的数据手册。需调整的部分时序如下图所示:

3.4    FSMC的地址映射

注意⚠️:这里FSMC有4个存储块,每个存储块又有4个区;存储块叫做Bank,选区其实也叫Bank。在实际使用中,一般都是通过存储块的功能来区分存储块,再通过序号区分选区,如:FSMC_NORSRAM_BANK1,这里说的就是Bank1的第4区。因此正点原子的例程写的Bank4其实是没错的,因为它已经指定了NOR的存储块了。

这里HADDR是内部AHB地址总线,其中HADDR[25:0]来自外部存储器地址FSMC_A[25:0],而HADDR[26:27]对4个区进行寻址。

在FSMC连接到8位的存储器时,其HADDR[25:0]就完全对应FSMC_A[25:0],但是对于16位的存储器,由于HADDR的一个位就不对应FSMC中的一个地址了,因为其一个位本应对应一个字节,但如果按一个一个来,访问到的就是外部的半个数据,因此需要将HADDR右移一位,使得HADDR的一位对应上FSMC的一个数据长度。

3.5    FSMC的本质

自动片选、自动发送地址信号,自动输出/输入。

当FSMC外设被配置成正常工作,并且外部接了NOR FLASH时,若向0x60000000地址写入数据如0xABCD,FSMC会自动在各信号线上产生相应的电平 信号,写入数据。FSMC会控制片选信号NE1选择相应的NOR 芯片,然后使用地址线A[25:0]输出0x60000000,在NWE写使能信号线上发出低 电平的写使能信号,而要写入的数据信号0xABCD则从数据线D[15:0]输出,然后数据就被保存到NOR FLASH中了。

3.6    8080 RS信号选择的实现

要实现8080的RS选择命令/数据的效果,需要用地址线来做。

因为RS信号线实质就是低电平是命令,高电平是数据,所以实际上它不需要选择命令,只需要有一条信号线选择数据就行。因此,在LCD的例子中,使用FSMC_A10,即地址总线的其中一根来做选择即可。

而例子中之所以说代表命令的地址是0x6C00 0000,而代表数据的地址是0x6C00 0800(注意⚠️这里偏移了0x800是因为10号地址线是210*2,乘2是因为要将地址右移以满足16位的数据宽度),是因为总得选择一个地址嘛,所以就是用FSMC_NEx的基地址做命令地址,用FSMC_A10的地址做数据地址。那么,在将FSMC_A10接到RS线上后,根据FSMC的信号时序,我在写FSMC_A10的数据时,那么由于FSMC_A10变为高电平,那么RS也会处于高电平,相当于选择了数据。而不对FSMC_A10写数据时,其将位于低电平状态,从而选择了命令。

3.7    相关HAL库函数

3.8    重要结构体

SRAM_HandleTypeDef:SRAM控制句柄

其中:

  • Instance应为FSMC_NORSRAM_DEVICE
  • Extended应为FSMC_NORSRAM_EXTERNDEVICE
  • Init最为重要
  • 剩下的用不到

FSMC_NORSRAM_InitTypeDef:SRAM初始化结构体

其中:

  • NSBank设为FSMC_NORSRAM_BANK4(因为实验中用到的是内存块4)
  • DataAddressMux设为FSMC_DATA_ADDRESS_MUX_DISABLE(因为实验中并未将地址线和数据线复用,因此不使能)
  • MemoryType设为FSMC_MEMORY_TYPE_SRAM(屏幕的显存为SRAM)
  • MemoryDataWidth设为FSMC_NORSRAM_MEM_BUS_WIDTH_16(屏幕的数据宽度为16位)
  • WriteOperation设为FSMC_WRITE_OPERATION_ENABLE(使能写操作)
  • ExtendedMode设为FSMC_EXTENDED_MODE_ENABLE(扩展模式指的是设置读写时设置的时序不一致,而LCD的8080总线需要读写时序不一致,因此需要设置为使能)
  • 其余在SRAM模式基本不需要管

FSMC_NORSRAM_TimingTypeDef:时序初始化结构体

其中:

  • AddressHoldTime在模式A中并没有用到;

3.9    实际使用

在FSMC的实际使用中,其实就是定义并初始化好了FSMC之后,直接根据FSMC的基地址定义一个数据长度的两个变量,一个是命令地址,一个是数据地址。如:

#define FSMC_ADDR_DATA          ((uint32_t) 0X6C000800)
#define FSMC_ADDR_CMD           ((uint32_t) 0X6C000000)

而这之后,对这两个地址写入数据就是写命令和写数据啦,如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2082209.html

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

相关文章

无线通信-WIFI通信

文章目录 1. 基础知识2. 工作模式3. AT指令4. 常用AT指令实例5. 连接原子云6. 使用usb转ttl模块测试ATK-MW8266D7. 使用STM32F103ZET6战舰开发板透传模式8. 使用STM32F103ZET6战舰板连接原子云 1. 基础知识 ATK-ESP-01 ATK-ESP-01模块支持标准的IEEE802.11b/g/n协议&#xff0c…

scriptlet failed, exit status 1

执行命令:rpm -evh percona-release-1.0-29.noarch 报错信息: mv: cannot stat ‘/etc/yum.repos.d/percona-telemetry-release.repo’: No such file or directory error: %preun(percona-release-1.0-29.noarch) scriptlet failed, exit status 1 …

面试必备!15个SSH服务器经典问题,助你轻松过关斩将!

SSH(Secure Shell)是Linux系统中最常用的远程管理工具之一,掌握它是每个运维工程师的必备技能。在面试中,关于SSH服务器的相关问题经常会被问到。本文将列出15个常见的SSH服务器面试题,并提供简要解答,帮助你在面试中脱颖而出。 什…

使用 Puppeteer 在 PHP 中解决 reCAPTCHA 以进行网页抓取

您是否在抓取数据时遇到 reCAPTCHA 障碍?我也遇到过。这些 CAPTCHA 挑战会将简单的抓取任务变成一大障碍。但别担心,我有一个解决方案可以帮助您轻松绕过这些障碍。 在本博文中,我将引导您使用 Puppeteer(一个功能强大的 Node.js…

【Java设计模式】Bridge模式:在Java中解耦抽象与实现

文章目录 【Java设计模式】Bridge模式:在Java中解耦抽象与实现一、概述二、Bridge设计模式的别名三、Bridge设计模式的意图四、Bridge模式的详细解释及实际示例五、Java中Bridge模式的编程示例六、Bridge模式类图七、Java中何时使用Bridge模式八、Java中Bridge模式的…

如何使用ssm实现毕业生交流学习平台+vue

TOC ssm306毕业生交流学习平台vue 绪论 1.1 研究背景 现在大家正处于互联网加的时代,这个时代它就是一个信息内容无比丰富,信息处理与管理变得越加高效的网络化的时代,这个时代让大家的生活不仅变得更加地便利化,也让时间变得…

某系统任意用户创建漏洞

初来人间不知苦,潦倒半生一身无,转身回望来时路,方知生时为何哭。 漏洞描述 某系统存在任意用户创建漏洞,发送特定的请求包攻击者可以创建管理员账户登录后台 漏洞实战 出现漏洞的文件为 userproce.php,出现漏洞的…

汽车免拆诊断案例 | 马自达CX-3无音频输出

故障现象: 使用触摸屏打开收音机时,单选按钮打开收音机,但无法访问菜单。使用中控台中的旋转控制旋钮时,也会遇到相同的情况。 没有音频输出到车上的任何扬声器,包括卫星导航、蓝牙或语音识别。音量调节也不起作用&a…

食家巷大烤馍,美味超实在

在美食的世界里,总有一些味道能勾起我们内心深处的温暖回忆,食家巷大烤馍便是其中之一。 每一个食家巷大烤馍都是匠心的结晶。首先,精选优质的面粉,确保了烤馍的基础品质。这些面粉经过严格的筛选,颗粒细腻&#xff0c…

2024/8/28 英语每日一段

“Its great were getting these investments, but you actually cant materialize the benefits of these investments if the cities actually cant afford to run it,” he said. All of the eight cities say the planned expansions, such as new light rail lines in Ott…

掌握高效管理技巧:9款顶级待办事项软件

本文将介绍9款优质待办事项清单工具:1.PingCode;2.Worktile;3.滴答清单 (TickTick);4.日事清;5.效能工作任务;6.印象笔记;7.MyLifeOrganized;8.Quire;9.OmniFocus。 在当…

CTFhub通关攻略-SSRF篇【1-5关】

01关 内网访问 根据题意,它让我们去尝试访问127.0.0.1的flag.php,我们点进题目链接 有一个url参数可以进行输入,我们直接访问127.0.0.1的flag.php 这样就得到了flag 02 伪协议读取文件 点开题目链接发现有一个url的参数可以进行填写 题中说让…

【贪心 决策包容性 】757. 设置交集大小至少为2

本文涉及知识点 贪心 决策包容性 LeetCode757. 设置交集大小至少为2 给你一个二维整数数组 intervals ,其中 intervals[i] [starti, endi] 表示从 starti 到 endi 的所有整数,包括 starti 和 endi 。 包含集合 是一个名为 nums 的数组,并…

redis核心数据结构源码分析

dictEntry和redisObject 在 Redis 的实现中,当一个键值对被创建并存储时,键通常是一个字符串,而值则是一个 redisObject。因此,在 dictEntry 结构中,key 成员指向的是一个字符串,而 v.val 成员则指向一个 …

《深入理解JAVA虚拟机(第2版)》- 第2章 - 学习笔记

第二章 Java内存区域与内存溢出异常 2.1 概述 JVM是自动内存管理 2.2 运行时数据区 所谓运行时数据区是JVM在运行Java程序的时候将所管理的内存划分为几块不同的数据区域,分为:程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区,如下…

樊振东代言LV旗下品牌,媒介易解读冠军代言背后的商业逻辑

​近日,法国奢侈品巨头LVMH旗下的德国知名拉杆箱品牌RIMOWA宣布,中国乒乓球奥运冠军樊振东成为其品牌挚友。这一合作不仅是RIMOWA对樊振东在巴黎奥运会上出色表现的认可,也标志着品牌与体育冠军联手打造品牌形象的趋势日益显著。 樊振东&…

Moco求解最优化问题使用教程

理论部分 最简单的例子,流程 输出结果分析 理论部分 moco最终是调用CasAdi求解器来进行求解 对不常见的几个符号表达式含义进行解释: 多刚体动力学公式代表系统中,f_inertial (惯性力和科里奥利力);f_app (外力和接触力)&…

SQL注入-ctfshow

首先还是对sql的具体分析和讲解 原理: SQL注入是一种安全漏洞,它允许攻击者通过在应用程序的输入中插入或者操作SQL命令来改变后端数据库的查询和操作。SQL注入的主要原因是代码中直接将用户输入与SQL命令拼接在一起,没有进行适当的验证或清…

网络安全可以从事哪些岗位岗位职责是什么网络安全专业的就业前景

网络安全可以从事哪些岗位 伴随着社会的发展,网络安全被列为国家安全战略的一部分,因此越来越多的行业开始迫切需要网安人员,也有不少人转行学习网络安全。那么网络安全可以从事哪些岗位?岗位职责是什么?相信很多人都不太了解,…

『功能项目』着色器光透魔法球Shaders【09】

我们打开上一篇08技能释放的项目, 本章要做的事情是为魔法球增添一个光透效果shaders。 首先在Assets中创建一个Shaders文件夹 接着将场景中的灯光调暗一些(避免灯光太强压过将要设置半透明光透效果的魔法球) 将新Resources中的Shpere拖拽至…