微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > ARM技术讨论 > 关于STM32读W25X40ID的问题,请指教

关于STM32读W25X40ID的问题,请指教

时间:10-02 整理:3721RD 点击:
各位大神:
我想读取W24X40的ID信息,然后在串口显示,但是串口显示全是零,请指教一下我程序哪里出错啦?
读三个ID的代码是下面的
u8 SPI_FLASH_SendByte(u8 BYTE)
{
  while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
   SPI_I2S_SendData(SPI1, BYTE);
  while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
   return SPI_I2S_ReceiveData(SPI1);
}
u32 SPI_FLASH_ReadDeviceID(void)
{
  u8 tmp0;
  GPIO_ResetBits(GPIOA, GPIO_Pin_4);
  SPI_FLASH_SendByte(0xAB);
  SPI_FLASH_SendByte(0xFF);
  SPI_FLASH_SendByte(0xFF);
  SPI_FLASH_SendByte(0xFF);
  tmp0 = SPI_FLASH_SendByte(0xFF);
  GPIO_SetBits(GPIOA, GPIO_Pin_4);
  return tmp0;
  
}
u32 SPI_FLASH_ReadID(void)
{
  u32 tmp1 = 0,tmp2 = 0,tmp3 = 0,tmp4 = 0;
  GPIO_ResetBits(GPIOA, GPIO_Pin_4);
   SPI_FLASH_SendByte(0x9F);
  tmp1 = SPI_FLASH_SendByte(0xFF);
  tmp1&=0x0FF;
  tmp2 = SPI_FLASH_SendByte(0xFF);
  tmp2&=0x0FF;
  tmp3 = SPI_FLASH_SendByte(0xFF);
  tmp3&=0x0FF;
  GPIO_SetBits(GPIOA, GPIO_Pin_4);
  tmp4 = (tmp1<<16)|(tmp2<<8)|tmp3;
  return tmp4;
  
  }
u16 SPI_FLASH_ReadID1(void)
{
  u16 tmp = 0, tmp1 = 0, tmp2 = 0;
  GPIO_ResetBits(GPIOA, GPIO_Pin_4);
  SPI_FLASH_SendByte(0x90);
  SPI_FLASH_SendByte(0x00);
  SPI_FLASH_SendByte(0x00);
  SPI_FLASH_SendByte(0x00);
  tmp1 = SPI_FLASH_SendByte(0xff);
  tmp2 = SPI_FLASH_SendByte(0xff);
  GPIO_SetBits(GPIOA, GPIO_Pin_4);
  tmp = (tmp1<<8)|tmp2;
  return tmp;
}
下面是输出到串口部分的代码:
while(1)
{
    tp1 = SPI_FLASH_ReadDeviceID();
   tp2 = SPI_FLASH_ReadID();
   tp3 = SPI_FLASH_ReadID1();
   printf("\r\nID已经读出来!\r\n");
   GPIO_SetBits(GPIOA, GPIO_Pin_2);
     GPIO_ResetBits(GPIOA, GPIO_Pin_1);
   printf("\r\n ID1=:0x%4x \r\n", tp1);
    printf("\r\n ID2=:0x%4x \r\n", tp2);
   printf("\r\n ID3=:0x%2x \r\n", tp3);
   //while(1);
     ZQ_Delay(1000);
     GPIO_ResetBits(GPIOA, GPIO_Pin_2);
      GPIO_SetBits(GPIOA, GPIO_Pin_1);
   tp1 = SPI_FLASH_ReadDeviceID();
   tp2 = SPI_FLASH_ReadID();
   tp3 = SPI_FLASH_ReadID1();
    printf("\r\nID 又读出来\r\n");
   printf("\r\n ID1=:0x%4x \r\n", tp1);
    printf("\r\n ID2=:0x%4x \r\n", tp2);
   printf("\r\n ID3=:0x%2x \r\n", tp3);
     ZQ_Delay(1000);
}
在线求指教啊?
串口的输出结果是这样:
usart1 开启成功
SPI 开启成功
ID已经读出来!
ID1=:0x   0
ID2=:0x   0
ID3=:0x 0
ID 又读出来
ID1=:0x   0
ID2=:0x   0
ID3=:0x 0
ID已经读出来!
ID1=:0x   0
ID2=:0x3ffff
ID3=:0x 0
ID 又读出来
ID1=:0x   0
ID2=:0x   0
ID3=:0x 0
ID已经读出来!
ID1=:0x   0
ID2=:0x   0
ID3=:0x 0
ID 又读出来
ID1=:0x   0
ID2=:0x   0
ID3=:0x 0
ID已经读出来!
ID1=:0x   0
ID2=:0x   0
ID3=:0x 0
有一次读出来的值还不一样!

















GPIO_SetBits(GPIOA, GPIO_Pin_2);
GPIO_ResetBits(GPIOA, GPIO_Pin_1);
还有我是想让我这两个引脚出来的灯交替亮的(每读一次ID),现在我PIN1的等常亮,灯2是一灭一亮

我自己找到问题所在了,

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top