一文读懂FSMC模块的使用方法
FSMC模块 是STM32系列微控制器的一个外设,它可以实现与外部存储器或显示器的连接和控制。FSMC模块的全称是灵活的静态存储控制器(Flexible Static Memory Controller),它支持SRAM、ROM、PSRAM、NOR Flash、NAND Flash、PC Card等存储器类型,以及80位或16位并口TFT LCD等显示器类型。
FSMC模块的主要特点有:
它具有高度的灵活性和可编程性,可以根据不同的外部设备类型和需求,配置不同的访问时序和参数,以实现最优化的性能和效率。它具有高度的集成度和兼容性,可以将多个外部设备共享地址、数据和控制信号,但有各自的片选信号。FSMC模块一次只能访问一个外部设备,但可以通过软件切换来实现多个设备的管理。它具有高速度和高可靠性的优势,可以利用内部时钟HCLK来同步外部设备的信号时序,以提高信号质量和系统稳定性。FSMC模块的主要组成部分有:
AHB接口:用于将内部CPU和其他主总线外设的访问请求转换为适合外部设备的协议和信号。NOR Flash/PSRAM控制器:用于驱动异步或同步的NOR Flash或PSRAM存储器,支持多种访问模式和时序参数。NAND Flash/PC卡控制器:用于驱动NAND Flash或PC卡存储器,支持ECC校验和FIFO缓冲区等功能。外部设备接口:用于输出地址、数据和控制信号到外部设备,支持多种数据宽度和复用模式。FSMC模块的使用方法有:
配置FSMC模块的相关寄存器,如FSMC_BCRx、FSMC_BTRx、FSMC_BWTRx等,以设置外部设备的类型、数据宽度、访问模式、时序参数等。连接FSMC模块的相关引脚,如FSMC_Ax、FSMC_Dx、FSMC_NEx等,到外部设备的对应引脚,注意引脚功能设置为复用模式。通过FSMC模块的地址映射空间,如0x60000000~0x6FFFFFFF等,来读写外部设备的数据,注意地址线和数据线之间的对应关系STM3嵌入式-FSMC地址映射
本章学习目标:
1,了解FSMC模式
1.2 FSMC 简介
引脚数在 100 脚以上的 STM32F103 芯片都带有 FSMC 的接口,而什么是 FSMC 呢?FSMC 即灵活的静态存储控制器,FSMC 的接口支持包括 SRAM、NAND FLASH、NOR FLASH、 PSRAM 等存储器。说白了呢,就是可以当操作 SRAM、NAND FLASH、NOR FLASH 和 PSRAM 等存储器的时候,我们不必自己操作 IO 口模拟这些存储器的操作时序了,使用 FSMC 模块可以直接帮我们读写这些存储器。而 NOR FLASH 主要使用的信号线主要有:
FSMC信号名称
从 FSMC 的角度看,可以把外部存储器划分为固定大小为 256M 字节的四个存储块,每个存储块分4个段,如下图:
FSMC外部存储器
每段的存储空间为64MB,刚好对应地址线[A0,A25] 。四个段我们是通过FSMC_NE[X]来选择,在硬件设计时连接到外部设备的片选引脚。举个例子:假设我们用的是FSMC_NE4连接到外部存储器的片选引脚,那么该存储段在STM32中的地址范围是0x6C000000 到 0x6FFFFFFF 的区域,也就是说当我们对地址0x6C000000 到 0x6FFFFFFF 的区域进行操作的时候, FSMC模块就可以自动帮我们操作外部存储器,相当于把外部存储器挂在了单片机的地址总线上面了。
1.3:0x6C000000 到 0x6FFFFFFF之间的区域又是如何映射的呢
在了解这个问题之前我们先了解一下,TFT-LCD 8080 模式。
8080接口 模式
如图所示,我们把FSMC_NE4连接到8080接口中的CS,把地址线FSMC_A10连接到RS上。我们知道当RS为高电平的时候对显示屏传送数据,反之则传送命令。也就是说当我们要向显示屏传输数据的时候只要地址线 A10 输出为 1,就可以了;而当我们要写入命令的时候,正好相反,地址线 A10 输出为 0。我们例程上面使用结构定义的方式,我们定义一个结构体:
/* TFT 地址结构体 */ typedef struct
{
u16 TFT_CMD;
u16 TFT_DATA;
} TFT_TypeDef;
然后定义一个 TFT 的结构体,映射到(0x6C000000 | 0x000007FE)地址上面:
#define TFT_BASE ((uint32_t)(0x6C000000 | 0x000007FE))
#define TFT ((TFT_TypeDef *) TFT_BASE)
那么 TFT 这个结构体的 TFT_CMD 就映射在(0x6C000000 | 0x000007FE)这个地址上面, 这个时候, 地址线 A10 是为 0 的, 同时, TFT 这个结构体的 TFT_DATA 自动映射到了地址 0x6C000800 上面, 0x6C000800 也就是 (0x6C000000 | 0x000007FE) + 2,为什么加 2 呢?也因为我们定义的 TFT_CMD 是 16 位,在 FSMC 上面的地址对应的存储长度是 8 位,16 位也就 2 地址。
此时可能有同学会问:(0x6C000000 | 0x000007FE)把它转换成二进制后很容易发现刚好对应A10的是1,怎么会是零呢?注意我们定义的是16位模式。我们知道外部设备的内部AHB地址线每个地址对应一个字节单元。也就是如果模式是16位的那么最大可访问的32MB的地址空间对应地址线为A25-A1,也就是自动向右移了一位。
相关问答
stm32怎么判断是f1还是f4?F4的ADC最大采样频率为2.4Msps,3路交替采样可到7.2Msps。F1只有12个DMA通道,F4有16个DMA通道。F4的每个DMA通道有4*32位FIFO,F1没有FIFO。F1的SPI...
变频器上ma和 mc 接线端子的作用?MA,MB,MC一般就叫报警输出,MAMC为常开,MBMC为常闭.当变频器报警后此路输出动作(肯定是串联),不会影响变频器单独的复位重启.但动作后会影响设备正常工作,是作...
(焦)等效的是()A.N・mB.w/ mC .w・sD.N・s_作业帮[最佳回答]A、由公式:W=Fs,W的单位:J,F单位:N,s单位:m,可知:1J=1N•m,即N•m与功的单位J等效,故A正确;B、W是功率单位,m是长度单位,Wm不可能表示J,故B错误;C、...
OSD全称是什么啊?-ZOL问答OSD是on-screendisplay的简称,即屏幕菜单式调节方式。一般是按Menu键后屏幕弹出的显示器各项调节项目信息的矩形菜单,可通过该菜单对显示器各项工作指标包括色...
同一个项目分别用stm32和51单片机会有什么不同?在项目开发过程中,我们经常会遇到需要单片机选型,所以我们常常会根据项目功能需求来选择合适的单片机品牌和型号。常见的51内核单片机和STM32单片机也会是我们...
在线的老铁帮个忙呗!!性价比高STM公司,STM排名怎么样大家...[回答]STM32F103里面挑,你去www.stmcu.org看资料,淘宝看价格M3内核降低了系统存储要求,同时快速的中断处理能够满足控制领域的高实时性要求,使基于该内核...
用STM32挂接的最大 Nand Flash到多少?看下STM32f103的FSMC寻址地址是从0x70000000到0x8FFFFFFF就是8*64M的nandflashbank2,bank3还支持SRAM看下STM32f103的FS...
飞思卡尔芯片命名规则?MC9S12Dх256BхххE(1)(2)(3)(4)(5)(6)(7)(8)(9)(1)表示产品状态,共有MX,XC,PC,KMC,KXC等5种。其中MC表示完全合格品;XC表示部分合格品,...
aeroflyfsglobal怎么玩a320?要在AeroflyFSGlobal中玩空客A320,您可以通过以下步骤来体验飞行:1.**启动模拟器**:确保您已经安装了AeroflyFSGlobal模拟器,并且在您的设备上运行它。.....
初二的物理公式的字母分别代表什么_作业帮[回答]力1、压强:p=F/Sp表示压强,单位帕斯卡(简称帕,符号Pa)F表示压力,单位牛顿(N)S表示受力面积,单位平方米.2、液体压强和浮力:f=肉gh3、密度ρ=m/vρ...