1.首先认识下W25Q16DVSIG,

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

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

例程讲解:

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

2.2M串行FLASH  W25Q16初始化

  1. SPI_FLASH_Init();

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);

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

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

切记:端口要一个个定义

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

  1. /* Get SPI Flash Device ID */
  2. DeviceID = SPI_FLASH_ReadDeviceID();
  1. u32 SPI_FLASH_ReadDeviceID(void)
  2. {
  3. u32 Temp = ;
  4.  
  5. /* Select the FLASH: Chip Select low */
  6. SPI_FLASH_CS_LOW(); //片选拉低,选中该设备
  7.  
  8. /* Send "RDID " instruction */
  9. SPI_FLASH_SendByte(W25X_DeviceID);//先发送一个器ID,告诉它我们要读你的器件ID了(这是一个命令) 0XAB
  10. SPI_FLASH_SendByte(Dummy_Byte);   //发送3个字节的空地址,25X16的地址是24位的,最后再发一个字节的话,就返回了一个字节的DEVICEID!
  11. SPI_FLASH_SendByte(Dummy_Byte);
  12. SPI_FLASH_SendByte(Dummy_Byte);
  13.  
  14. /* Read a byte from the FLASH */
  15. Temp = SPI_FLASH_SendByte(Dummy_Byte);
  16.  
  17. /* Deselect the FLASH: Chip Select high */
  18. SPI_FLASH_CS_HIGH();
  19.  
  20. return Temp;
  21. }

看如图:

0xAB 对应 ID7-ID0

③读取FLASHID

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

函数如下:

  1. /*******************************************************************************
  2. * Function Name : SPI_FLASH_ReadID
  3. * Description : Reads FLASH identification.
  4. * Input : None
  5. * Output : None
  6. * Return : FLASH identification
  7. *******************************************************************************/
  8. u32 SPI_FLASH_ReadID(void)
  9. {
  10. u32 Temp = , Temp0 = , Temp1 = , Temp2 = ;
  11.  
  12. /* Select the FLASH: Chip Select low */
  13. SPI_FLASH_CS_LOW();
  14.  
  15. /* Send "RDID " instruction */
  16. SPI_FLASH_SendByte(W25X_JedecDeviceID);   //发送9F过去,将返回一个字节的ID(M7-M0)然后再返回来连个字节的deviceID (ID15-ID8/ID7-ID0)
  17.  
  18. /* Read a byte from the FLASH */
  19. Temp0 = SPI_FLASH_SendByte(Dummy_Byte); //读取M7-M0
  20.  
  21. /* Read a byte from the FLASH */
  22. Temp1 = SPI_FLASH_SendByte(Dummy_Byte); //读取ID15-ID8
  23.  
  24. /* Read a byte from the FLASH */
  25. Temp2 = SPI_FLASH_SendByte(Dummy_Byte);   //读取ID7-ID0
  1. /* Deselect the FLASH: Chip Select high */ SPI_FLASH_CS_HIGH(); Temp = (Temp0 << ) | (Temp1 << ) | Temp2; return Temp; } //数据组合

ID:

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

华邦公司不同型号表:

对于25Q16

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

