前提:
我使用的是mpu6050和hmc5883l集成的9轴芯片LEADIY D3B芯片。
芯片内部的hmc5883l的SCL和SDA线是连接在mpu6050的AUX_CL和AUX_DA上的,所以我在初始化mpu6050的时候关闭了I2C主模式,并且设置中断/旁路设置寄存器使他开启Bypass功能,使mpu6050可以通过I2C辅助总线直接访问HMC5883l。
问题:
当我不开启DMP驱动(即没有进行mpu_dmp_init()),直接只是测量mpu6050的三轴加速度和角速度,以及hmc5883l的三轴磁分量。测量数据输出正常。
但是当我卡其DMP驱动,则hmc5883l就无法输出了,三轴磁分量都是为一个很小的定值不变,而且每次reset这三个定值也不变。
以上配置mpu6050和开启DMP驱动的方法,都是移植原子哥的代码,自己只不过加了开启hmc5883l的代码。在不开启DMP的时候hmc5883l输出正常,但开启DMP,就不正常了,所以问题应噶是出在DMP这一块,是不是在驱动DMP的时候关闭了Bypass功能,使mpu6050不能通过I2C辅助总线直接访问HMC5883l?还是其他原因?应该怎么改呢?
求助大神应该怎么在开启DMP的功能的基础上,让hmc的功能也实现。
不开启DMP时,主程序代码:
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
uart_init(115200);
delay_init();
usmart_dev.init(72);
KEY_Init();
LED_Init();
MPU_Init();
init_hmc5883l();
while(1)
{
if((t%1000)==0)
{
temp=MPU_Get_Temperature();
MPU_Get_Accelerometer(&aacx,&aacy,&aacz);
MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);
get_hmc5883l(&bbx,&bby,&bbz,&angle); //以上四句为获得数据
print_HMC5883L(&bbx,&bby,&bbz,&angle);
MPU_show_Gyroscope(&gyrox,&gyroy,&gyroz);
MPU_show_Accelerometer(&aacx,&aacy,&aacz); //以上三句为打印数据
delay_ms(500);
t=0;
LED0=!LED0;
}
t++:
}
开启DMP时代码:
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
uart_init(115200);
delay_init();
usmart_dev.init(72);
KEY_Init();
LED_Init();
MPU_Init();
init_hmc5883l();
while(mpu_dmp_init())
{
printf("MPUdmp6050 Error
");
delay_ms(200);
}
while(1)
{
if(mpu_dmp_get_data(&pitch,&roll,&yaw)==0)
{
if((t%1000)==0)
{
temp=MPU_Get_Temperature();
MPU_Get_Accelerometer(&aacx,&aacy,&aacz);
MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);
get_hmc5883l(&bbx,&bby,&bbz,&angle); //以上四句为获得数据
print_HMC5883L(&bbx,&bby,&bbz,&angle);
MPU_show_Gyroscope(&gyrox,&gyroy,&gyroz);
MPU_show_Accelerometer(&aacx,&aacy,&aacz); //以上三句为打印数据
delay_ms(500);
t=0;
LED0=!LED0;
}
}
t++:
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>