STMF103xvet6串行FLASH实验中,获取FLash的ID错误
int main(void)
{
uint32_t FLASH_ID;
SPI_Confing();
USART_Config();
printf("\r\nSPI写入实验\r\n");
FLASH_ID=SPI_FLASH_ReadID();
printf("FLASH_ID=0x%x",FLASH_ID);
printf("\r\n");
}
u32 SPI_FLASH_ReadID(void)
{
u32 Temp = 0, Temp0 = 0, Temp1 = 0, Temp2 = 0;
GPIO_ResetBits(GPIOC,GPIO_Pin_0); //打开片选
SPI_FLASH_SENDByte(W25X_JedecDeviceID);//发送指令代码
Temp0 = SPI_FLASH_SENDByte(Dummy_Byte);
printf("%x\r\n",Temp0);
Temp1 = SPI_FLASH_SENDByte(Dummy_Byte);
printf("%x\r\n",Temp1);
Temp2 = SPI_FLASH_SENDByte(Dummy_Byte);//每次返回的值不一样,千万不要把三个写在一起
printf("%x\r\n",Temp2);
GPIO_SetBits(GPIOC,GPIO_Pin_0);
Temp = (Temp0 << 16) | (Temp1 << 8) | Temp2;
return Temp;
}
uint8_t SPI_FLASH_SENDByte(uint8_t byte)//发送并返回数据
{
SPITIMEOUT=SPI_FLAG_TIMEOUT;
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET)//检查TX
{
if((SPITIMEOUT--)==0)
return printf("超时1");
}
/*写入数据寄存器,把要写入的数据写入发送缓冲区*/
SPI_I2S_SendData(SPI1, byte);
SPITIMEOUT=SPI_FLAG_TIMEOUT;
/* 等待接收缓冲区非空,RXNE 事件 */
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET)//检查是否写入完成
{
if ((SPITIMEOUT--) == 0)
return printf("超时2");
}
/* 读取数据寄存器,获取接收缓冲区数据 */
return SPI_I2S_ReceiveData(SPI1);
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/320363596256188.JPG "#left")