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 = ; /* 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 = , Temp0 = , Temp1 = , Temp2 = ; /* 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 << ) | (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. Integral transform 积分变换

    总结: 1.为了更加便于求解,将方程从原域映射到另外一个域 Integral transform - Wikipedia https://en.wikipedia.org/wiki/Integral_ ...

  2. go语言编程入门

    查看文档 首先先分享一个可以在本地就能查看文档的骚操作(linux系统) 1.打开命令行终端,输入godoc -http=:8000,如果想后台运行在后面加个& 2.然后打开浏览器,输入网址: ...

  3. JQUERY中各个ajax函数

    1.$(selecter).load()     --- load() 方法从服务器加载数据,并把返回的数据放入被选元素中 2.$.get(url,callback()) 3.$.post(url,d ...

  4. js 调用声音提示

    function playSound() { var borswer = window.navigator.userAgent.toLowerCase(); if ( !!window.ActiveX ...

  5. 2015 湘潭大学程序设计比赛(Internet)--G题-人生成就

    人生成就 Accepted : 54   Submit : 104 Time Limit : 10000 MS   Memory Limit : 65536 KB 题目描述 人生就像一个n*n的矩阵, ...

  6. CF1053E Euler tour 构造

    正解:构造 解题报告: 传送门! 这种题目一般都是首先考虑合法性 这题也不例外,思考怎么样是合法的呢? 有四点: 1)a[1]=a[2n-1],显然不说 2)若a[i]=a[j],则(j-i)& ...

  7. Laravel和thinkphp的区别/优缺点

    Laravel的设计思想是很先进的,非常适合应用各种开发模式TDD, DDD和BDD,作为使用者最多的php框架,它为你准备好了一切,composer是个php的未来.laravel最大的特点和处优秀 ...

  8. mysql备份工具innobackupex,xtrabackup-2.1的原理和安装

    mysql备份工具innobackupex,xtrabackup-2.1的原理和安装 http://bbs.2cto.com/read.php?tid=310496 一.Xtrabackup介绍 1. ...

  9. 查看修改MySQL字符集

    查看修改MySQL字符集 http://blog.sina.com.cn/s/blog_70ac6bec01016fts.html 查看修改MySQL字符集 (2012-08-22 09:53:21) ...

  10. Python中的__init__.py的作用

    当用 import 导入该目录时,会执行 __init__.py 里面的代码 因此在__init__.py文件中,把深层的包的路径缩短,别的地方就可以在引用到目录级别时引到深层的包.