STM32驱动W25Q64读写数据

article/2025/8/22 1:36:33

STM32驱动W25Q64读写数据

  • 一.基本参数
  • 二.通信协议
    • 1、时序:
    • 2、代码:
  • 三.引脚定义与接线
    • 1、引脚定义
    • 2、对应接线
  • 四.主要代码
  • 五.操作步骤与现象
  • 六.总结

一.基本参数

1.采用串行Nor flash外扩存储芯片
2.支持SPI接口
3.工作电压:2.7~3.6V
4.容量: 32Mbit(W25Q32)
64Mbit(W25Q64)
128Mbit(W25Q128)

二.通信协议

1、时序:

在这里插入图片描述

2、代码:

此处使用硬件SPI

/*** @brief  SPI_FLASH初始化* @param  无* @retval 无*/
void SPI_FLASH_Init(void)
{SPI_InitTypeDef  SPI_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;/* 使能SPI时钟 */FLASH_SPI_APBxClock_FUN ( FLASH_SPI_CLK, ENABLE );/* 使能SPI引脚相关的时钟 */FLASH_SPI_CS_APBxClock_FUN ( FLASH_SPI_CS_CLK|FLASH_SPI_SCK_CLK|FLASH_SPI_MISO_PIN|FLASH_SPI_MOSI_PIN, ENABLE );/* 配置SPI的 CS引脚,普通IO即可 */GPIO_InitStructure.GPIO_Pin = FLASH_SPI_CS_PIN;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(FLASH_SPI_CS_PORT, &GPIO_InitStructure);/* 配置SPI的 SCK引脚*/GPIO_InitStructure.GPIO_Pin = FLASH_SPI_SCK_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(FLASH_SPI_SCK_PORT, &GPIO_InitStructure);/* 配置SPI的 MISO引脚*/GPIO_InitStructure.GPIO_Pin = FLASH_SPI_MISO_PIN;GPIO_Init(FLASH_SPI_MISO_PORT, &GPIO_InitStructure);/* 配置SPI的 MOSI引脚*/GPIO_InitStructure.GPIO_Pin = FLASH_SPI_MOSI_PIN;GPIO_Init(FLASH_SPI_MOSI_PORT, &GPIO_InitStructure);/* 停止信号 FLASH: CS引脚高电平*/SPI_FLASH_CS_HIGH();/* SPI 模式配置 */// FLASH芯片 支持SPI模式0及模式3,据此设置CPOL CPHASPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;SPI_InitStructure.SPI_Mode = SPI_Mode_Master;SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;SPI_InitStructure.SPI_CRCPolynomial = 7;SPI_Init(FLASH_SPIx , &SPI_InitStructure);/* 使能 SPI  */SPI_Cmd(FLASH_SPIx , ENABLE);}

三.引脚定义与接线

1、引脚定义

引脚功能
CS(NSS)片选,低电平有效
SCK时钟信号引脚
MISO/DO模块数据输出引脚
MOSI/DI模块数据输入引脚

2、对应接线

W25Q64模块STM32F103C8T6
VCC3.3V
SPI_CSGPIOA_4
SPI_SCKGPIOA_5
SPI_MISO/DOGPIOA_6
SPI_MOSI/DIGPIOA_7

四.主要代码

/** 函数名:main* 描述  :主函数* 输入  :无* 输出  :无*/
int main(void)
{ 	uint16_t i;LED_GPIO_Config();LED_BLUE;/* 配置串口为:115200 8-N-1 */USART_Config();printf("\r\n 这是一个64Mbit串行flash(W25Q64)实验 \r\n");/* 8M串行flash W25Q64初始化 */SPI_FLASH_Init();/* 获取 Flash Device ID */DeviceID = SPI_FLASH_ReadDeviceID();	Delay( 200 );/* 获取 SPI Flash ID */FlashID = SPI_FLASH_ReadID();	printf("\r\n FlashID is 0x%X,\Manufacturer Device ID is 0x%X\r\n", FlashID, DeviceID);/* 检验 SPI Flash ID */if (FlashID == sFLASH_ID){	printf("\r\n 检测到串行flash W25Q64 !\r\n");/* 擦除将要写入的 SPI FLASH 扇区,FLASH写入前要先擦除 */// 这里擦除4K,即一个扇区,擦除的最小单位是扇区SPI_FLASH_SectorErase(FLASH_SectorToErase);	 	 /* 将发送缓冲区的数据写到flash中 */// 这里写一页,一页的大小为256个字节/*写入数据到buff中*/for(i=0;i<100;i++){Tx_Buffer[i] = i;}SPI_FLASH_BufferWrite(Tx_Buffer, FLASH_WriteAddress, BufferSize);printf("\r\n写入的数据为:\r\n");for(i=0;i<BufferSize;i++){if((i%10)==0){printf("\r\n");}printf("%x ", Tx_Buffer[i]);}/* 将刚刚写入的数据读出来放到接收缓冲区中 */SPI_FLASH_BufferRead(Rx_Buffer, FLASH_ReadAddress, BufferSize);printf("\r\n读出的数据为:\r\n");for(i=0;i<BufferSize;i++){if((i%10)==0){printf("\r\n");}printf("%x ", Rx_Buffer[i]);}/* 检查写入的数据与读出的数据是否相等 */TransferStatus1 = Buffercmp(Tx_Buffer, Rx_Buffer, BufferSize);if( PASSED == TransferStatus1 ){ LED_GREEN;printf("\r\n 64Mbit串行flash(W25Q64)测试成功!\n\r");}else{        LED_RED;printf("\r\n 64Mbit串行flash(W25Q64)测试失败!\n\r");}}// if (FlashID == sFLASH_ID)else// if (FlashID == sFLASH_ID){ LED_RED;printf("\r\n 获取不到 W25Q64 ID!\n\r");}while(1);  
}

五.操作步骤与现象

下载程序后打开串口助手,选择对应端口,波特率选115200 打开串口 最后按下开发板复位按键就会有如下输出:
在这里插入图片描述

六.总结

1、供电切勿超过3.6V,建议3.3V供电
2、注意写入读出的数据量大小一致,否者读出可能乱码
需要完整工程的可下方留言邮箱获取


http://chatgpt.dhexx.cn/article/E4HSIaSS.shtml

相关文章

学习日记——W25Q64 FLASH—QSPI

W25Q64串行FLASH基础知识 大小&#xff1a;8M&#xff08;Byte&#xff09;&#xff08;128块&#xff08;Block&#xff09;&#xff0c;每块64K字节&#xff0c;每块16个扇区&#xff08;Sector&#xff09;&#xff0c;每个扇区4K字 节&#xff0c;每个扇区16页&#xff0c…

(STM32)W25Q64存储模块

1bit表示一个二进制位&#xff0c;1Byte表示8个二进制位。 每一个字节需要一个地址&#xff0c;所以24位地址&#xff0c;2^24次方最大寻址范围是16M。 W25Q256是特殊型号&#xff0c;切换4字节寻址模式才能使用后面的16M空间。 HOLD&#xff1a;芯片正常读写数据时&#xff…

SPIW25Q64(精华版)

1. SPI总线 1.1 W25Q64 1.1 W25Q64简介 W25Q64 是一种具有SPI接口的FlASH存储器&#xff0c;具有32768个可编程页(Page256B)&#xff0c;2048个可擦除扇区(Sector16*Page)&#xff0c;128个可擦除块(Block16*Sector)&#xff0c;容量为128*16*16*256B8MB(64bit)&#xff0c;…

W25Q64简介(译)

W25Q64是华邦公司推出的大容量SPI FLASH产品&#xff0c;其容量为64Mb。该25Q系列的器件在灵活性和性能方面远远超过普通的串行闪存器件。W25Q64将8M字节的容量分为128个块&#xff0c;每个块大小为64K字节&#xff0c;每个块又分为16个扇区&#xff0c;每个扇区4K个字节。W25Q…

W25Q64Flash芯片

W25Q64Flash芯片STM32操作 通讯方式&#xff1a;SPI通讯 大小&#xff1a;64是bit 换算字节是8M&#xff08;Byte&#xff09;&#xff08;128块&#xff08;Block&#xff09;&#xff0c;每块16个扇区&#xff08;Sector&#xff09;&#xff0c;每个扇区4K字节&#xff08;…

SPI通讯介绍 以及读写W25Q64(块,扇区,页的区别)

附工程百度网盘链接 链接&#xff1a;https://pan.baidu.com/s/1nCgNb5OyGpABAL657-gX0A?pwd6666 提取码&#xff1a;6666 介绍:摩托罗拉开发的一种通用数据总线, 四根通讯线SCK(串行时钟总线),MOSI(主机输出从机输入),MISO(主机输入从机输出),SS(从机选择)而且是同步全双…

W25Q64调试

简介 W25Q系列的器件在灵活性和性能方面远远超过普通的串行闪存器件。W25Q64将8M字节的容量分为128个块&#xff0c;每个块大小为64K字节&#xff0c;每个块又分为16个扇区&#xff0c;每个扇区4K个字节。 引脚介绍 串行数据输入、输出和 IOs&#xff08;DI、DO 和 IO0、IO1、…

软件SPI读写W25Q64硬件SPI读写W25Q64

目录 软件SPI读写W25Q64 MySPI W25Q64 主函数 硬件SPI读写W25Q64 软件SPI读写W25Q64 程序整体框架&#xff1a; SPI模块包含通信引脚封装&#xff0c;初始化&#xff0c;SPI三个基本时序单元&#xff08;起始&#xff0c;终止&#xff0c;交换一个字节&#xff09; W2…

W25Q64Flash芯片STM32操作

1、W25Q64Flash芯片介绍 通讯方式&#xff1a;SPI通讯 大小&#xff1a;8M&#xff08;Byte&#xff09; &#xff08;128块&#xff08;Block&#xff09;&#xff0c;每块64K字节&#xff0c;每块16个扇区&#xff08;Sector&#xff09;&#xff0c;每个扇区4K字节&…

STM32学习笔记(十一)丨SPI通信(W25Q64芯片简介,使用SPI读写W25Q64存储器芯片)

本篇文章包含的内容 一、SPI的通信协议及其原理1.1 SPI简介1.2 SPI通信的硬件连接1.3 SPI的时序基本单元1.3.1 起始条件和终止条件1.3.2 交换字节&#xff08;模式0&#xff0c;先移入&#xff0c;再移出&#xff09;1.3.3 交换字节&#xff08;模式1&#xff0c;先移出&#x…

看单片机原理图-外部FLASHW25Q64

系列文章目录 看单片机原理图-最小系统 看单片机原理图-最小系统电源电路 看单片机原理图-输入输出电路LED指示、按键输入 看单片机原理图-红外遥控、EEPROM 看单片机原理图-FLASH 文章目录 系列文章目录前言一、FLASH 前言 硬件&#xff1a;百问网100ASK_STM32F103_MINI开发…

W25Q64 Flash芯片原理与应用方案(含W25Q64中文数据手册)

W25Q64是华邦公司推出的大容量SPI FLASH产品&#xff0c;其容量为64Mb&#xff08;8MB&#xff09;&#xff0c;应用较为广泛。 W25Q系列的器件在灵活性和性能方面远远超过普通的串行闪存器件。W25Q64将8M字节的容量分为128个块&#xff0c;每个块大小为64K字节&#xff0c;每个…

cortex_m3_stm32嵌入式学习笔记(二十一):SPI实验(通信总线)

SPI 是英语 Serial Peripheral interface 的缩写&#xff0c;顾名思义就是串行外围设备接口。是 Motorola首先在其 MC68HCXX 系列处理器上定义的。 SPI 接口主要应用在 EEPROM&#xff0c; FLASH&#xff0c;实时时钟&#xff0c; AD 转换器&#xff0c;还有数字信号处理器和数…

STM-32:SPI通信协议/W25Q64简介—软件SPI读写W25Q64

目录 一、SPI简介1.1电路模式1.2通信原理1.3SPI时序基本单元1.3.1起始和终止1.3.2交换字节 二、W25Q642.1W25Q64简介2.2W25Q64硬件电路2.3W25Q64框图2.4Flash操作注意事项 三、软件SPI读写W25Q643.1接线图3.2程序代码 一、SPI简介 SPI是串行外设接口&#xff08;Serial Periph…

STM32CubeMx之硬件SPI驱动W25Q64

STM32CubeMx之硬件SPI驱动W25Q64 1.SPI简介 SPI是串行外设接口&#xff08;Serial Peripheral Interface&#xff09;的缩写&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且在芯片的管脚上只占用四根线&#xff0c;节约了芯片的管脚&a…

SPI读写串行FLASH(W25Q64)

文章目录 1、SPI协议1、硬件连接2、通讯时序3、不同的通信模式 2、W25Q64介绍3、SPI读写驱动编写4、源码 1、SPI协议 SPI 协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface)&#xff0c;即串行外围设备接口&#xff0c;是一种高速全双工的通信总线。它被广泛地…

STM32入门开发: 介绍SPI总线、读写W25Q64(FLASH)(硬件+模拟时序)

一、环境介绍 编程软件: keil5 操作系统: win10 MCU型号: STM32F103ZET6 STM32编程方式: 寄存器开发 (方便程序移植到其他单片机) SPI总线: STM32本身支持SPI硬件时序&#xff0c;本文示例代码里同时采用模拟时序和硬件时序两种方式读写W25Q64。 模拟时序更加方便移植到…

树莓派系统介绍

树莓派是一个微型计算机&#xff0c;和普通的电脑没有什么区别&#xff0c;只是体积更小&#xff0c;只有卡片大小&#xff0c;存储能力和计算能力会差一点&#xff0c;主要用于学习&#xff0c;实验所用。 是电脑就要安装操作系统&#xff0c;树莓派官方推荐了两种系统&#…

树莓派 zero linux,树莓派 zero基本调试

回家之前就从网上购买了一堆设备&#xff0c;回去也不能闲着&#xff0c;可以利用家里相对齐全的准备安装调试。结果人还没回来&#xff0c;东西先到了。 购买的核心装备是树莓派zero w&#xff0c;虽然已经知道它比家族大哥树莓派小不少&#xff0c;但拿到手里还是惊奇它的小巧…

树莓派c语言访问mariadb,树莓派之MariaDB

8种机械键盘轴体对比 本人程序员&#xff0c;要买一个写代码的键盘&#xff0c;请问红轴和茶轴怎么选&#xff1f; 安装MariaDB MariaDB是MySQL的一个分支 直接命令行敲入&#xff1a;1sudo apt-get install mariadb-server 即可完成安装。 一开始安装完成后不知道是需要初始化…