STM32篇 SPI时序驱动W25Q64

在STM32上使用SPI时序驱动W25Q64 Flash存储器是一种常见的应用,以下是一篇关于STM32通过硬件SPI实现W25Q64读取的详细教程,包括初始化配置、读写操作以及相关代码,篇幅大约2000字。

STM32 SPI时序驱动W25Q64 Flash存储器

1. 简介

W25Q64是一款由华邦电子生产的串行Flash存储器,具有8M位的存储容量,广泛应用于嵌入式系统中。STM32作为流行的32位微控制器,通过其硬件SPI功能可以方便地与W25Q64进行通信。

2. W25Q64特性

  • 容量:64Mb (8MB)
  • 组织结构:256字节/页,4KB/扇区,128个扇区
  • 工作电压:2.7V 至 3.6V
  • 接口:标准SPI,双倍数据率SPI,四倍数据率SPI
  • 读写周期:至少100,000次

3. STM32硬件SPI配置

STM32的SPI可以通过以下步骤进行配置:

  • 使能SPI和GPIO时钟
  • 配置SPI的MOSI、MISO、SCK引脚
  • 配置SPI的工作模式(主机或从机)、数据大小、时钟极性和相位
  • 使能SPI外设

4. W25Q64初始化配置[11]

void W25Q64_InitConfig(void) {
    GPIO_InitTypeDef w25q64_GPIO;
    SPI_InitTypeDef w25q64_SPI;

    // 配置SPI GPIO
    w25q64_GPIO.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
    w25q64_GPIO.GPIO_Mode = GPIO_Mode_AF_PP;
    w25q64_GPIO.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &w25q64_GPIO);

    // 配置CS GPIO
    w25q64_GPIO.GPIO_Pin = GPIO_Pin_4;
    w25q64_GPIO.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOA, &w25q64_GPIO);
    W25Q64_CS_H(); // 取消选择状态

    // 配置SPI
    SPI_I2S_DeInit(SPI1);
    SPI_Init(SPI1, &w25q64_SPI);
    SPI_Cmd(SPI1, ENABLE);
}

5. W25Q64基本操作

  • 读取ID:通过发送读取ID指令获取制造商和设备ID。
  • 写使能:在执行写操作前,需要先发送写使能指令。
  • 扇区擦除:可以擦除4KB大小的扇区。
  • 页编程:将数据写入指定页。

6. 读取W25Q64 ID

uint16_t W25Q64_GetID(void) {
    uint16_t id = 0;
    W25Q64_CS_L();
    W25Q64_ReadWriteByte(0x90); // 发送读ID指令
    id = (W25Q64_ReadWriteByte(0xFF) << 8) | W25Q64_ReadWriteByte(0xFF);
    W25Q64_CS_H();
    return id;
}

7. 写数据到W25Q64

void W25Q64_WriteData(uint32_t addr, uint8_t *data, uint32_t size) {
    // 写数据前擦除扇区等操作...
    W25Q64_PageWrite(addr, data, size);
}

8. 读取数据从W25Q64

void W25Q64_ReadData(uint32_t addr, uint8_t *data, uint32_t size) {
    W25Q64_CS_L();
    W25Q64_ReadWriteByte(0x03); // 发送读数据指令
    for (uint32_t i = 0; i < size; ++i) {
        data[i] = W25Q64_ReadWriteByte(0xFF);
    }
    W25Q64_CS_H();
}

9. 实际测试

在实际应用中,可以测试在不同地址写入数据,并从这些地址读取数据以验证操作的正确性。

10. 总结

通过STM32的硬件SPI与W25Q64通信是一种高效且可靠的方式,可以实现数据的非易失性存储。本教程提供了详细的初始化过程、读写操作以及示例代码,方便开发者快速上手。

请注意,以上代码仅为示例,实际应用中可能需要根据具体的硬件连接和需求进行适当的调整。

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

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

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

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

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

点击领取更多详细资料

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

嵌入式杂谈

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

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

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

打赏作者

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

抵扣说明:

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

余额充值