STM32.SPI(25Q16)

来源:互联网 发布:java在线运行 编辑:程序博客网 时间:2024/05/16 01:15

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

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

 

0 0
原创粉丝点击