STM32驱动W25Q64读写数据
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 |
---|---|
VCC | 3.3V |
SPI_CS | GPIOA_4 |
SPI_SCK | GPIOA_5 |
SPI_MISO/DO | GPIOA_6 |
SPI_MOSI/DI | GPIOA_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、注意写入读出的数据量大小一致,否者读出可能乱码
需要完整工程的可下方留言邮箱获取
STM32驱动W25Q64读写数据相关推荐
- STM32驱动eMMC读写数据
STM32驱动eMMC读写数据 参照 JEDEC eMMC标准:JESD84-B51 (Revision of JESD84-B50.1, July 2014) 驱动芯片采用stm32h7xx芯片.通 ...
- 学习STM32 Flash存储 W25Q64 SPI总线存储模块进行读写数据
今天学习 Flash 存储芯片进行数据写入和读取方法.了解W25Q64 存储芯片的使用.能够用 STM32 单片机对 W25Q64 进行写入数据,擦除数据,读取数据. w25q64 是什么? W25Q ...
- 用c语言做RFID读卡程序,2.STM32读卡号读写数据代码示例3.0(C语言)
文件名大小更新时间 2.STM32读卡号读写数据代码示例3.0(C语言)\HFRFID.uvgui.WEIZAI736912016-07-15 2.STM32读卡号读写数据代码示例3.0(C语言)\H ...
- 基于HAL库STM32串口驱动不定长数据接收
STM32串口驱动不定长数据接收带环形缓冲区 最新框架代码 使用方法 源码 串口接口文件 环形缓冲区接口文件 移植图示 使用涉及4个文件, UART_Port.c UART_Port.h Circul ...
- STM32利用FATFS文件系统给SD卡读写数据
STM32利用FATFS文件系统给SD卡读写数据 注:FATFS文件系统官方网址(内含各种函数具体功能及参数配置): FATFS文件系统官方网址 1. 所需.c和.h文件 FATFS中的文件的作用如下 ...
- 关于STM32驱动DS1302实时时钟的一点思考
关于STM32驱动DS1302实时时钟的一点思考 之前用51驱动过DS1302,没用多久就输出了正确的时间.当时以为这块芯片其实没啥,很简单.但是现在用STM32做项目,用到同样的芯片,以为这有何难, ...
- stm32读取目标芯片_使用stm32驱动RC522读IC卡(代码留言邮箱)
RC522与PN532简介 关于STM32驱动方式 接线说明 程序烧录 查看卡号 总结 RC522与PN532简介 在写这篇文章之前有写过一篇有关于PN532的文章,RC522与PN532在使用上都可 ...
- STM32驱动LCD实战
目录 01 驱动时序 02 FSMC外设配置 03 背光驱动 04 复位驱动 05 寄存器配置 前段时间写了<STM32驱动LCD原理>和<STM32的FSMC外设简介>两篇文 ...
- STM32驱动W5100实现udp通信
STM32驱动W5100实现udp通信 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN7 开发环境:MDK4.72 MCU:STM ...
- CH9121串口转以太网模块STM32驱动
CH9121串口转以太网模块STM32驱动 文章目录 CH9121串口转以太网模块STM32驱动 0. 简介 1. 特性: 2. 应用场合 3. 示例平台 4. 代码 0. 简介 CH9121 集成T ...
最新文章
- SpringMVC基础及应用-李守红
- pku 2031 Building a Space Station 最小生成树+精度控制
- 小程序使用wxParse解析html
- 当我们在聊 Serverless 时你应该知道这些
- java每秒限流_java限流工具类
- C语言学习之打印菱形
- 带你了解zabbix整合ELK收集系统异常日志触发告警~
- SSH隧道技术----端口转发,socket代理
- 乱码 讯飞 语音识别_一段讯飞、百度等语音识别API无法识别的语音最终解决办法...
- 盘点数据治理的6个价值
- Unable to round-trip http request to upstream: EOF
- 如果secureCRT安装时位置改变,EVE-NG如何关联secureCRT
- 微信扫码点餐帮助商家赚钱的方法
- wpa_supplicant配置
- 学生每日计划表_小学生每日学习计划安排表
- 计算机网络 专有名词英文缩写
- 数独的随机终盘生成函数设计
- 云影数码工作室-创业计划书
- 上海大学计算机工程与科学学院院长,李三立
- 0x00007ffff3d3ecd0 in _IO_vfprintf_internal (s=0x7ffff40b5620 <_IO_2_1_stdout_>