加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

STM32的FSMC学习手记(一)

(2014-07-16 16:53:32)
标签:

it

stm32

fsmc

分类: 单片机

                                                    FSMC应用简介

FSMC全称“静态存储器控制器”,STM32可以通过FSMCSRAMROMPSRAMNor FlashNandFlash存储器的引脚相连,从而进行数据的交换。

一、FSMC的特点:

1、  FSMC的一大特点是支持不同位宽的异步读写操作。

2、  FSMC的映射地址空间中,不同的BANK是独立的,可用于扩展不同类型的存储器。当FSMC同时使用多个外部存储器时,FSMC会通过总线悬空延时时间参数,来防止访问冲突发生。

3、  支持代码从FSMC扩展的外部存储器中直接运行。不需要首先调入内部SRAM

二、FSMC的结构组成:

         如图所示,FSMC主要分为四部分:

1、  FSMC一端连接着AHB高速总线,与Cortex-M3内核相连接。

2、  FSMC内部实际上包括Nor FlashNand/PC Card两个控制器,支持两种不同的存储方式。

3、  外部设备接口。

4、  配置寄存器,用于选择FSMC的功能。http://s9/mw690/002YFTLJgy6KvUch2UUc8&690

 

三、FSMC的映射空间

FSMC管理1GB的映射地址空间。可以划分为4256MBANK,每个BANK又划分为464M的子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引脚初始化后,要配置可编程存储器的参数,包括时序,是否支持非对齐访问和等待周期管理(只针对突发模式访问PSRAMNOR闪存

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 BANKFSMC工作模式的初始化等。

 

       FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM3;                  //使用了FSMCBANK1的子板块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;                   //写操作时序参数

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有