MPU9250 SPI通信方法

2019-07-20 04:41发布

SPI搞了一周了,一直没调通。我是直接操作寄存器来控制的,WHO_AM_I 调试时,先片选,然后往SPI中写入WHOAMI|0x80,然后再次发送0xff,然后读取返回值,但总是返回0x3f,0xff,0x0,等数据,就是不出现0x71,WHOANI地址也没错,SPI配置也是在这个论坛上找的例程
要崩溃了,用的是阿波罗F7的SPI3,贴上相关代码:
u8 SPI3_ReadWriteByte(u8 TxData)
{               
       
          u8 res = 0;
          u8 retry=0;                       
          SPI3->SR|=1<<0; //清空接受位置
   MPU_9250_ENABLE ;
           for(u8 i=0;i<200;i++) {};
          while ((SPI3->SR&1<<1)==0) //等待发送空
                {
                retry++;
                if(retry>200)printf("spisend-err");return 0;
                }                          
          SPI3->DR =TxData; //发送
          retry=0;
        //        HAL_Delay(5);

        while ((SPI3->SR&1<<0)==0) //等待接收
                {
                retry++;
                if(retry>200)printf("spirec-err");return 0;
                }
                res = SPI3->DR;
                HAL_Delay(1);
                MPU_9250_DISENABLE;
        return res; //返回接收值                                    
}


u8 check()
{
        u8 res= 0 ;
        SPI3_ReadWriteByte(WHO_AM_I|0x80); //发送地址
        res = SPI3_ReadWriteByte(0xff); //读取值
        printf("who-am-i:0x%x   ",res);
        if(res!=0x71)
        {
               
                return 0; //错误
        }
        return 1; //正常
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。