STM32.SPI(25Q16)

摘要:
选中该设备/*Send"RDID"instruction*/SPI_FLASH_SendByte;//先发送一个器ID,告诉它我们要读你的器件ID了0XABSPI_FLASH_SendByte;  //发送3个字节的空地址,25X16的地址是24位的,最后再发一个字节的话。就返回了一个字节的DEVICEID!

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也能够多片工作的。(这里用了一片)

切记:port要一个个定义

②读器件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(); returnTemp; }

看如图:

STM32.SPI(25Q16)第1张

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; returnTemp; }   //数据组合

ID:

STM32.SPI(25Q16)第2张

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

华邦公司不同型号表:

STM32.SPI(25Q16)第3张

对于25Q16

STM32.SPI(25Q16)第4张

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

免责声明:文章转载自《STM32.SPI(25Q16)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇oracle hintdiscuz 用户整合 账号整合 ucenter php网站整合discuz用户 拂晓风起下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

广度优先的sql树形查询

/* 注解: 以前遇到过一个同事,在处理树的时候,在sql语句里面用递归,造成性能非常低下。 在遇到sql处理树的时候,可以采用以下方法,用循环来解决。 主要思路: 找到Cateogry的children插入临时表,在临时表里做遍历,每到一条记录,都做一个操作:将它的children select 出来,插入临时表,最后,将临时表join Cateogry...

013.PGSQL-查看sql正在运行的进程、查看表是否被锁、解锁表

1.PGSQL-查看sql正在运行的进程 SELECT datname,pid,state,query FROM pg_stat_activity where state='active' SELECTprocpid, START, now() - START ASlap, current_query FROM( S...

mybatis 批量插入和where条件使用

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespac...

mysql--统计每个用户的累计访问次数

create table action(userId VARCHAR(10),visitDate VARCHAR(10),visitCount int ); insert into action values('u01','2017/1/21',5),('u02','2017/1/23',6),('u03','2017/1/22',8),('u04','2...

存储过程中SELECT INTO的使用

在MySQL存储过程中使用SELECT …INTO语句为变量赋值:   用来将查询返回的一行的各个列值保存到局部变量中。 要求:   查询的结果集中只能有1行。 SELECT col_name[,...] INTO var_name[,...] table_expr 使用SELECT …INTO语句在数据库中进行查询,并将得到的结果赋值给变量。   ①co...

SQL 连接查询

最近开发公司项目后台 通常查询数据都要关联很多表 有的时候表之间的关联关系没有写清楚就会出现重复数据 本来想自己写几个SQL说明SQL的链接关系 搜索的时候发现维基百科上面将的非常的清晰 直接粘贴拿来学习。 SQL 的连接(JOIN)语句将数据库中的两个或多个表组合起来.[1] 由"连接"生成的集合, 可以被保存为表, 或者当成表来使用. JOIN 语句的...