千家信息网

STM32的FSMC外设是什么

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,STM32的FSMC外设是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。01、FSMC特点Flexible stat
千家信息网最后更新 2026年10月31日STM32的FSMC外设是什么

STM32的FSMC外设是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

01、FSMC特点

Flexible static memory controller(FSMC)灵活的静态存储控制器。FSMC可以连接异步或同步存储器或16位PC存储卡,主要用途有:

  • 将 AHB 数据通信事务转换为适当的外部器件协议

  • 满足外部器件的访问时序要求

所有外部存储器共享地址、数据和控制信号,但有各自的片选信号。FSMC 一次只能访问一个外部器件。

FSMC,即灵活的静态存储控制器,能够与同步或异步存储器和16位PC存储器卡连接,STM32的FSMC接口支持包括SRAM、NANDFLASH、NORFLASH和PSRAM等存储器。

△FSMC框图示意

02、AHB接口

AHB设备接口可以使内部CPU和其他主总线外设去访问外部存储器。AHB事务可以传输外部设备协议。特别是当外部存储器被选择位8位或16位,32位的AHB传输传输事务会被划分为多个连续的8位或16的传输事务。片选会在每次访问时切换。

通用事务规则要求AHB传输数据宽度必须是8位、16位或32位。但是访问外部数据必须有个固定的数据宽度。这可能导致不一样的传输。

因此必须遵循一些简单的事务规则:

  • AHB事务数据宽度必须和存储器数据宽度相同。在这种情况下不会出问题;

  • AHB事务数据宽度大于存储器数据宽度,在这种情况下,FSMC会将AHB事务分为多个连续的存储器访问,这样符合外部存储器访问数据宽度;

  • AHB事务数据小存储器宽度,在这种情况下,异步传输可能一致,也可能不一致,这取决于外部设备的类型。

对设备的异步访问要具有字节选择功能(SRAM,ROM,PSRAM),①FSMC 允许写入事务通过其字节选择通道 NBL[1:0] 访问恰当的数据,②允许读取事务。会读取所有存储器字节,并将丢弃无用的存储器字节。 NBL[1:0]在读取事务期间保持为低电平。

对不具有字节选择功能的器件( 16 位 NOR 和 NAND Flash)进行异步访问,当请求对 16 位宽的 Flash 存储器进行字节访问时会发生此情形。

显然,不能在字节模式下访问此器件(只能针对 Flash 存储器读取或写入 16 位字),因此①不允许写入事务,②允许读取事务。会读取所有存储器字节,并将丢弃无用的存储器字节。 NBL[1:0]在读取事务期间保持低电平。

03、外部设备地址映射

FSMC的外部设备地址映像,STM32的FSMC将外部存储器划分为固定大小为256M字节的四个存储块:

  • 块1被用于4个NORflash或者PSRAM内存设备。块1被划分为4块NORflash/PSRAM带有独立的片选信号。

  • 块2和块3用于连接NANDflash(一个块驱动一个设备)

  • 块4用于连接PC块设备

对于每个存储区域,所要使用的存储器类型由用户在配置寄存器中定义

HADDR[25:0] 包含外部存储器地址。由于HADDR为字节地址,而存储器按字寻址,所以根据存储器数据宽度不同,实际向存储器发送的地址也将有所不同,如下表所示:

05、外部存储器接口信号

非复用 I/OPSRAM/SRAM

注意:前缀"N"表示相关的信号为低电平有效

▽模式1写访问

▽模式A写访问

与模式1的不同之处在于NOE 的切换与独立的读取和写入时序

对于模式A,

ADDSET就是NWE的高电平时间,也就是地址建立时间

DATAST就是NWE的低电平时间,也就是数据保持时间

09、代码说明

readWriteTiming.FSMC_AddressSetupTime = 0x02;   //地址建立时间(ADDSET)为2个HCLK 2*1/120M=16nsreadWriteTiming.FSMC_AddressHoldTime = 0x02;   //地址保持时间(ADDHLD),16ns  readWriteTiming.FSMC_DataSetupTime = 0x06;     //数据建立时间,50nsreadWriteTiming.FSMC_BusTurnAroundDuration = 0x00;//总线恢复时间readWriteTiming.FSMC_CLKDivision = 0x00;// 时钟分频因子 readWriteTiming.FSMC_DataLatency = 0x00;//数据产生时间readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A;   //模式A

