STM32 FMC/FSMC接口与外部NOR Flash存储器的交互研究

为了实现STM32的FMC/FSMC接口与外部NOR Flash存储器的交互,我们需要了解NOR Flash存储器的特点、FMC/FSMC接口的配置和相关操作代码。下面我将介绍NOR Flash存储器的特点、FMC/FSMC接口的配置步骤以及相关的交互操作,并给出相应的示例代码。

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进

❤欢迎关注我的知乎:对error视而不见

代码获取、问题探讨及文章转载可私信。

 ☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇

点击领取更多详细资料

1. NOR Flash存储器

NOR Flash存储器是一种非易失性存储器,具有快速的随机访问速度和较长的擦除寿命。它通常用于存储程序代码和只读数据,具有较快的读取速度和较低的功耗。

2. FMC/FSMC接口的配置

通过配置FMC/FSMC接口,可以实现STM32与外部NOR Flash存储器的交互。以下是FMC/FSMC接口配置的关键步骤:

- 配置引脚:设置STM32的引脚,以与外部NOR Flash存储器进行连接。
- 配置时序:根据NOR Flash存储器规格书中的要求,配置FMC/FSMC的读写时序参数。
- 初始化FMC/FSMC:使用HAL库或CubeMX工具初始化FMC/FSMC接口。

3. 交互操作

一般的交互操作包括从NOR Flash存储器读取数据、向NOR Flash存储器写入数据以及擦除操作。以下是一个使用STM32Cube HAL库的示例代码,展示了如何配置FMC/FSMC接口并与外部NOR Flash存储器进行交互:

```c
#include "stm32f4xx_hal.h"

FMC_NORSRAM_TimingTypeDef NOR_Timing;

void FMC_Init() {
  FMC_NORSRAM_HandleTypeDef hnorsram;

  // 使能FMC时钟
  __HAL_RCC_FMC_CLK_ENABLE();

  // 配置FMC NORSRAM设备参数
  hnorsram.Init.NSBank = FMC_NORSRAM_BANK1;
  hnorsram.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE;
  hnorsram.Init.MemoryType = FMC_MEMORY_TYPE_NOR;
  hnorsram.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_16;
  hnorsram.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE;
  hnorsram.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW;
  hnorsram.Init.WrapMode = FMC_WRAP_MODE_DISABLE;
  hnorsram.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS;
  hnorsram.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE;
  hnorsram.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE;
  hnorsram.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE;
  hnorsram.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE;
  hnorsram.Init.WriteBurst = FMC_WRITE_BURST_DISABLE;

  // 初始化FMC
  HAL_NOR_Init(&hnorsram, &NOR_Timing, &NOR_Timing);
}

void NOR_Read(uint32_t addr, uint16_t *data, uint32_t size) {
  // 从NOR Flash存储器读取数据
  HAL_NOR_ReadBuffer(&hnorsram, addr, data, size);
}

void NOR_Write(uint32_t addr, uint16_t *data, uint32_t size) {
  // 向NOR Flash存储器写入数据
  HAL_NOR_Program(&hnorsram, addr, data, size);
}

void NOR_Erase(uint32_t addr) {
  // 擦除NOR Flash存储器的扇区
  HAL_NOR_Erase_Block(&hnorsram, addr, NOR_DEVICE_ADDRESS );
}
```

在以上示例代码中,我们首先通过配置FMC/FSMC接口的参数来初始化NOR Flash存储器。然后,通过`NOR_Read`函数和`NOR_Write`函数分别实现从NOR Flash存储器读取数据和向NOR Flash存储器写入数据的操作。此外,还提供了`NOR_Erase`函数用于擦除NOR Flash存储器的操作。

通过以上配置和操作,我们可以实现STM32的FMC/FSMC接口与外部NOR Flash存储器的交互,实现数据的读取、写入和擦除操作。

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进

❤欢迎关注我的知乎:对error视而不见

代码获取、问题探讨及文章转载可私信。

 ☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇

点击领取更多详细资料

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式杂谈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值