新手入门
- 积分
- 25
- 金钱
- 25
- 注册时间
- 2015-1-20
- 在线时间
- 0 小时
|
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程序移植原子给的程序
|
|