STM32H7B0的OSPI配置QSPI模式(HAL库)

之前使用的芯片一直是H750,功能强大接口很多,但是有发热厉害的问题,相比之下H7B0最高主频没有H750的高,但是发热不严重
(H750最高480Mhz,H7B0是280Mhz)
最近需要把flash读写的代码移植到H7B0,踩了不少坑,这两款芯片大部分地方都一致,代码可以直接继承,但是H750有两路QSPI,而H7B0是两路OSPI,OSPI作为8路信号线的SPI,可以兼容4线的QSPI,所以也是可以移植的

官方资料

首先推荐两几个官方手册:
H7B0的参考手册
OSPI的介绍和例程手册
QSPI的介绍和例程手册

### STM32H7 配置和使用 OSPI/QPI/QSPI 进行内存映射 #### 1. 初始化设置 为了使能并初始化外部存储器接口,在STM32 HAL中有专门针对QSPI/OSPI的操作函数。首先需要通过`MX_QUADSPI_Init()`来完成基本的硬件资源分配以及参数设定工作,这一步骤会依据具体的设备需求调整通信频率、数据宽度等属性[^1]。 ```c // 在stm32h7xx_hal_conf.h中定义QUADSPI时钟源及分频因子 #define QUADSPI_CLK_ENABLE() __HAL_RCC_QSPI_CLK_ENABLE() #define QUADSPI_FORCE_RESET() __HAL_RCC_QSPI_FORCE_RESET() #define QUADSPI_RELEASE_RESET() __HAL_RCC_QSPI_RELEASE_RESET() // 调用该函数实现对外部Flash的基本配置 void MX_QUADSPI_Init(void){ hqspi.Instance = QUADSPI; hqspi.Init.ClockPrescaler = 1; // 设置预分频值 hqspi.Init.FifoThreshold = 4; // FIFO阈值 ... } ``` #### 2. 发送命令序列 对于不同的操作(如擦除扇区、编程页面),都需要发送特定格式的命令给目标器件。这些命令可以通过调用`HAL_QSPI_Command()`方法构建,并指定相应的指令码、地址长度和其他必要选项。 ```c static uint8_t QSPI_WriteEnable(QSPI_HandleTypeDef *hqspi){ QSPI_CommandTypeDef sCommand; /* 填充写入使能命令 */ sCommand.InstructionMode = QSPI_INSTRUCTION_1_LINE; sCommand.AddressSize = QSPI_ADDRESS_NONE; ... if (HAL_QSPI_SendCommand(hqspi, &sCommand, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK){ return ERROR; } return SUCCESS; } ``` #### 3. 执行内存映射 当完成了上述准备工作之后,就可以利用间接模式下的读取功能来进行大容量的数据传输;而对于更高效的访问方式,则可以选择开启内存映射特性。此时只需将所需访问区域映射到系统的地址空间内即可直接对其进行读写操作。 ```c /* 开启内存映射 */ if(HAL_QSPI_MemoryMapped(&hqspi, &sMemMapCfg)!= HAL_OK){ Error_Handler(); } /* 使用指针指向已映射的空间进行快速存取 */ volatile uint32_t* pMemoryMappedAddress = (uint32_t*)MMAP_ADDR_BASE; *pMemoryMappedAddress = data_to_write; data_read_from_memory_mapped_space = *pMemoryMappedAddress; ``` 需要注意的是,由于不同品牌的QSPI Flash可能拥有各自独特的命令集和支持的功能集合,因此建议开发者仔细阅读所选用的具体型号的手册文档以获取最准确的信息[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值