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读写数据相关推荐

  1. STM32驱动eMMC读写数据

    STM32驱动eMMC读写数据 参照 JEDEC eMMC标准:JESD84-B51 (Revision of JESD84-B50.1, July 2014) 驱动芯片采用stm32h7xx芯片.通 ...

  2. 学习STM32 Flash存储 W25Q64 SPI总线存储模块进行读写数据

    今天学习 Flash 存储芯片进行数据写入和读取方法.了解W25Q64 存储芯片的使用.能够用 STM32 单片机对 W25Q64 进行写入数据,擦除数据,读取数据. w25q64 是什么? W25Q ...

  3. 用c语言做RFID读卡程序,2.STM32读卡号读写数据代码示例3.0(C语言)

    文件名大小更新时间 2.STM32读卡号读写数据代码示例3.0(C语言)\HFRFID.uvgui.WEIZAI736912016-07-15 2.STM32读卡号读写数据代码示例3.0(C语言)\H ...

  4. 基于HAL库STM32串口驱动不定长数据接收

    STM32串口驱动不定长数据接收带环形缓冲区 最新框架代码 使用方法 源码 串口接口文件 环形缓冲区接口文件 移植图示 使用涉及4个文件, UART_Port.c UART_Port.h Circul ...

  5. STM32利用FATFS文件系统给SD卡读写数据

    STM32利用FATFS文件系统给SD卡读写数据 注:FATFS文件系统官方网址(内含各种函数具体功能及参数配置): FATFS文件系统官方网址 1. 所需.c和.h文件 FATFS中的文件的作用如下 ...

  6. 关于STM32驱动DS1302实时时钟的一点思考

    关于STM32驱动DS1302实时时钟的一点思考 之前用51驱动过DS1302,没用多久就输出了正确的时间.当时以为这块芯片其实没啥,很简单.但是现在用STM32做项目,用到同样的芯片,以为这有何难, ...

  7. stm32读取目标芯片_使用stm32驱动RC522读IC卡(代码留言邮箱)

    RC522与PN532简介 关于STM32驱动方式 接线说明 程序烧录 查看卡号 总结 RC522与PN532简介 在写这篇文章之前有写过一篇有关于PN532的文章,RC522与PN532在使用上都可 ...

  8. STM32驱动LCD实战

    目录 01 驱动时序 02 FSMC外设配置 03 背光驱动 04 复位驱动 05 寄存器配置 前段时间写了<STM32驱动LCD原理>和<STM32的FSMC外设简介>两篇文 ...

  9. STM32驱动W5100实现udp通信

    STM32驱动W5100实现udp通信 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN7 开发环境:MDK4.72 MCU:STM ...

  10. CH9121串口转以太网模块STM32驱动

    CH9121串口转以太网模块STM32驱动 文章目录 CH9121串口转以太网模块STM32驱动 0. 简介 1. 特性: 2. 应用场合 3. 示例平台 4. 代码 0. 简介 CH9121 集成T ...

最新文章

  1. SpringMVC基础及应用-李守红
  2. pku 2031 Building a Space Station 最小生成树+精度控制
  3. 小程序使用wxParse解析html
  4. 当我们在聊 Serverless 时你应该知道这些
  5. java每秒限流_java限流工具类
  6. C语言学习之打印菱形
  7. 带你了解zabbix整合ELK收集系统异常日志触发告警~
  8. SSH隧道技术----端口转发,socket代理
  9. 乱码 讯飞 语音识别_一段讯飞、百度等语音识别API无法识别的语音最终解决办法...
  10. 盘点数据治理的6个价值
  11. Unable to round-trip http request to upstream: EOF
  12. 如果secureCRT安装时位置改变,EVE-NG如何关联secureCRT
  13. 微信扫码点餐帮助商家赚钱的方法
  14. wpa_supplicant配置
  15. 学生每日计划表_小学生每日学习计划安排表
  16. 计算机网络 专有名词英文缩写
  17. 数独的随机终盘生成函数设计
  18. 云影数码工作室-创业计划书
  19. 上海大学计算机工程与科学学院院长,李三立
  20. 0x00007ffff3d3ecd0 in _IO_vfprintf_internal (s=0x7ffff40b5620 <_IO_2_1_stdout_>

热门文章

  1. 浏览器模式电子海图快速显示的研究
  2. 应用随机过程张波商豪_应用随机过程张波课后答案
  3. 随机过程的概念以及统计特性(读书笔记)
  4. 【数学建模暑期培训】CUMCM历年题分类 2000-2021年数模国赛赛题及求解模型
  5. 自考计算机基础知识考题,自考计算机应用基础试题及参考答案
  6. 阿里巴巴android图标素材网,阿里巴巴图标素材库
  7. PHP 100以内质数表
  8. SQL Server 2008 R2 卸载教程
  9. 全国2013年最新电子地图矢量数据超图格SGD MAPINFO GST SMW SHP格式等
  10. 登记表都不会填,面试还能通过?不可能!