初级会员

- 积分
- 60
- 金钱
- 60
- 注册时间
- 2019-6-29
- 在线时间
- 16 小时
|
7金钱
小弟我最近在尝试用stm32读取多个mpu9250输出欧拉角,我通过将两片9250的AD0接口分别接到stm32板子的PA5和PA6上,然后分别置PA5和PA6以低电平,同时置另一个以高电平,以此来分别读取两个9250的数据,但是得到的数据却是串在一起的,就是显示的a,b数据都是一样的,而且无论动哪一片9250,两个数据都会一起改变(但是我用不带磁力计修正的6050的程序分别读取9250就没有这个问题),不知道有没有大佬做过类似的功能,能指点一下小弟到底是哪里有问题吗?真的感激不尽。下面的是主函数,图片是mpl库函数
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "mpu9250.h"
#include "inv_mpu.h"
#include "inv_mpu_dmp_motion_driver.h"
#include "mpuiic.h"
int main(void)
{
float pitch,roll,yaw; //欧拉角
short aacx,aacy,aacz; //加速度计原始数据
short gyrox,gyroy,gyroz; //陀螺仪原始数据
IIC_Init();
delay_init();
uart_init(115200);
GPIO_InitTypeDef GPIO_InitStructure;
//配置GPIOA5
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //PA.5
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.5
//配置GPIOA6
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //PA.6
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.6
LED_Init();
//GPIOA5初始化
GPIO_ResetBits(GPIOA,GPIO_Pin_5);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
while(mpu_dmp_init())
{
delay_ms(200);
LED=1;
}
//GPIO6初始化
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_5);
while(mpu_dmp_init())
{
delay_ms(200);
LED=1;
}
while(1)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_5);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
delay_ms(20);
mpu_mpl_get_data(&pitch,&roll,&yaw);
printf("a:%f,%f,%f ",pitch,roll,yaw);
// MPU_Get_Accelerometer(&aacx,&aacy,&aacz); //得到加速度计数据
// MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz); //得到陀螺仪数据
delay_ms(20);
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_5);
delay_ms(20);
mpu_mpl_get_data(&pitch,&roll,&yaw);
printf("b:%f,%f,%f\r\n",pitch,roll,yaw);
// MPU_Get_Accelerometer(&aacx,&aacy,&aacz); //得到加速度计数据
// MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz); //得到陀螺仪数据
}
}
|
|