FSMC_AddressSetupTime:这些位定义地址的建立时间,适用于SRAM、ROM和异步总线复用模式的NOR闪存操作。

FSMC_AddressHoldTime :这些位定义地址的保持时间,适用于SRAM、ROM和异步总线复用模式的NOR闪存操作。

FSMC_DataSetupTime:这些位定义数据的保持时间,适用于SRAM、ROM和异步总线复用模式的NOR闪存操作。

FSMC_BusTurnAroundDuration:这些位用于定义一次读操作之后在总线上的延迟(仅适用于总线复用模式的NOR闪存操作),一次读操作之后控制器需要在数据总线上为下次操作送出地址,这个延迟就是为了防止总线冲突。如果扩展的存储器系统不包含总线复用模式的存储器,或最慢的存储器可以在6个HCLK时钟周期内将数据总线恢复到高阻状态,可以设置这个参数为其最小值。

FSMC_CLKDivision :定义CLK时钟输出信号的周期,以HCLK周期数表示。

FSMC_DataLatency:处于同步成组模式的NOR闪存,需要定义在读取第一个数据之前等待的存储器周期数目。这个时间参数不是以HCLK表示,而是以闪存时钟(CLK)表示。在访问异步NOR闪存、SRAM或ROM时,这个参数不起作用。操作CRAM时,这个参数必须为0

FSMC_AccessMode :访问模式

FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;//  这里我们使用NE1 ,也就对应BTCR[6],[7]。FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;// 不复用数据地址FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;// FSMC_MemoryType_SRAM; FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;//存储器数据宽度为8bit   FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;  FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;//  存储器写使能FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;// 读写使用相同的时序FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming;//读写时序FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &readWriteTiming;//写时序

FSMC_Bank:nor被分为四块,其中这个参数是说明对那个块编程

FSMC_DataAddressMux:地址\数据是否复用

FSMC_MemoryType:存储器类型

FSMC_MemoryDataWidth:数据总线宽度8位/16位

FSMC_BurstAccessMode:是否进行成组模式访问

FSMC_WaitSignalPolarity:等待信号有效级性

FSMC_WrapMode:该位决定控制器是否支持把非对齐的AHB成组操作分割成2次线性操作;该位仅在存储器的成组模式下有效。

FSMC_WaitSignalActive:当闪存存储器处于成组传输模式时,NWAIT信号指示从闪存存储器出来的数据是否有效或是否需要插入等待周期。该位决定存储器是在等待状态之前的一个时钟周期产生NWAIT信号,还是在等待状态期间产生NWAIT信号。

FSMC_WriteOperation:该位指示FSMC是否允许/禁止对存储器的写操作。

FSMC_WaitSignal:当闪存存储器处于成组传输模式时,这一位允许/禁止通过NWAIT信号插入等待状态。

FSMC_ExtendedMode:该位允许FSMC使用FSMC_BWTR寄存器,即允许读和写使用不同的时序。

FSMC_WriteBurst:对于处于成组传输模式的闪存存储器,这一位允许/禁止通过NWAIT信号插入等待状态。读操作的同步成组传输协议使能位是FSMC_BCRx寄存器的BURSTEN位。

FSMC_ReadWriteTimingStruct:读时序配置指针

FSMC_WriteTimingStruct:写时序配置指针

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

存储 存储器 数据 模式 事务 地址 时间 信号 总线 字节 宽度 闪存 传输 设备 时序 复用 周期 参数 器件 时钟 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 瑰夏咖啡 花魁咖啡 互联网新科技 科技互联网技术 科技互联网公司logo 亿人帮互联网科技 科技互联网创业计划书 居家互联网科技有限公司 广西拼得多互联网科技有限公司 华中科技有哪些互联网大佬 济南和联互联网科技有限公司 新华互联网科技2019 温州喔噻互联网科技有限公司 湖南诚度互联网科技有限公司 互联网科技革命什么开始 成都互联网科技公司工作好不好 深圳市优智互联网科技有限公司 互联网新科技动漫ppt素材 互联网金融科技公司的优势 三亚科技创新互联网基地 万易互联网科技有限公司 互联网与未来科技 美国互联网黑科技 深圳卡尔迅互联网科技有限公司怎么样 济南和联互联网科技有限公司 互联网科技公司的市场部门 团飞科技与伯堂互联网服务平台 深圳无忧互联网科技 兰石爱特工业互联网科技分公司 承德科技产业互联网平台
0