FSMC应用简介
FSMC全称“静态存储器控制器”,STM32可以通过FSMC与SRAM、ROM、PSRAM、Nor
Flash和NandFlash存储器的引脚相连,从而进行数据的交换。
一、FSMC的特点:
1、
FSMC的一大特点是支持不同位宽的异步读写操作。
2、
FSMC的映射地址空间中,不同的BANK是独立的,可用于扩展不同类型的存储器。当FSMC同时使用多个外部存储器时,FSMC会通过总线悬空延时时间参数,来防止访问冲突发生。
3、
支持代码从FSMC扩展的外部存储器中直接运行。不需要首先调入内部SRAM。
二、FSMC的结构组成:
如图所示,FSMC主要分为四部分:
1、
FSMC一端连接着AHB高速总线,与Cortex-M3内核相连接。
2、
FSMC内部实际上包括Nor
Flash和Nand/PC
Card两个控制器,支持两种不同的存储方式。
3、
外部设备接口。
4、
配置寄存器,用于选择FSMC的功能。http://s9/mw690/002YFTLJgy6KvUch2UUc8&690
三、FSMC的映射空间
FSMC管理1GB的映射地址空间。可以划分为4个256M的BANK,每个BANK又划分为4个64M的子BANK,如下表所示。http://s13/mw690/002YFTLJgy6KvUcb6Mcec&690
FAMC对每个存储块分配一个唯一的片选信号NE[4:1]。
四、FSMC的初始化
在使用SRAM之前,我们需要对SRAM使用的FSMC
BANK进行参数配置,使之与SRAM芯片的要求相符合。
FSMC所占用的引脚初始化
在STM32技术手册中,针对FSMC引脚的GPIO模式配置,已经进行了说明,具体FSMC总线配置方法如下。下表指的是整个FSMC接口的引脚初始化配置说明,应该根据实际初始化相关的引脚。http://s16/mw690/002YFTLJgy6KvUcnk195f&690
完成FSMC引脚初始化后,要配置可编程存储器的参数,包括时序,是否支持非对齐访问和等待周期管理(只针对突发模式访问PSRAM和NOR闪存
。
http://s16/mw690/002YFTLJgy6KvUct83d7f&690
p.FSMC_AddressSetupTime = 0;
//地址建立时间
p.FSMC_AddressHoldTime = 0;
//地址保持时间
p.FSMC_DataSetupTime = 2;
//数据建立时间
p.FSMC_BusTurnAroundDuration = 0;
//总线恢复时间
p.FSMC_CLKDivision = 0;
//
时钟分频因子
p.FSMC_DataLatency = 0;
//数据产生时间
p.FSMC_AccessMode = FSMC_AccessMode_A;
//FSMC NOR控制器时序
存储器类型、RAM数据宽度、AM地址范围、用的FSMC
BANK、FSMC工作模式的初始化等。
FSMC_NORSRAMInitStructure.FSMC_Bank =
FSMC_Bank1_NORSRAM3;
//使用了FSMC的BANK1的子板块3
FSMC_NORSRAMInitStructure.FSMC_DataAddressMux =
FSMC_DataAddressMux_Disable;//禁止地址数据线复用
FSMC_NORSRAMInitStructure.FSMC_MemoryType =
FSMC_MemoryType_SRAM;
//存储器类型为SRAM
FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth =
FSMC_MemoryDataWidth_16b; //存储器数据宽度为16位
FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =
FSMC_BurstAccessMode_Disable; //关闭突发模式访问
//等待信号优先级,只有在使能突发访问模式才有效
FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity =
FSMC_WaitSignalPolarity_Low;
//关闭Wrapped
burst access mode,只有在使能突发访问模式才有效
FSMC_NORSRAMInitStructure.FSMC_WrapMode =
FSMC_WrapMode_Disable;
//等待信号设置,只有在使能突发访问模式才有效
FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive =
FSMC_WaitSignalActive_BeforeWaitState;
FSMC_NORSRAMInitStructure.FSMC_WriteOperation =
FSMC_WriteOperation_Enable;
//使能这个BANK的写操作
//使能/关闭等待信息设置,只在使能突发访问模式才有效
FSMC_NORSRAMInitStructure.FSMC_WaitSignal =
FSMC_WaitSignal_Disable;
FSMC_NORSRAMInitStructure.FSMC_ExtendedMode =
FSMC_ExtendedMode_Disable; //关闭Extend
Mode
FSMC_NORSRAMInitStructure.FSMC_WriteBurst =
FSMC_WriteBurst_Disable;
//关闭Write
Burst Mode
FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct =
&p;
//读操作时序参数
FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct =
&p;
//写操作时序参数
加载中,请稍候......