OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5278|回复: 1

MPU6050数据读不出来时什么原因啊?模拟I2C库函数版的 ,运行后显示的7组数据都是67038

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
25
金钱
25
注册时间
2015-1-20
在线时间
0 小时
发表于 2015-1-20 17:10:02 | 显示全部楼层 |阅读模式
5金钱
下载到开发板后,运行指示灯一直闪烁说明程序再执行,但数据全部是67083不动,检查问题后是读取数据没读出来,是这三个程序中哪个程序处理问题???   void MPU6050_WriteI2C(u8 REG_Address,u8 REG_data)向I2C写入一个数据)        
                        u8 MPU6050_ReadI2C(u8 REG_Address)  (从I2C读一个字节数据)     
                        void MPU6050_RD_XYZ(MPU_TypeDef* Mympu)(读取三个轴的数据)
//**************************************
//向I2C写入一个数据
//**************************************
void MPU6050_WriteI2C(u8 REG_Address,u8 REG_data)
{
    IIC_Start();                   //????
    IIC_Send_Byte(SlaveAddress);   //??????+???
IIC_Wait_Ack();   
    IIC_Send_Byte(REG_Address);    //???????
IIC_Wait_Ack();     
    IIC_Send_Byte(REG_data);       //???????
IIC_Wait_Ack();     
    IIC_Stop();                    //??????
}
//**************************************
//从I2C读一个字节数据
//**************************************
u8 MPU6050_ReadI2C(u8 REG_Address)
{
u8 REG_data;
IIC_Start();                  //????
IIC_Send_Byte(SlaveAddress);  //??????+???
REG_data=IIC_Wait_Ack();   
IIC_Send_Byte(REG_Address);   //????????,?0??
REG_data=IIC_Wait_Ack();   
IIC_Start();                  //????
IIC_Send_Byte(SlaveAddress+1);//??????+???
REG_data=IIC_Wait_Ack();   
  REG_data=IIC_Read_Byte(0); //??????,?????,??NAK,???????
IIC_Stop();                  //????
return REG_data;
}
//初始化
void MPU6050_Init(void)
{

IIC_Init();//???IIC??
MPU6050_WriteI2C(PWR_MGMT_1, 0x00); //??????
MPU6050_WriteI2C(SMPLRT_DIV, 0x07);
MPU6050_WriteI2C(CONFIG, 0x06);
MPU6050_WriteI2C(GYRO_CONFIG, 0x18);
MPU6050_WriteI2C(ACCEL_CONFIG, 0x08); //Bit4 3 
//0  ± 2g     16384 ???
//1  ± 4g       8192
//2  ± 8g       4096
//3  ± 16g     2048
//0  ± 250 °/s 131  ???
//1  ± 500 °/s 65.5
//2  ± 1000°/s 32.8
//3  ± 2000°/s 16.4
}

//读取三个轴的数据
//x,y,z:??????????????????
void MPU6050_RD_XYZ(MPU_TypeDef* Mympu)
{
u8 buf[14];
u8 i;
IIC_Start();  
IIC_Send_Byte(SlaveAddress); //???????  
IIC_Wait_Ack();   
  IIC_Send_Byte(0x3B);   //???????(??????????0X3B)
IIC_Wait_Ack();     
  IIC_Start();     //????
IIC_Send_Byte(SlaveAddress+1); //???????
IIC_Wait_Ack();  
for(i=0;i<14;i++)
{
 if(i==13)buf=IIC_Read_Byte(0);//??????,?????,??NACK  
 else buf=IIC_Read_Byte(i); //??????,???,??ACK 
  }
  IIC_Stop(); //????????
Mympu->Ax=(short)(((u16)buf[0]<<8)+buf[1]); 
Mympu->Ay=(short)(((u16)buf[2]<<8)+buf[3]); 
Mympu->Az=(short)(((u16)buf[4]<<8)+buf[5]); 
Mympu->Tt=(short)(((u16)buf[6]<<8)+buf[7]);
Mympu->Gx=(short)(((u16)buf[8]<<8)+buf[9]); 
Mympu->Gy=(short)(((u16)buf[10]<<8)+buf[11]); 
Mympu->Gz=(short)(((u16)buf[12]<<8)+buf[13]); 
}
//初始化IIC   这里初始化有问题没? PB10 SCL PB11 SDA
void IIC_Init(void)
{     
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11;// ?? CLK ? SDA
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;   //????
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_11);
 
IIC_SCL=1;//???????
IIC_SDA=1;
}
其他I2C程序移植原子给的程序

终极版MPU6050.rar

3.87 MB, 下载次数: 67

最佳答案

查看完整内容[请看2#楼]

可以参考下我们F407开发板的MPU6050例程,
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165585
金钱
165585
注册时间
2010-12-1
在线时间
2119 小时
发表于 2015-1-20 17:10:03 | 显示全部楼层
可以参考下我们F407开发板的MPU6050例程,
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-10-15 10:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表