STM32 SPI通信

STM32F103C8T6 SPI通信问题。
SPI1读取BU01模块ID,SPI配置为模式0,oled显示ID为:FE 。
想问各位专家是哪出问题了

UWB.c

#include "stm32f10x.h"                  // Device header
#include "MySPI.h"
#include "uwb.h"
#include "sys.h"
#include "Delay.h"


uint32_t UWB_ID;


void  UWB_Init(void)
{
    
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(    RCC_APB2Periph_GPIOA, ENABLE );                    //PORTAʱÖÓʹÄÜ 

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;                                              // PA4 ÍÆÍì 
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                              //ÍÆÍìÊä³ö
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_Init(GPIOA, &GPIO_InitStructure);

    GPIO_SetBits(GPIOA,GPIO_Pin_4);
 
  //UWB_CS =1;                //SPI1 uwb²»Ñ¡ÖÐ
    SPI1_Init();               //³õʼ»¯SPI
    //SPI1_SetSpeed(SPI_BaudRatePrescaler_128);                                                    //ÉèÖÃΪ1.125MʱÖÓ,¸ßËÙģʽ
                                                                                    
    }

//¶ÁÈ¡UWB ID     
void UWB_ReadID(uint32_t *ID)
{
//    UWB_CS = 0;
        GPIO_ResetBits(GPIOA,GPIO_Pin_4);
    //Delay_ms(500);
    SPI1_ReadWriteByte(0x00);//·¢ËͶÁÈ¡IDÃüÁî    
    
    *ID |= SPI1_ReadWriteByte(0x11)<<24;  
    *ID |= SPI1_ReadWriteByte(0x22)<<16;
    *ID |= SPI1_ReadWriteByte(0x22)<<8;    
    *ID |= SPI1_ReadWriteByte(0x3f);    
    //UWB_CS=1;    
        //GPIO_SetBits(GPIOA,GPIO_Pin_4);

}



MySPI.c

#include "stm32f10x.h"                  // Device header
#include "MySPI.h"

void SPI1_Init(void)
{
    
    GPIO_InitTypeDef GPIO_InitStructure; 
    SPI_InitTypeDef SPI_InitStructure;    
    //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);                                //PORTAʱÖÓʹÄÜ
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);                                //SPI1ʱÖÓʹÄÜ
    
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                                        //PA5/6/7¸´ÓÃÍÆÍìÊä³ö
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;          //PA5---SCK  PA6---MISO    PA7---MOSI
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStructure);                                                                //³õʼ»¯GPIOA 
    
    GPIO_SetBits(GPIOA, GPIO_Pin_5 | GPIO_Pin_6 |GPIO_Pin_7);                        //PA5/6/7ÉÏÀ­
    
    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;    //Ô¤·ÖƵ64
    SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;                                                //Êý¾Ý²¶»ñÓÚµÚÒ»¸öʱÖÓÑØ
    SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;                                                    //Ñ¡ÔñÁË´®ÐÐʱÖÓµÄÎÈ̬£ºÊ±ÖÓÐü¿ÕµÍ    CPOL = 0    CPHA = 0    MODE 0
//SPI_InitStructure.SPI_CRCPolynomial = 7;                                                        //CRCÖµ¼ÆËãµÄ¶àÏîʽ
    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                                        //8λ֡½á¹¹
    SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;     //ÉèÖÃSPIȫ˫¹¤
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;                                    //Êý¾Ý´«Êä´ÓMSBλ¿ªÊ¼
    SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                                                //ÉèÖÃSPI¹¤×÷ģʽ£ºÉèÖÃΪÖ÷SPI
    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                                                        //NSSÐźÅÓÉÈí¼þ¹ÜÀí
    SPI_Init(SPI1,&SPI_InitStructure);                                                                    //¸ù¾ÝÖ¸¶¨µÄ²ÎÊý³õʼ»¯ÍâÉèSPIx¼Ä´æÆ÷
    SPI_Cmd(SPI1,ENABLE);                                                                                                //ʹÄÜSPIÍâÉè
    SPI1_ReadWriteByte(0xff);                                                                                        //Æô¶¯´«Êä

}
    
 
//SPI ËÙ¶ÈÉèÖú¯Êý
//SpeedSet:
//SPI_BaudRatePrescaler_2   2·ÖƵ   
//SPI_BaudRatePrescaler_8   8·ÖƵ   
//SPI_BaudRatePrescaler_16  16·ÖƵ  
//SPI_BaudRatePrescaler_256 256·ÖƵ 
  
void SPI1_SetSpeed(u8 SPI_BaudRatePrescaler)
{
  assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));
    SPI1->CR1&=0XFFC7;
    SPI1->CR1|=SPI_BaudRatePrescaler;    //ÉèÖÃSPI1ËÙ¶È 
    SPI_Cmd(SPI1,ENABLE); 
}


//SPIx ¶Áдһ¸ö×Ö½Ú
//TxData:ҪдÈëµÄ×Ö½Ú
//·µ»ØÖµ:¶ÁÈ¡µ½µÄ×Ö½Ú

uint8_t SPI1_ReadWriteByte(uint8_t TxData)
{        
    uint8_t retry=0;                     
    while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET) //¼ì²éÖ¸¶¨µÄSPI±ê־λÉèÖÃÓë·ñ:·¢ËÍ»º´æ¿Õ±ê־λ
        {
        retry++;
        if(retry>200)return 0;
        }              
    SPI_I2S_SendData(SPI1, TxData); //ͨ¹ýÍâÉèSPIx·¢ËÍÒ»¸öÊý¾Ý
    retry=0;

    while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET) //¼ì²éÖ¸¶¨µÄSPI±ê־λÉèÖÃÓë·ñ:½ÓÊÜ»º´æ·Ç¿Õ±ê־λ
        {
        retry++;
        if(retry>200)return 0;
        }                                  
    return SPI_I2S_ReceiveData(SPI1); //·µ»ØÍ¨¹ýSPIx×î½ü½ÓÊÕµÄÊý¾Ý                        
}



#include "stm32f10x.h"                  // Device header
#include "Motor.h"
#include "Delay.h"
#include "OLED.h"
#include "MySPI.h"
#include "UWB.h"
#include "sys.h"

uint32_t ID;
int main(void)
{

    OLED_Init();
    UWB_Init();
OLED_ShowString(1, 1, "ID:");
UWB_ReadID(&ID);
OLED_ShowHexNum(1, 5, ID, 8);

    while (1)
    {



    }
    
}

1.模式是否按照模块的需求设定的
2.大小端是否配置对了
3.字节数是否选对了