详细解读STM32 FSMC

一、FSMC简介

外部存储器接口(FSMC)是STM32系列芯片中的一部分,提供了对外部存储器的控制。这些存储器可以是 SRAM、 NOR Flash 或NAND Flash 等设备。FSMC 具有16位总线宽度,支持异步访问和同步访问。

二、FSMC的重要性

由于内部闪存空间有限,无法满足大型应用程序或数据存储的需求,因此外部存储器是必不可少的。FSMC 可以直接访问外部存储器,而不需要使用微控制器来管理存储器。这大大提高了访问速度和效率。FSMC具有一些额外的特征,可以使我们的设计实现高速读取操作。

三、FSMC的使用方法

FSMC 能够接口各种类型的存储器,包括常用的 SRAM、 NOR Flash、 NAND Flash 和 PSEUDO SRAM。下面都会使用常用的 NOR Flash 来举例说明。

  FSMC_NOR_InitTypeDef NOR_InitStructure;

  /* NOR device configuration */
  NOR_InitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
  NOR_InitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
  NOR_InitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;
  NOR_InitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
  NOR_InitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
  NOR_InitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
  NOR_InitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
  NOR_InitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
  NOR_InitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
  NOR_InitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
  NOR_InitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
  NOR_InitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
  NOR_InitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
  NOR_InitStructure.FSMC_ReadWriteTimingStruct = &Timing;
  NOR_InitStructure.FSMC_WriteTimingStruct = &Timing;
  FSMC_NOR_Init(&NOR_InitStructure);

上述代码中,FSMC_NOR_InitTypeDef 是一个结构体,其中包含了许多与 NOR Flash 相关的参数。相应参数的作用注释在代码中已经给出,我们可以根据实际情况设置这些参数。

四、FSMC的读写操作

我们可以使用 FSMC 的数据读写命令对 NOR Flash 进行数据读写操作,以下是 NOR Flash 读操作的代码实现。

#define NOR_FLASH_START_ADDR  ((uint32_t)0x64000000)
#define NOR_FLASH_END_ADDR    ((uint32_t)0x640FFFFF)
#define NOR_FLASH_SIZE        ((uint32_t)0x00100000)

#define BUFFER_SIZE           ((uint32_t)0x400)

uint16_t *pNOR_Address = (uint16_t *)NOR_FLASH_START_ADDR;

/* Read a half-word from the NOR memory */
uint16_t NOR_ReadHalfWord(uint32_t uwStartAddress)
{
  return (*(__IO uint16_t *)uwStartAddress);
}

以上代码中,我们首先定义了 NOR Flash 存储器的地址范围,并用它们来声明一个指针。然后,我们定义了一个 NOR_ReadHalfWord 函数来执行实际的读取操作。该函数接收一个地址参数,该参数指定要读取的数据的存储器地址。函数返回 NOR 存储器中指定地址处的半字。

五、FSMC时序要求

在使用 FSMC 时,需要留意 FSMC 对时序的要求。下面是官方文档中给出的时序描述:

  • 数据脉冲的前沿必须在WP下降沿到来前后5ns内;
  • 数据脉冲的后沿必须在下降沿到来14ns后前后5ns内结束;
  • 数据可以在WAIT信号有效时被保持,WAIT 下降沿前后5ns内必须保持数据不变;
  • 存储器访问时间是相对于A相位的;
  • 随机读取最快速度是60ns

六、FSMC的常见问题

1、FSMC的接口配置错误

这种问题通常是由于没有正确配置 FSMC 导致的。当发生这种问题时,可以使用示波器或逻辑分析器来查看 FSMC 的数据总线、地址总线和控制总线上的信号。如果有某些信号出现问题,则是接口配置错误的明显信号。

2、Flash编程错误

在编写 Flash 编程结束后,一些程序员可能会发现他们的代码无法正常工作。如果在同一个位置反复写同一个值,数据值不变,那么问题很可能是编程错误。发生这种情况时,检查代码中的变量类型以及对存储器地址的处理方式。

3、FSMC初始化错误

在初始化 FSMC 时,如果没有正确匹配 NOR Flash 的大小和类型,那么很可能会发生初始化错误,并导致存储器无法正常读写。在初始化 FSMC 时,一定要确保所有参数正确匹配。

4、时序错误

如果时序设置不正确,数据读写操作就会失败。因此,在进行这些操作之前,请仔细阅读数据表以了解 FSMC 的相关参数。

原创文章,作者:ZDGRN,如若转载,请注明出处:https://www.506064.com/n/334168.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ZDGRN的头像ZDGRN
上一篇 2025-02-05 13:05
下一篇 2025-02-05 13:05

相关推荐

  • index.html怎么打开 – 详细解析

    一、index.html怎么打开看 1、如果你已经拥有了index.html文件,那么你可以直接使用任何一个现代浏览器打开index.html文件,比如Google Chrome、…

    编程 2025-04-25
  • Resetful API的详细阐述

    一、Resetful API简介 Resetful(REpresentational State Transfer)是一种基于HTTP协议的Web API设计风格,它是一种轻量级的…

    编程 2025-04-25
  • AXI DMA的详细阐述

    一、AXI DMA概述 AXI DMA是指Advanced eXtensible Interface Direct Memory Access,是Xilinx公司提供的基于AMBA…

    编程 2025-04-25
  • 关键路径的详细阐述

    关键路径是项目管理中非常重要的一个概念,它通常指的是项目中最长的一条路径,它决定了整个项目的完成时间。在这篇文章中,我们将从多个方面对关键路径做详细的阐述。 一、概念 关键路径是指…

    编程 2025-04-25
  • neo4j菜鸟教程详细阐述

    一、neo4j介绍 neo4j是一种图形数据库,以实现高效的图操作为设计目标。neo4j使用图形模型来存储数据,数据的表述方式类似于实际世界中的网络。neo4j具有高效的读和写操作…

    编程 2025-04-25
  • c++ explicit的详细阐述

    一、explicit的作用 在C++中,explicit关键字可以在构造函数声明前加上,防止编译器进行自动类型转换,强制要求调用者必须强制类型转换才能调用该函数,避免了将一个参数类…

    编程 2025-04-25
  • HTMLButton属性及其详细阐述

    一、button属性介绍 button属性是HTML5新增的属性,表示指定文本框拥有可供点击的按钮。该属性包括以下几个取值: 按钮文本 提交 重置 其中,type属性表示按钮类型,…

    编程 2025-04-25
  • Vim使用教程详细指南

    一、Vim使用教程 Vim是一个高度可定制的文本编辑器,可以在Linux,Mac和Windows等不同的平台上运行。它具有快速移动,复制,粘贴,查找和替换等强大功能,尤其在面对大型…

    编程 2025-04-25
  • crontab测试的详细阐述

    一、crontab的概念 1、crontab是什么:crontab是linux操作系统中实现定时任务的程序,它能够定时执行与系统预设时间相符的指定任务。 2、crontab的使用场…

    编程 2025-04-25
  • 网站测试工具的详细阐述

    一、测试工具的概述 在软件开发的过程中,测试工具是一个非常重要的环节。测试工具可以快速、有效地检测软件中的缺陷,提高软件的质量和稳定性。与此同时,测试工具还可以提高软件开发的效率,…

    编程 2025-04-25

发表回复

登录后才能评论