STM32串行通信FLASH获取ID错误

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")