关于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
有一次读出来的值还不一样!
我想读取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是一灭一亮
我自己找到问题所在了,
