此函数首先通过IIC_Init(需外部提供)初始化与MPU6050连接的IIC接口,然后调用mpu_init函数,初始化MPU6050,之后就是设置DMP所用传感器、FIFO、采样率和加载固件等一系列操作,在所有操作都正常之后,最后通过mpu_set_dmp_state(1)使能DMP功能,在使能成功以后,我们便可以通过mpu_dmp_get_data来读取姿态解算后的数据了。
此函数首先通过IIC_Init(需外部提供)初始化与MPU6050连接的IIC接口,然后调用mpu_init函数,初始化MPU6050,之后就是设置DMP所用传感器、FIFO、采样率和加载固件等一系列操作,在所有操作都正常之后,最后通过mpu_set_dmp_state(1)使能DMP功能,在使能成功以后,我们便可以通过mpu_dmp_get_data来读取姿态解算后的数据了。
mpu_dmp_init,是MPU6050DMP初始化函数,该函数代码如下: 1//mpu6050,dmp初始化23//返回值:0,正常45//其他,失败67u8mpu_dmp_init(void)89{1011u8res=0;1213IIC_Init();//初始化IIC总线1415if(mpu_init()==0)//初始化MPU60501617{1819res=mpu_set_sensors(INV_XYZ_GYRO|INV_XYZ_ACCEL);//需要的传感器...
1,MPU6050 IIC接口驱动代码 2,MPU_Init函数 3,MPU_Get_Gyroscope函数 4,MPU_Get_Accelerometer函数 5,MPU_Get_Temperature函数 1,DMP移植相关代码 i2c_write、i2c_read、delay_ms和get_ms. 2, mpu_dmp_init函数 3, mpu_dmp_get_data函数
}intMPU6050_DMP_init(void){intret;structint_param_sint_param;//mpu_initret =mpu_init(∫_param);if(ret !=0) {returnERROR_MPU_INIT; }//设置传感器ret =mpu_set_sensors(INV_XYZ_GYRO | INV_XYZ_ACCEL);if(ret !=0) {returnERROR_SET_SENSOR; ...
修改inv_mpu.h和inv_mpu.c,添加STM32相关的宏定义和函数实现。 调整I2C通信函数,使用HAL库的I2C接口。 根据实际硬件连接,修改MPU6050的I2C地址。 3. DMP初始化与测试 编写初始化函数MPU6050_DMP_init,配置DMP并加载固件。编写测试函数验证DMP库的移植是否成功。
使用DMP库需要在MPU官方下载固件并将下面六个导入工程 并且在固件库中需要进行一定的设定。在inv_mpu.c...
可以自己看出设置的速度是多少,我的实验发现的是如果iic速率高了,我这里是超过200KHZ的画,就会出现加载DMP固件,以及其他的初始化设置mpu_dmp_init()的时候就会出错,但是如果iic的速率低了,我实验的是如果开优化的话,低于100khz时候,读取dmp fifo就会出错了,读不出值,如果不开优化,那么速度可以低到80KHZ去读取fif...
关注的核心部分就在while(mpu_dmp_init()),DMP初始化这块,注意会出问题的部分 inv_mpu.c //mpu6050,dmp初始化 //返回值:0,正常 // 其他,失败 u8 mpu_dmp_init(void) { u8 res=0; MPU_IIC_Init(); //初始化IIC总线 if(mpu_init()==0) //初始化MPU6050 ...
方法/步骤 1 ①经过初始化之后,如果能够初始化成功,就转到第二步while(mpu_dmp_init()!=0){printf("MPU6050 INIT ERROR\r\n");} 2 循环读取数据,直到MPU6050返回0,表示读取FIFO成功while(mpu_dmp_get_data(&pitch,&roll,&yaw)!=0)//返回0就成功了{//第一次读取数据的时候不成功,可能是...