MPU6050 DMP初始化失败求帮忙

2019-08-16 20:02发布

代码是原子哥的代码;mpu_dmp_init()   DMP初始化失败 我查代买发现是
res=dmp_load_motion_driver_firmware();                //加载固件库
                if(res)return 4;   实际返回4  说明加载失败 继续看发现
  if (memcmp(firmware+ii, cur, this_write))
            return -2;  是这个函数返回了-2  说以导致失败      这个函数 执行的是汇编 看不懂...


请问这是为什么?怎么解决呢?

首先可以确定的是我的小车原装代码是可以实现的  所以排除硬件问题  
MPU_Init();                                        //初始化MPU6050   这可以初始化   说明IIC通行也没问题
在初始化前我没开任何中断
               

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
16条回答
gexinyu1993
2019-08-18 06:17
zhaoyuaiweide 发表于 2017-1-6 10:02
没太听懂楼主什么意思  如果你要打印出来陀螺仪原始数据相应的忘记那个.c了  好像是mpu6050.c就有u8 MPU_ ...

IO部分我都改过了
u8 MPU_Get_Gyroscope(short *gx,short *gy,short *gz)
这个函数 调用的就是
u8 MPU_Read_Len(u8 addr,u8 reg,u8 len,u8 *buf)
{
        IIC_Start();
        IIC_Send_Byte((addr<<1)|0);//·¢&#203;í&#198;÷&#188;tμ&#216;&#214;·+D′&#195;üá&#238;       
        if(IIC_Wait_Ack())        //μè′yó|′e
        {
                IIC_Stop();                 
                return 1;               
        }
    IIC_Send_Byte(reg);        //D′&#188;&#196;′&#230;&#198;÷μ&#216;&#214;·
    IIC_Wait_Ack();                //μè′yó|′e
    IIC_Start();
        IIC_Send_Byte((addr<<1)|1);//·¢&#203;í&#198;÷&#188;tμ&#216;&#214;·+&#182;á&#195;üá&#238;       
    IIC_Wait_Ack();                //μè′yó|′e
        while(len)
        {
                if(len==1)*buf=IIC_Read_Byte(0);//&#182;áêy&#190;Y,·¢&#203;ínACK
                else *buf=IIC_Read_Byte(1);                //&#182;áêy&#190;Y,·¢&#203;íACK  
                len--;
                buf++;
        }   
    IIC_Stop();        //2úéúò&#187;&#184;&#246;í£&#214;1ì&#245;&#188;t
        return 0;       
}

这个连续读 函数  这读出来就是原始数据   可是只能读1个数据出来  不知道为什么  我吧这函数改成
u8 MPU_Read_Len(u8 addr,u8 reg,u8 len,u8 *buf)
{
        u8 i;
        for(i=0;i<len;i++)
        {
                *buf=MPU_Read_Byte(reg);
                buf++;
                reg+=1;
        }
        return 0;
}

这样 就可以全部读出来  ,,现在读数据到没什么问题


现在DMP加载固件库失败  ,,,失败的地方那个函数  貌似 是 汇编的 还是不开源..
if (memcmp(firmware+ii, cur, this_write))
            return -2;

一周热门 更多>