恩,查出来问题出在9250的驱动代码上,但还是不知道具体在哪?
[mw_shl_code=c,true]#include "mpu9250.h"
#include "iic.h"
#include "delay.h"
#include "usart.h"
#include "math.h"
//初始化MPU9250****************************************
//OffsetDPS= X_OFFS_USR * 4 / 2^FS_SEL / Gyro_Sensitivity Nominal FS_SEL = 0
//
//
//*****************************************************
void MPU9250_Init(void)
{
/*
Single_Write(GYRO_ADDRESS,PWR_M, 0x80); //
Single_Write(GYRO_ADDRESS,SMPL, 0x07); //
Single_Write(GYRO_ADDRESS,DLPF, 0x1E); //?000?
Single_Write(GYRO_ADDRESS,INT_C, 0x00 ); //
Single_Write(GYRO_ADDRESS,PWR_M, 0x00); //
*/
IIC_Single_Write(GYRO_ADDRESS,PWR_MGMT_1, 0x00); //??????
IIC_Single_Write(GYRO_ADDRESS,SMPLRT_DIV, 0x07);
IIC_Single_Write(GYRO_ADDRESS,CONFIG, 0x06);
IIC_Single_Write(GYRO_ADDRESS,GYRO_CONFIG, 0x18);
IIC_Single_Write(GYRO_ADDRESS,ACCEL_CONFIG, 0x01);
//----------------
// Single_Write(GYRO_ADDRESS,0x6A,0x00);//close Master Mode
}
//*****************************************************
short Connect_HL(unsigned char SlaveAddress,unsigned char REG_Address) //L=H+1
{
u16 H,L;
H=IIC_Single_Read(SlaveAddress,REG_Address);
L=IIC_Single_Read(SlaveAddress,REG_Address+1);
return H<<8|L;
}
short Connect_LH_MAG(unsigned char SlaveAddress,unsigned char REG_Address) //地址规律和另外两个不同H=L+1
{
u16 H,L;
IIC_Single_Write(GYRO_ADDRESS,0x37,0x02);//turn on Bypass Mode
delay_ms(10);
IIC_Single_Write(MAG_ADDRESS,0x0A,0x01);
delay_ms(10);
L=IIC_Single_Read(SlaveAddress,REG_Address);
H=IIC_Single_Read(SlaveAddress,REG_Address+1);
return H<<8|L;
}
//*****************************************************
float MPU9250_ACCEL_X(void)
{
return Connect_HL(ACCEL_ADDRESS,ACCEL_XOUT_H)/ACCEL_Sensi-2;
}
float MPU9250_ACCEL_Y(void)
{
return Connect_HL(ACCEL_ADDRESS,ACCEL_YOUT_H)/ACCEL_Sensi-2;
}
float MPU9250_ACCEL_Z(void)
{
return Connect_HL(ACCEL_ADDRESS,ACCEL_ZOUT_H)/ACCEL_Sensi-2;
}
//*****************************************************
float MPU9250_GYRO_X(void)
{
return Connect_HL(GYRO_ADDRESS,GYRO_XOUT_H)/GYRO_Sensi+0.670732;
}
float MPU9250_GYRO_Y(void)
{
return Connect_HL(GYRO_ADDRESS,GYRO_YOUT_H)/GYRO_Sensi-0.914634;
}
float MPU9250_GYRO_Z(void)
{
return Connect_HL(GYRO_ADDRESS,GYRO_ZOUT_H)/GYRO_Sensi;
}
//*****************************************************
float MPU9250_MAG_X(void) //地址规律和另外两个不同H=L+1
{
return Connect_LH_MAG(MAG_ADDRESS,MAG_XOUT_L)/MAG_Sensi;
}
float MPU9250_MAG_Y(void)
{
return Connect_LH_MAG(MAG_ADDRESS,MAG_YOUT_L)/MAG_Sensi;
}
float MPU9250_MAG_Z(void)
{
return Connect_LH_MAG(MAG_ADDRESS,MAG_ZOUT_L)/MAG_Sensi;
}
//*****************************************************
void USART_SHOW_MPU9250(void)
{
printf("AX%.6f\t",MPU9250_ACCEL_X()); //.2表示小数点后两位 f:float \t制表符
printf("AY%.6f\t",MPU9250_ACCEL_Y());
printf("AZ%.6f\t",MPU9250_ACCEL_Z());
printf("GX%.6f\t",MPU9250_GYRO_X());
printf("GY%.6f\t",MPU9250_GYRO_Y());
printf("GZ%.6f\t",MPU9250_GYRO_Z());
printf("MX%.6f\t",MPU9250_MAG_X());
printf("MY%.6f\t",MPU9250_MAG_Y());
printf("MZ%.6f\n",MPU9250_MAG_Z());
}
//*****************************************************
float AE_ANGLE_byACCEL(void) //AE-->accelerat expect(y)
{
float temp=0;
if(0<MPU9250_ACCEL_Y()&& 0<MPU9250_ACCEL_Z()) //"<"优先级高于"&&"
{
temp=3.1415926*0.5+atan(MPU9250_ACCEL_Y()/MPU9250_ACCEL_Z());
}
else if (0<MPU9250_ACCEL_Y()&& 0>MPU9250_ACCEL_Z())
{
temp=3.1415926*1.5+atan(MPU9250_ACCEL_Y()/MPU9250_ACCEL_Z());
}
else if (0>MPU9250_ACCEL_Y()&& 0<MPU9250_ACCEL_Z())
{
temp=3.1415926*0.5+atan(MPU9250_ACCEL_Y()/MPU9250_ACCEL_Z());
}
else
{
temp=3.1415926*1.5+atan(MPU9250_ACCEL_Y()/MPU9250_ACCEL_Z());
}
return temp;
}
//*****************************************************
//float AE_ANGLE_byACCEL(void) //AE-->accelerat expect(y)
//{
// float temp=0;
// temp=+atan(MPU9250_ACCEL_Y()/MPU9250_ACCEL_Z());
// return temp*180/3.1415926;
//}
//*****************************************************
void USART_SHOW_ANGLE_byACCEL(void)
{
printf("ANGLE_byACCEL%.2f\t\n",AE_ANGLE_byACCEL()); //.2表示小数点后两位 f:float \t制表符
}
//*****************************************************
[/mw_shl_code]
|