MPU6050不讲武德,FIFO溢出始终无法解决,提高或降低读取速度都不得行

抄了原子哥的驱动代码,放在了c8t6最小系统板上去跑,一切正常,自检原本通过不了,一顿操作后可以通过了,加速度角速度读取也OK,唯独读取FIFO中的数据读不出来具体为mpu_dmp_get_data(&pitch,&roll,&yaw)这个函数跑不出来,进一步检查,发现是

if (fifo_count > (st.hw->max_fifo >> 1)) {
    
    
        /* FIFO is 50% full, better check overflow bit. */
        if (i2c_read(st.hw->addr, st.reg->int_status, 1, tmp))
            return -1;
        if (tmp[0] & BIT_FIFO_OVERFLOW) {
    
    
            mpu_reset_fifo();
            return -2;
        }
    }

这里返回-2导致这个代码段出不去,明显的FIFO溢出
我一个while循环直接把读取速度干到最快,结果还是过不去
在这里插入图片描述

接下来,我参考了一片据传【启蒙无数人】的神贴,说是读取速度太快也不行,我直接一个delay_us函数把读取速度干慢,结果自然不用多说
在这里插入图片描述

接下来,自然是按照传统规矩,点到为止,我改变了代码结构,跳过获取欧拉角直接获取加速度角速度,发现竟然是好的,我说这6050不讲武德,怀疑是FIFO问题,仔细检查后发现
初始化代码中有关闭FIFO的代码

在这里插入图片描述

但是这无关紧要呀,因为在mpu_dmp_init()函数中又用如下函数打开了

在这里插入图片描述

我将信将疑的把上面关闭FIFO的函数改为0XFF和0X01都试了一遍,结果不必多说

现在这6050都把我干懵逼了,难道是6050固件坏了?FIFO坏了???

猜你喜欢

转载自blog.csdn.net/u013967094/article/details/114269196