高中生
最后登录1970-1-1
在线时间 小时
注册时间2015-10-25
|
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);
SPI_FLASH_SendByte(Dummy_Byte);
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;
}
u8 SPI_FLASH_SendByte(u8 byte)
{
/* Loop while DR register in not emplty */
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
/* Send byte through the SPI1 peripheral */
SPI_I2S_SendData(SPI1, byte);
/* Wait to receive a byte */
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
/* Return the byte read from the SPI bus */
return SPI_I2S_ReceiveData(SPI1);
}
请问各位大大和火哥,这段函数是读取W25Q64的设备ID ,W25Q64的数据手册要求是先发送一个0XAB,在连续发送三个字节的任意编码,在第5次发送一个字节的时候,W25Q64会返回它的设备ID号,我现在就有一个问题如果第五次W25Q64才会返回他的设备ID号,那么前面发送数据的时候是如何退出这个函数的啊 /* Wait to receive a byte */
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
不是就应该一直在那等待吗?我看到原子战舰的这个部分都会加一个超时退出的函数,一直搞不清楚,希望大大们,能帮我解此惑,感激不尽
|
|