初级会员
- 积分
- 60
- 金钱
- 60
- 注册时间
- 2019-6-29
- 在线时间
- 16 小时
|
我用模拟I2C来读取多个6050的数据,第一张图片是读取4个6050数据,还是准确的,但是挂载了5个以后数据就完全一样了,我换了好多个GPIO口,都是这种情况,不知道有没有大佬做过类似的东西,能不能给点提示啊?真的感激不尽。下面是我的代码,用的是官方的DMP库
#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);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE); //使能GPIOF时钟
GPIO_InitTypeDef GPIO_InitStructure;
//配置GPIOF0
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //PF.0
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化GPIOF.0
//配置GPIOA1
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //PA.1
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.1
//配置GPIOF2
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PF.2
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化GPIOF.2
//配置GPIOF3
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //PF.3
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化GPIOF.3
//配置GPIOF4
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //PF.4
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化GPIOF.4
//配置GPIOF5
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //PF.5
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化GPIOF.5
//配置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
//配置GPIOA7
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //PA.7
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.7
//配置GPIOA8
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //PA.8
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.8
LED_Init();
//GPIOF0初始化
GPIO_ResetBits(GPIOF,GPIO_Pin_0);
GPIO_SetBits(GPIOA,GPIO_Pin_5);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOF,GPIO_Pin_2);
GPIO_SetBits(GPIOF,GPIO_Pin_3);
GPIO_SetBits(GPIOF,GPIO_Pin_4);
GPIO_SetBits(GPIOF,GPIO_Pin_5);
delay_ms(5);
while(mpu_dmp_init())
{
delay_ms(30);
LED=1;
}
//GPIOA1初始化
GPIO_ResetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOA,GPIO_Pin_5);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_SetBits(GPIOF,GPIO_Pin_0);
GPIO_SetBits(GPIOF,GPIO_Pin_2);
GPIO_SetBits(GPIOF,GPIO_Pin_3);
GPIO_SetBits(GPIOF,GPIO_Pin_4);
GPIO_SetBits(GPIOF,GPIO_Pin_5);
delay_ms(5);
mpu_dmp_init();
delay_ms(30);
//GPIOF2初始化
GPIO_ResetBits(GPIOF,GPIO_Pin_2);
GPIO_SetBits(GPIOA,GPIO_Pin_5);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_SetBits(GPIOF,GPIO_Pin_0);
GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOF,GPIO_Pin_3);
GPIO_SetBits(GPIOF,GPIO_Pin_4);
GPIO_SetBits(GPIOF,GPIO_Pin_5);
delay_ms(5);
mpu_dmp_init();
delay_ms(30);
//GPIOF3初始化
GPIO_ResetBits(GPIOF,GPIO_Pin_3);
GPIO_SetBits(GPIOA,GPIO_Pin_5);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_SetBits(GPIOF,GPIO_Pin_0);
GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOF,GPIO_Pin_2);
GPIO_SetBits(GPIOF,GPIO_Pin_4);
GPIO_SetBits(GPIOF,GPIO_Pin_5);
delay_ms(5);
mpu_dmp_init();
delay_ms(30);
//GPIOF4初始化
GPIO_ResetBits(GPIOF,GPIO_Pin_4);
GPIO_SetBits(GPIOA,GPIO_Pin_5);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_SetBits(GPIOF,GPIO_Pin_0);
GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOF,GPIO_Pin_2);
GPIO_SetBits(GPIOF,GPIO_Pin_3);
GPIO_SetBits(GPIOF,GPIO_Pin_5);
delay_ms(5);
mpu_dmp_init();
delay_ms(30);
//GPIOF5初始化
GPIO_ResetBits(GPIOF,GPIO_Pin_5);
GPIO_SetBits(GPIOA,GPIO_Pin_5);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_SetBits(GPIOF,GPIO_Pin_0);
GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOF,GPIO_Pin_2);
GPIO_SetBits(GPIOF,GPIO_Pin_3);
GPIO_SetBits(GPIOF,GPIO_Pin_4);
delay_ms(5);
mpu_dmp_init();
delay_ms(30);
//GPIOA5初始化
GPIO_ResetBits(GPIOA,GPIO_Pin_5);
GPIO_SetBits(GPIOF,GPIO_Pin_0);
GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOF,GPIO_Pin_2);
GPIO_SetBits(GPIOF,GPIO_Pin_3);
GPIO_SetBits(GPIOF,GPIO_Pin_4);
GPIO_SetBits(GPIOF,GPIO_Pin_5);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
delay_ms(5);
mpu_dmp_init();
delay_ms(30);
//GPIOA6初始化
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOF,GPIO_Pin_0);
GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOF,GPIO_Pin_2);
GPIO_SetBits(GPIOF,GPIO_Pin_3);
GPIO_SetBits(GPIOF,GPIO_Pin_4);
GPIO_SetBits(GPIOF,GPIO_Pin_5);
GPIO_SetBits(GPIOA,GPIO_Pin_5);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
delay_ms(5);
mpu_dmp_init();
delay_ms(30);
//GPIOA8初始化
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
GPIO_SetBits(GPIOF,GPIO_Pin_0);
GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOF,GPIO_Pin_2);
GPIO_SetBits(GPIOF,GPIO_Pin_3);
GPIO_SetBits(GPIOF,GPIO_Pin_4);
GPIO_SetBits(GPIOF,GPIO_Pin_5);
GPIO_SetBits(GPIOA,GPIO_Pin_5);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
delay_ms(5);
mpu_dmp_init();
delay_ms(30);
//GPIOA7初始化
GPIO_ResetBits(GPIOA,GPIO_Pin_7);
GPIO_SetBits(GPIOF,GPIO_Pin_0);
GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOF,GPIO_Pin_2);
GPIO_SetBits(GPIOF,GPIO_Pin_3);
GPIO_SetBits(GPIOF,GPIO_Pin_4);
GPIO_SetBits(GPIOF,GPIO_Pin_5);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_5);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
delay_ms(5);
while(mpu_dmp_init())
{
delay_ms(30);
LED=1;
}
while(1)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_5);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_SetBits(GPIOF,GPIO_Pin_0);
GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOF,GPIO_Pin_2);
GPIO_SetBits(GPIOF,GPIO_Pin_3);
GPIO_SetBits(GPIOF,GPIO_Pin_4);
GPIO_SetBits(GPIOF,GPIO_Pin_5);
delay_ms(3);
mpu_dmp_get_data(&pitch,&roll,&yaw);
printf("a:%.2f,%.2f,%.2f ",pitch,roll,yaw);
mpu_reset_fifo();
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_5);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_SetBits(GPIOF,GPIO_Pin_0);
GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOF,GPIO_Pin_2);
GPIO_SetBits(GPIOF,GPIO_Pin_3);
GPIO_SetBits(GPIOF,GPIO_Pin_4);
GPIO_SetBits(GPIOF,GPIO_Pin_5);
delay_ms(3);
mpu_dmp_get_data(&pitch,&roll,&yaw);
printf("b:%.2f,%.2f,%.2f ",pitch,roll,yaw);
mpu_reset_fifo();
GPIO_ResetBits(GPIOA,GPIO_Pin_7);
GPIO_SetBits(GPIOA,GPIO_Pin_5);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_SetBits(GPIOF,GPIO_Pin_0);
GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOF,GPIO_Pin_2);
GPIO_SetBits(GPIOF,GPIO_Pin_3);
GPIO_SetBits(GPIOF,GPIO_Pin_4);
GPIO_SetBits(GPIOF,GPIO_Pin_5);
delay_ms(5);
mpu_dmp_get_data(&pitch,&roll,&yaw);
printf("c:%.2f,%.2f,%.2f ",pitch,roll,yaw);
mpu_reset_fifo();
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
GPIO_SetBits(GPIOA,GPIO_Pin_5);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_SetBits(GPIOF,GPIO_Pin_0);
GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOF,GPIO_Pin_2);
GPIO_SetBits(GPIOF,GPIO_Pin_3);
GPIO_SetBits(GPIOF,GPIO_Pin_4);
GPIO_SetBits(GPIOF,GPIO_Pin_5);
delay_ms(5);
mpu_dmp_get_data(&pitch,&roll,&yaw);
printf("d:%.2f,%.2f,%.2f ",pitch,roll,yaw);
mpu_reset_fifo();
// GPIO_ResetBits(GPIOF,GPIO_Pin_0);
// GPIO_SetBits(GPIOA,GPIO_Pin_5);
// GPIO_SetBits(GPIOA,GPIO_Pin_6);
// GPIO_SetBits(GPIOA,GPIO_Pin_7);
// GPIO_SetBits(GPIOF,GPIO_Pin_1);
// GPIO_SetBits(GPIOF,GPIO_Pin_2);
// GPIO_SetBits(GPIOF,GPIO_Pin_3);
// GPIO_SetBits(GPIOF,GPIO_Pin_4);
// GPIO_SetBits(GPIOF,GPIO_Pin_5);
// mpu_dmp_get_data(&pitch,&roll,&yaw);
// printf("d:%.2f,%.2f,%.2f ",pitch,roll,yaw);
GPIO_ResetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOA,GPIO_Pin_5);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_SetBits(GPIOF,GPIO_Pin_0);
GPIO_SetBits(GPIOF,GPIO_Pin_2);
GPIO_SetBits(GPIOF,GPIO_Pin_3);
GPIO_SetBits(GPIOF,GPIO_Pin_4);
GPIO_SetBits(GPIOF,GPIO_Pin_5);
mpu_dmp_get_data(&pitch,&roll,&yaw);
printf("e:%.2f,%.2f,%.2f \r\n",pitch,roll,yaw);
mpu_reset_fifo();
//
// GPIO_ResetBits(GPIOF,GPIO_Pin_2);
// GPIO_SetBits(GPIOA,GPIO_Pin_5);
// GPIO_SetBits(GPIOA,GPIO_Pin_6);
// GPIO_SetBits(GPIOA,GPIO_Pin_7);
// GPIO_SetBits(GPIOF,GPIO_Pin_0);
// GPIO_SetBits(GPIOF,GPIO_Pin_1);
// GPIO_SetBits(GPIOF,GPIO_Pin_3);
// GPIO_SetBits(GPIOF,GPIO_Pin_4);
// GPIO_SetBits(GPIOF,GPIO_Pin_5);
// mpu_dmp_get_data(&pitch,&roll,&yaw);
// printf("f:%.2f,%.2f,%.2f\r\n",pitch,roll,yaw);
//
// GPIO_ResetBits(GPIOF,GPIO_Pin_3);
// GPIO_SetBits(GPIOA,GPIO_Pin_5);
// GPIO_SetBits(GPIOA,GPIO_Pin_6);
// GPIO_SetBits(GPIOA,GPIO_Pin_7);
// GPIO_SetBits(GPIOF,GPIO_Pin_0);
// GPIO_SetBits(GPIOF,GPIO_Pin_1);
// GPIO_SetBits(GPIOF,GPIO_Pin_2);
// GPIO_SetBits(GPIOF,GPIO_Pin_4);
// GPIO_SetBits(GPIOF,GPIO_Pin_5);
// mpu_dmp_get_data(&pitch,&roll,&yaw);
// printf("g:%.2f,%.2f,%.2f ",pitch,roll,yaw);
//
// GPIO_ResetBits(GPIOF,GPIO_Pin_4);
// GPIO_SetBits(GPIOA,GPIO_Pin_5);
// GPIO_SetBits(GPIOA,GPIO_Pin_6);
// GPIO_SetBits(GPIOA,GPIO_Pin_7);
// GPIO_SetBits(GPIOF,GPIO_Pin_0);
// GPIO_SetBits(GPIOF,GPIO_Pin_1);
// GPIO_SetBits(GPIOF,GPIO_Pin_2);
// GPIO_SetBits(GPIOF,GPIO_Pin_3);
// GPIO_SetBits(GPIOF,GPIO_Pin_5);
// mpu_dmp_get_data(&pitch,&roll,&yaw);
// printf("h:%.2f,%.2f,%.2f ",pitch,roll,yaw);
//
// GPIO_ResetBits(GPIOF,GPIO_Pin_5);
// GPIO_SetBits(GPIOA,GPIO_Pin_5);
// GPIO_SetBits(GPIOA,GPIO_Pin_6);
// GPIO_SetBits(GPIOA,GPIO_Pin_7);
// GPIO_SetBits(GPIOF,GPIO_Pin_0);
// GPIO_SetBits(GPIOF,GPIO_Pin_1);
// GPIO_SetBits(GPIOF,GPIO_Pin_2);
// GPIO_SetBits(GPIOF,GPIO_Pin_3);
// GPIO_SetBits(GPIOF,GPIO_Pin_4);
// mpu_dmp_get_data(&pitch,&roll,&yaw);
// printf("i:%.2f,%.2f,%.2f\r\n",pitch,roll,yaw);
}
}
|
|