STM32CubeMx之QSPI配置详解


先看一下最终结果:

在这里插入图片描述这里采用一个按键按下写入W25Q另一个按键按下读出写入的数据。


前言

本章主要介绍一下采用Stm32CubeMx配置W25Q256,以及读写W25Q256


本章例程Gitee链接: 点击传送


一、CubeMx配置W25Q256参数详解

在这里插入图片描述
在这里插入图片描述

① Clock Prescaler :时钟分频因子。前面配置的QSPI时钟为240M,这个240M就会除以分频因子最终输出到CLK时钟引脚。这里设置成1,输出到FLASH的时钟为240M。

② Fifo Threshold :FIFO阈值。这个应该是配合DAM用的。这里配置成4即可

③Sample Shifting :选择这个会在时钟沿的后半周期才采集数据,一般建议选上。

④Flash Size :FLASH大小。FLASH容量的字节数 = 2 的(FlashSize + 1)次方。比如我的FLASH是32M大小的,这里应该配置成24。2^25➗1024➗1024=32M Byte.

⑤Chip Select High Time :片选高电平时间,这里理解为tWHSL.即在开始写前需要的保护时间。查手册是20ns。配置的flash时钟为240Mhz≈4.17ns。20ns/4.17ns≈4.8 所以最少需要5个Cycle。

在这里插入图片描述
在这里插入图片描述

二、读写W25Q256

这里就不贴出代码了,具体可以看上面Gitee的源码工程。
另外,Git的使用是相当重要的。如果还不会的可以阅读本人的另一篇文章关于入门Git使用的。一般照着文章做研究几个小时就可以满足项目需求了。

链接: Git使用实例:十分钟从0到熟练使用,包看包会!

三、调试可能遇到的问题

C2调试过程中遇到的问题:🤷‍♂️🤷‍♀️

1、W25Q256初始化失败

原因:cubemx配置QSPI引脚时没有设置引脚默认上下拉状态以及引脚速度等级

解决方法:所有引脚设置为very high,SCK和CS默认设置为上拉,其他设置为默认即可,如下图:

在这里插入图片描述


总结

谢谢大家的关注和支持!!!有啥问题可以联系本人的QQ:1458356834。

### 使用 STM32CubeMX 配置 QSPI 的教程 #### 1. 创建新项目并选择目标微控制器 启动 STM32CubeMX 并创建一个新的工程文件。在弹出的选择窗口中输入项目的名称和路径,点击下一步。从列表中挑选合适的 MCU 型号,例如 STM32F769NIHx。 #### 2. 设置时钟树与时钟频率 进入 "Clock Configuration" 页面调整系统核心以及外设所需的时钟速度。对于大多数应用来说,默认设置通常已经足够;如果有特殊需求,则可以根据实际情况做相应更改[^1]。 #### 3. 启用 QSPI 外设功能 转到 “Pinout & Configuration” 标签页,在左侧栏找到并展开“Connectivity”,勾选其中的“QUADSPI”。这一步骤会自动分配必要的引脚给 QUADSPI 接口,并初始化该模块的相关参数。 #### 4. 修改高级参数 (Advanced Parameters) 双击打开已启用的 QSPI 设备配置项,切换至“Parameters Settings”选项卡下可以自定义更多细节属性,比如 Flash Size、Sample Shift 等等。这些设定取决于所使用的闪存器件规格说明文档中的指导建议[^2]。 #### 5. 添加中间件组件 前往 Middleware 分区寻找 MX_QUADSPI 条目下的各个子类库,依据个人喜好决定是否加入它们来简化编程工作量或是增强某些特性支持。特别是当涉及到特定品牌型号的记忆体芯片(如本案例里的 W25Qxx 系列),往往会有对应的驱动程序包可供选用。 #### 6. 生成初始化代码框架 完成上述所有定制化之后回到主界面顶部菜单栏执行 Project -> Generate Code 动作,软件将会基于当前环境构建一套完整的 C/C++ 工程结构供开发者进一步完善业务逻辑实现部分。此时应该能看到包含了 qspi.c/.h 文件在内的多个源码单元被添加进来作为底层操作的基础构件[^3]。 ```c // 示例:初始化QSPI接口后的简单读取命令发送过程 HAL_StatusTypeDef status; uint8_t cmd[] = { /* 指令字节 */ CMD_READ_ID, /* 地址字段(如果适用)*/ }; status = HAL_QSPI_Command(&hqspi, &sCommand, HAL_QPSI_TIMEOUT_DEFAULT_VALUE); if(status != HAL_OK){ // 错误处理... } /* 数据接收缓冲区准备 */ uint8_t rxData[READ_BUFFER_SIZE]; memset(rxData, 0xFF, READ_BUFFER_SIZE); /* 执行实际的数据传输动作 */ status = HAL_QSPI_Receive(&hqspi, rxData, HAL_QPSI_TIMEOUT_DEFAULT_VALUE); if(status != HAL_OK){ // 错误处理... } ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

YZW0123

谢谢大家的支持,请关注我哦!!

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

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

打赏作者

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

抵扣说明:

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

余额充值