软件版本:MDK :v5.29
STM32cubeMX:5.6.1
STM32Cube MCU Package for STM32F4 Series 1.25
硬件:正点原子阿波罗F429开发板
问题描述:项目上要用mpu9250,起初自己用stm32cubemx建立的工程,循环读取mpu9250的欧拉角输出,移植官方的DMP姿态融合算法。本来用的是st官方的HAL库硬件读取I2C,在读写数据时都没有问题,但是在DMP自检时怎么都不能通过,如果屏蔽掉run_self_test()也可以正常使用,但是自检不通过总是不放心,也让人对其测量数据的准确性存疑。
在仔细对比了正点原子的官方例程后(模拟读取I2C)发现两种方式读取I2C的差别体现在DMP inv_mpu.c文件的函数mpu_run_6500_self_test 函数当中,在这个函数中加速度计和陀螺仪的自检不通过
for (ii = 0; ii < tries; ii++)
if (!get_st_6500_biases(gyro, accel, 0, debug))
break;
for (ii = 0; ii < tries; ii++)
if (!get_st_6500_biases(gyro_st, accel_st, 1, debug))
break;
以上两个函数分别循环2次读取 gyro,accel 和 gyro_st,accel_st四个值,两种I2C读取方式在保持硬件不动的情况下测量结果差距比较大,导致在下面的自检结果计算时&nb

最低0.47元/天 解锁文章
1850





