当前位置: 首页 > news >正文

STM32.SPI(25Q16)

1.首先认识下W25Q16DVSIG,

  • SOP8
  • SPI FLASH
  • 16MBIT  2MB(4096个字节)

(里面可以放字库,图片,也可以程序掉电不丢失数据放里面)

例程讲解:

1.用到SPI库;conf.h里打开头文件

2.2M串行FLASH  W25Q16初始化

SPI_FLASH_Init();

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);  

RCC_APB2PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);  //注意挂载的时钟线

注意片选,SPI也可以多片工作的;(这里用了一片)

切记:端口要一个个定义

②读器件ID(此处不能出错)

    /* Get SPI Flash Device ID */
    DeviceID = SPI_FLASH_ReadDeviceID();

 

u32 SPI_FLASH_ReadDeviceID(void)
{
  u32 Temp = 0;

  /* Select the FLASH: Chip Select low */
  SPI_FLASH_CS_LOW();   //片选拉低,选中该设备

  /* Send "RDID " instruction */
  SPI_FLASH_SendByte(W25X_DeviceID);//先发送一个器ID,告诉它我们要读你的器件ID了(这是一个命令) 0XAB
  SPI_FLASH_SendByte(Dummy_Byte);     //发送3个字节的空地址,25X16的地址是24位的,最后再发一个字节的话,就返回了一个字节的DEVICEID!
  SPI_FLASH_SendByte(Dummy_Byte);
  SPI_FLASH_SendByte(Dummy_Byte);
  
  /* Read a byte from the FLASH */
  Temp = SPI_FLASH_SendByte(Dummy_Byte);

  /* Deselect the FLASH: Chip Select high */
  SPI_FLASH_CS_HIGH();

  return Temp;
}

 

看如图:

0xAB 对应 ID7-ID0

③读取FLASHID

    /* Get SPI Flash ID */
    FlashID = SPI_FLASH_ReadID();

 

函数如下:

/*******************************************************************************
* Function Name  : SPI_FLASH_ReadID
* Description    : Reads FLASH identification.
* Input          : None
* Output         : None
* Return         : FLASH identification
*******************************************************************************/
u32 SPI_FLASH_ReadID(void)
{
  u32 Temp = 0, Temp0 = 0, Temp1 = 0, Temp2 = 0;

  /* Select the FLASH: Chip Select low */
  SPI_FLASH_CS_LOW();

  /* Send "RDID " instruction */
  SPI_FLASH_SendByte(W25X_JedecDeviceID);   //发送9F过去,将返回一个字节的ID(M7-M0)然后再返回来连个字节的deviceID (ID15-ID8/ID7-ID0)

  /* Read a byte from the FLASH */
  Temp0 = SPI_FLASH_SendByte(Dummy_Byte);    //读取M7-M0

  /* Read a byte from the FLASH */
  Temp1 = SPI_FLASH_SendByte(Dummy_Byte);    //读取ID15-ID8

  /* Read a byte from the FLASH */
  Temp2 = SPI_FLASH_SendByte(Dummy_Byte);   //读取ID7-ID0
/* Deselect the FLASH: Chip Select high */ SPI_FLASH_CS_HIGH(); Temp = (Temp0 << 16) | (Temp1 << 8) | Temp2; return Temp; }   //数据组合

 

ID:

对于 Manufacturer  和  Memory Type  对应的数据时根据不同的型号而不同的(如图)

华邦公司不同型号表:

对于25Q16

只是器件地址不一样,他们都是华邦公司的嘛

 

转载于:https://www.cnblogs.com/Ph-one/p/4106037.html

相关文章:

  • STM32.定时器
  • CAN通信(STM32)
  • 触摸屏
  • 超频真的不难!G3258超频4.5GHz全攻略
  • 《将博客搬至51CTO》
  • 小K(wifi)插座剖解
  • WIFI模块对比介绍
  • linux学习笔记《一.烧写篇_android》
  • 串口WIF简单I调试
  • CRC32是什么?
  • 指数增长的领域
  • va_start和va_end使用详解
  • STM32组合设备实现USB转双串口
  • ESP8266调试笔记
  • android驱动学习---led实验
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • idea + plantuml 画流程图
  • ng6--错误信息小结(持续更新)
  • pdf文件如何在线转换为jpg图片
  • vue 个人积累(使用工具,组件)
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 大型网站性能监测、分析与优化常见问题QA
  • 前端面试之闭包
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 用jQuery怎么做到前后端分离
  • 在weex里面使用chart图表
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (新)网络工程师考点串讲与真题详解
  • (一)Dubbo快速入门、介绍、使用
  • (转) ns2/nam与nam实现相关的文件
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)重识new
  • *** 2003
  • .Net 8.0 新的变化
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • [2016.7.Test1] T1 三进制异或
  • [android学习笔记]学习jni编程
  • [BJDCTF 2020]easy_md5
  • [C#]OpenCvSharp使用帧差法或者三帧差法检测移动物体
  • [c++] C++多态(虚函数和虚继承)