楼主: 人力何婷婷
417 0

[其他] FSMC基础知识梳理 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

80%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0.0253
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
30 点
帖子
2
精华
0
在线时间
0 小时
注册时间
2018-3-6
最后登录
2018-3-6

楼主
人力何婷婷 发表于 2025-11-21 17:05:54 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

FSMC基本介绍

FSMC(Flexible Static Memory Controller)是STM32系列微控制器中用于连接外部存储设备的重要外设。它支持多种存储类型,如SRAM、NOR Flash、PSRAM、NAND Flash以及PC Card等,同时还可用于驱动并行接口的LCD显示屏。通过将外部设备映射至处理器的地址空间,FSMC使得对这些设备的访问如同操作内部内存一般简便高效。

FSMC核心功能特性

  • 多类型存储支持:可接入SRAM、PSRAM、NOR Flash、NAND Flash和PC Card等多种外部存储器件。
  • 灵活时序配置:允许为不同性能的存储器独立设置读写时序参数,以匹配其电气特性。
  • 多Bank架构:提供4个独立存储块(Bank1-Bank4),每个块可单独配置并连接不同类型的设备。
  • 数据宽度可调:支持8位、16位和32位三种数据总线宽度,适应不同外设需求。
  • 写FIFO机制:在STM32H7系列中,FMC(FSMC升级版)引入了写FIFO功能,提升连续写入效率。
  • 扩展时序模式:支持分别为读操作和写操作设定不同的时序参数,增强灵活性(仅限FMC)。

存储块划分与地址映射关系

FSMC将外部存储区域划分为四个主要存储块,各自拥有固定的地址范围:

  • Bank1:0x6000 0000 – 0x6FFF FFFF(256MB)
  • Bank2:0x7000 0000 – 0x7FFF FFFF(256MB)
  • Bank3:0x8000 0000 – 0x8FFF FFFF(256MB)
  • Bank4:0x9000 0000 – 0x9FFF FFFF(256MB)

每个存储块进一步细分为4个子区,每区64MB,由对应的片选信号NE[4:1]进行选择,实现精准设备寻址。

关键信号线说明

FSMC通过以下引脚与外部设备通信:

  • 地址线 A[25:0]:输出地址信息,最大支持26位寻址。
  • 数据线 D[15:0]:双向数据通道,支持16位并行传输(部分型号支持32位)。
  • 片选信号 NE[4:1]:分别对应Bank1到Bank4,用于激活特定存储块。
  • 读使能 NOE:低电平有效,控制数据读取过程。
  • 写使能 NWE:低电平有效,触发写操作。
  • 字节使能 NBL[1:0]:在16位模式下,用于选择高字节或低字节传输。
[此处为图片1]

FSMC初始化配置流程

  1. 开启FSMC时钟:通过RCC寄存器启用FSMC模块的时钟源。
  2. 配置GPIO引脚:将相关地址、数据及控制引脚设置为复用推挽输出模式,并指定为FSMC功能。
  3. 设定时序参数:依据外设手册中的时序要求,配置地址建立、数据建立、保持时间等关键参数。
  4. 配置存储块控制寄存器:设置目标设备类型、数据宽度、访问模式(同步/异步)等属性。
  5. 启用存储块:激活对应Bank,完成整体配置。
[此处为图片2]

时序参数详细解析

为确保稳定通信,需精确配置以下时序参数:

  • 地址建立时间(ADDSET):指地址信号稳定后,到NOE/NWE有效前所需的等待周期数。
  • 数据建立时间(DATAST):对于读操作,表示从NOE有效到数据被正确采样的时间;对于写操作,则是NWE有效期间数据必须保持有效的持续时间。
  • 地址保持时间(ADDHLD):在读/写使能信号失效后,地址仍需维持有效的最短时间。
  • 数据保持时间(DATAHLD):写操作结束后,数据线上信息应继续保持的时间长度。

所有时序值通常以HCLK(AHB时钟)周期为单位进行计算和设置。

FSMC连接LCD的应用方式

当使用FSMC驱动并口LCD时,常将其模拟为SRAM设备处理。其中,LCD的寄存器选择信号RS通常连接至某一根地址线(如A0或A16),以此区分命令与数据访问:

若RS接至A16,则:

  • 命令写入地址 = 基地址 + 0x0000
  • 数据写入地址 = 基地址 + 0x20000(即基地址 + (1<<16))

通过切换访问地址即可实现指令与显存数据的分离控制。

[此处为图片3]

DMA在FSMC中的应用

FSMC支持DMA(直接内存访问)传输机制,特别适用于大量数据搬运场景,例如LCD屏幕刷新、图像帧传输等。借助DMA,CPU无需参与每一次数据传送,显著降低负载,提高系统响应速度与运行效率。

实际应用中的注意事项

  • GPIO速度设置:在高频操作下,建议将FSMC相关引脚配置为最高速度等级,以减少信号延迟。
  • 未使用引脚处理:闲置的FSMC引脚应设为模拟输入或强制输出低电平,防止浮空引发噪声干扰。
  • 时序调试优先:若出现通信异常,应首先核查时序参数是否符合外设规格,必要时适当增加建立与保持时间余量。
  • 电源稳定性保障:确保外部设备供电干净稳定,合理布置去耦电容,避免因电源波动导致误动作。

关于STM32H7中的FMC模块

在STM32H7系列中,原FSMC被升级为FMC(Flexible Memory Controller),具备更强的功能支持。FMC不仅支持更高的工作频率,还提供更精细的时序控制选项,包括读写独立定时、更复杂的突发传输模式等,适用于高性能外部存储扩展需求。

总结

FSMC作为STM32平台上的关键外设之一,极大简化了对外部存储器及并行接口设备的集成与管理。通过合理的硬件连接与软件配置,尤其是准确设置各项时序参数,能够可靠地支持多种速率和类型的外设。熟练掌握FSMC/FMC的使用方法,对于开发涉及大容量存储扩展或高速LCD驱动的应用具有重要意义。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:基础知识 SMC controller Flexible control

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2026-1-8 13:32