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. 代码参数里的 payload 是什么意思???

    代码参数里的 payload 是什么意思???

  2. iOS-图像之CoreImage框架

    1.coreImage的介绍   coreImage是IOS5中新加入的一个Objective-C的框架,提供了强大高效的图像处理功能,用来对基于像素的图像进行操作与分析.iOS提供了很多强大的滤镜( ...

  3. sql中把字符串转化为数字的方法

    1. convert(int,字段名) 2. cast(字段名 as int)

  4. less语言特性(一) —— 变量

    近两年移动市场不断扩大,HTML5也逐渐升温,为了使我们前端工作更有效率,各种框架层出不穷,本章将介绍LESSCSS框架.LESSCSS是一种动态样式语言,属于CSS预处理语言的一种,它使用类似CSS ...

  5. 兼容IE7以上的无缝滚动,带箭头、停顿

    <!DOCTYPE HTML><html> <head>        <meta charset="utf-8" />       ...

  6. 009-spring cloud gateway-过滤器GatewayFilter、GlobalFilter、GatewayFilterChain、作用、生命周期、GatewayFilterFactory内置过滤器

    一.概述 在Spring-Cloud-Gateway之请求处理流程中最终网关是将请求交给过滤器链表进行处理. 核心接口:GatewayFilter,GlobalFilter,GatewayFilter ...

  7. 使用gradle构建多模块springboot项目,打jar包

    官方文档: https://spring.io/guides/gs/rest-service/  参考:http://blog.csdn.net/u013360850/article/details/ ...

  8. B*树的定义

    B*树是B+树的变体,在B+树的非根和非叶子结点再增加指向兄弟的指针: B*树定义了非叶子结点关键字个数至少为(2/3)*M,即块的最低使用率为2/3(代替B+树的1/2). 所以,B*树分配新结点的 ...

  9. Vue.js学习笔记——表单控件实践

    最近项目中使用了vue替代繁琐的jquery处理dom的数据更新,个人非常喜欢,所以就上官网小小地实践了一把. 以下为表单控件的实践,代码敬上,直接新建html文件,粘贴复制即可看到效果~ <! ...

  10. 关于 WebBrowser调用百度地图API 鼠标滚轮缩放地图级别失灵的解决办法

    在桌面程序下 百度地图API的鼠标缩放地图功能可能会失灵无效! 这个原因不是API的问题 小弟试了下在WEB上面是没有问题的 于是考虑可能是WebBrowser的获取焦点问题,于是在主窗体 添加了一个 ...