为了实现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视而不见
代码获取、问题探讨及文章转载可私信。
☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。
🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