STM32.SPI(25Q16)的更多相关文章

  1. STM32F10x_SPI(硬件接口 + 软件模拟)读写Flash(25Q16)

    推荐 分享一个大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来! http://www.captainbed.net/strongerhuang Ⅰ.写在前 ...

  2. Linux设备驱动剖析之SPI(三)

    572至574行,分配内存,注意对象的类型是struct spidev_data,看下它在drivers/spi/spidev.c中的定义: struct spidev_data { dev_t de ...

  3. STM32开发(一):简介及开发环境

    1. 背景 STM32是意法(ST)公司开发的基于ARM Cortex-M系列的一系列微控制器(MCU). 有两种库 标准外设库(StdPeriph_Driver.Standard Periphera ...

  4. Dubbo源码分析之 SPI(一)

    一.概述 dubbo SPI 在dubbo的作用是基础性的,要想分析研究dubbo的实现原理.dubbo源码,都绕不过 dubbo SPI,掌握dubbo SPI 是征服dubbo的必经之路. 本篇文 ...

  5. Dubbo源码分析之SPI(三)

    一.概述 本篇介绍自适应扩展,方法getAdaptiveExtension()的实现.ExtensionLoader类本身很多功能也使用到了自适应扩展.包括ExtensionFactory扩展. 通俗 ...

  6. 增量式PID的stm32实现(转)

    源:增量式PID的stm32实现,整定过程 首先说说增量式PID的公式,这个关系到MCU算法公式的书写,实际上两个公式的写法是同一个公式变换来得,不同的是系数的差异. 资料上比较多的是: 还有一种是: ...

  7. Linux设备驱动剖析之SPI(四)

    781行之前没什么好说的,直接看783行,将work投入到工作队列里,然后就返回,在这里就可以回答之前为什么是异步的问题.以后在某个合适的时间里CPU会执行这个work指定的函数,这里是s3c64xx ...

  8. Linux设备驱动剖析之SPI(一)

    写在前面 初次接触SPI是因为几年前玩单片机的时候,由于普通的51单片机没有SPI控制器,所以只好用IO口去模拟.最近一次接触SPI是大三时参加的校内选拔赛,当时需要用2440去控制nrf24L01, ...

  9. Dubbo源码解析之SPI(一):扩展类的加载过程

    Dubbo是一款开源的.高性能且轻量级的Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用.智能容错和负载均衡,以及服务自动注册和发现. Dubbo最早是阿里公司内部的RPC框架,于 ...

随机推荐

  1. Linux下搭建hadoop开发环境-超详细

    先决条件:开发机器需要联网 已安装java 已安装Desktop组 1.上传安装软件到linux上: 2.安装maven,用于管理项目依赖包:以hadoop用户安装apache-maven-3.0.5 ...

  2. UIGestureRecognizer和UITouch

    UIGestureRecognizer和UITouch是分别判断的,如果判定了是手势,那就不再触发UITouch事件,如果两者并存,则会先执行UITouch事件,之后如果确认是手势,不再执行UITou ...

  3. Github常用命令【转】

    本地仓库(local repository) 创建一个本地仓库的流程: 为本地仓库创建一个目录 在目录中执行 git init 对本地仓库所做的改变(例如添加.删除文件等)首先加入到本地仓库的 Ind ...

  4. oracle显示转换字段类型cast()函数

    今天遇到一个查询类型转换的问题:表的字段是varchar2类型,然后查询到的结果要转换为number(20,2),刚开始的时候使用to_number()函数,发现不能满足需求.后来才知道,原来还有ca ...

  5. javaScript高级教程(六) 获取窗口,屏幕,文档信息

    1.屏幕坐标:相对于桌面左上角 窗口坐标:相对于窗口的左上角 文档坐标:相对于html文档左上角 当有滚动条时,窗口坐标与文档坐标之间有区别

  6. (3.5)mysql基础深入——mysqld_safe脚本功能及流程

    (3.5)mysql基础深入——mysqld_safe脚本功能及流程 目录 1.mysqld_safe过程总结 2.mysql_safe启动的好处 3.mysqld_safe 参数 4.mysqld_ ...

  7. WordPress 3.8 后台仪表盘将重新设计

    WordPress 3.8 的后台仪表盘界面将会重新设计 概况(RightNow) -> 改为网站内容(SiteContent) 快速发布(QuickPress) -> 改为快速草稿(Qu ...

  8. SpringBoot打成的jar包发布,shell关闭之后一直在服务器运行

    1:可以编写shell脚本, 切换到执行的jar包目录,然后使用nohup  让改命令在服务器一直运行 #!/bin/bash cd /srv/ftp/public nohup java -jar l ...

  9. HTML <input> 标签的 name 属性

    定义和用法 name 属性规定 input 元素的名称. name 属性用于对提交到服务器后的表单数据进行标识,或者在客户端通过 JavaScript 引用表单数据. 注释:只有设置了 name 属性 ...

  10. Ubuntu 14.04 安装 SteamOS 会话

    如何在Ubuntu 14.04上安装steamos会话,以使用户的SteamOS 大图片模式直接从lightdm GTK迎宾开始进入. SteamOS是一个开源的基于Debian Wheezy分支的. ...