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; //正常
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
今天吃红烧鱼
1楼-- · 2019-07-20 08:31
 精彩回答 2  元偷偷看……
今天吃红烧鱼
2楼-- · 2019-07-20 14:15
今天吃红烧鱼 发表于 2018-11-18 21:11
SPI配置:
static void MX_SPI3_Init(void)
{

其中分频系数2~64都试过,只有8,16时才会有数据返回,虽然返回值不是预期的。。
peng1554
3楼-- · 2019-07-20 19:55
 精彩回答 2  元偷偷看……
zuoyi
4楼-- · 2019-07-21 01:39
示波器或者逻辑分析仪,看波形
今天吃红烧鱼
5楼-- · 2019-07-21 06:45
zuoyi 发表于 2018-11-24 10:36
示波器或者逻辑分析仪,看波形

能通信,我觉得应该不是硬件配置的事
zuoyi
6楼-- · 2019-07-21 10:04
 精彩回答 2  元偷偷看……

一周热门 更多>