STM32F4 FMC学习

一、区域划分

          FMC灵活的存储控制器。FMC可连接SRAM(异步或同步)、SDRAM、NORFLASH、PC卡、NANDFLASH.支持突发模式,可编程时钟,8位、16位、32位宽的数据总线。FMC有6个存储区域,每个区域支持256MB的寻址空间。

          第一个区域用于NORFLASH、PSRAM、SRAM,包括4个子区域,每个子区域有各自的片选信号,可连接4个器件。

          区域2和3 用于NAND Flash,每个区域只能连接1个器件。

          区域 4 用于连接PC卡。

          区域5和6 用于SDRAM,每个区域只能连接1个器件。

          每个存储器区域使用的存储类型,可通过配置寄存器配置。

二、 地址映射

        1、NOR/PSRAM 地址映射



  HADDR 是内部总线地址,根据外部的存储器数据位宽的不同,内部总线地址和外部存储器地址的映射关系如上表所示。

         HADDR 的bit26 bit27 用于选择区域一中的子区域。

       

        2、SDRAM的地址映射

     


  ①  HADDR[28]位(内部AHB地址线28)用于选择区域5、6两个SDRAM区域中的1个。

  ②  表252 表示的是13行11列的SDRAM存储器件,不同的数据位宽 HADDR和外部存储器件地址的对应。

          ③   内部存储指的是选择外部存储区域的哪个BANK,最多支持四个BANK。


三、 NOR Flash / PSRAM 控制器

         1、支持的器件访问模式

         异步SRAM和ROM: 8位、16位、32位

 PSRAM: 异步模式、同步访问的突发模式、复用或非复用。

         NOR Flash:异步模式、同步访问的突发模式。

         每个子区域都有唯一的片选信号NE[4:1] ,地址线、数据线、控制信号共用。

         2、可编程时钟

              等待周期可编程(最多15个时钟周期)、总线周转周期可编程(最多15个时钟周期)、输出使能和写入使能延迟可编程(最多15个时钟周期)、独立的读和写时序和协议(可用在读写控制时序不一样的器件 LCD)、可编程的连续时钟输出。

        3、NOR Flash/PSRAM控制器异步事务

              所有的控制器输出信号在时钟的上升沿变化。

           1、异步静态存储器(NOR Flash   PSRAM  SRAM)

               ①  信号通过内部时钟HCLK进行同步,此时钟不会发送到外部存储器。

               ②  如果使能扩展模式,最多提供四种扩展模式(A B C D),可以混合使用A B C D模式来进行读取和写入操     作,可以混合使用不同模式。

               ③   如果禁用扩展模式,则FMC在模式1或模式2下运行。选择SRAM/PSRAM存储器时,模式1是默认模       式,当选择NOR存储器时,模式2为默认模式。

                 模式1:读取信号线数据发送期间保持低电平

                 模式A:读取信号线数据发送期间有高低电平的切换,读取和写入的时序可以独立。

        四、NAND Flash/ PC 卡控制器

             支持的设备类型:8位和16位的NAND,16位PC卡兼容设备

        五、 SDRAM控制器

             1、控制器特性

                  两个SDRAM区域可独立配置,8位、16位、32位的数据宽度,13位行地址11位列地址、支持有4个bank的存储设备,支持字、半字、字节访问,SDRAM时钟可以是HCLK的2或3分频,支持自动刷新可编程刷新频率

                   

             

              


### STM32F4 FMC 配置方法 对于STM32F4系列微控制器而言,配置灵活存储器控制器(Flexible Memory Controller, FMC)涉及多个方面。为了使能并正确设置相应的memory bank,通常需要调整几个重要的寄存器,比如`FSMC_PCRx`, `FSMC_PMEMx`以及某些情况下还需要设定`FSMC_PATTx`[^1]。 #### 使用标准外设库进行初始化 当采用STM32F4的标准外围设备驱动程序(Standard Peripheral Driver),可以利用预定义的功能函数轻松完成必要的硬件参数设定。该套件内含详尽的例子和文档指导使用者理解各个组件的操作方式[^2]。 下面是一个简单的例子展示如何通过编程接口来启动FMC模块: ```c // 初始化结构体用于保存NOR/SRAM控制寄存器值 static FSMC_NORSRAM_InitTypeDef FSMC_NORSRAMInitStructure; static FSMC_NORSRAM_TimingInitTypeDef Timing; void NOR_SRAM_Config(void){ /* Enable FSMC clock */ RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE); // 设置定时参数... // 对应Bank的初始化... } ``` 这段代码片段展示了启用FMC时钟的方法,并创建了一个名为`NOR_SRAM_Config()` 的自定义函数来进行具体的内存银行配置工作。实际应用中还需进一步完善其中的具体细节如时间参数等。 #### 利用STM32CubeMX工具简化流程 除了手动编写代码之外,还可以借助图形化界面工具STM32CubeMX来进行更直观便捷的配置操作。在这个环境中,“Configuration”标签页下的FMC板块允许用户直接指定所需的支持特性,从而大大减少了繁琐的手动编码量[^3]。 例如,在此界面上可以选择要连接到哪个特定类型的外部存储器件(如SRAM、PSRAM或SDRAM),并且自动填充大部分默认推荐值给相关联的内部寄存器。 ### 示例代码:基于STM32Cube HAL 库的 SDRAM 初始化 考虑到现代开发实践中越来越多的人倾向于使用更高层次抽象级别的HAL (Hardware Abstraction Layer)库而非传统的低级APIs,这里给出一段基于STM32Cube HAL库实现SDRAM初始化的示范代码: ```c #include "stm32f4xx_hal.h" /* 定义SDRAM句柄 */ extern FMC_SDRAM_HandleTypeDef hm_sdram1; /** * @brief Initializes the SDRAM device. */ static void MX_FMC_SD RAM_Init(void) { FMC_SDRAM_TimingTypeDefTiming= {0}; /** Perform the SDRAM1 memory initialization sequence*/ hm_sdram1.Instance = FMC_SDRAM_DEVICE; // ...其他必要配置项 if(HAL_SDRAM_Init(&hm_sdram1,&SdramTiming)!= HAL_OK) { Error_Handler(); } } int main(void) { // ... MX_FMC_SDRAM_Init(); // 调用上述定义好的初始化函数 // ... } ``` 以上就是针对STM32F4系列处理器上FMC功能的一些基本介绍及其典型的应用场景实例。希望这些建议可以帮助读者更好地理解和运用这一强大而复杂的资源管理机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值