|
本帖最后由 恋芜 于 2015-6-17 20:00 编辑
主控是stm32f103c8t6,采用正点原子开发板提供的模拟IIC程序,uart1输出数据,希望能给正在调试mpu9250的同学提供一个参考
- void IIC_MPU9250_init(void)
- {
- IIC_Write_OneByte(MPU9250_I2C_ADDR,MPU9250_PWR_MGMT_1,0x00); //唤醒mpu9250
- IIC_Write_OneByte(MPU9250_I2C_ADDR,MPU9250_CONFIG,0x06); //低通滤波5hz
- IIC_Write_OneByte(MPU9250_I2C_ADDR,MPU9250_GYRO_CONFIG,0x18); //不自检,2000deg/s
- IIC_Write_OneByte(MPU9250_I2C_ADDR,MPU9250_ACCEL_CONFIG,0x00); //(0x00 +-2g;) ( 0x08 +-4g;) (0x10 +-8g;) (0x18 +-16g)
- IIC_Write_OneByte(MPU9250_I2C_ADDR,MPU9250_INT_PIN_CFG,0x02);
- IIC_Write_OneByte(MPU9250_I2C_ADDR,MPU9250_USER_CTRL,0x00); //使能I2C
-
- IIC_Write_OneByte(AK8963_I2C_ADDR,AK8963_CNTL1,0x10);
- delay_ms(50);
- IIC_Write_OneByte(AK8963_I2C_ADDR,AK8963_CNTL1,0x11); //单测量模式,16位精度
- }
- void GetMPU9250Data(void)
- {
- s16 buf[20];
- u8 i;
- /*------------------------------------------------------------------------------------------------------------------------------------*/
- //读取加速度、陀螺仪
- IIC_Start();
- IIC_Send_Byte(MPU9250_I2C_ADDR); //发送地址设备
- IIC_Wait_Ack();
- IIC_Send_Byte(MPU9250_ACCEL_XOUT_H); //发送寄存器地址
- IIC_Wait_Ack();
- IIC_Start();
- IIC_Send_Byte(MPU9250_I2C_ADDR+1);//发送设备地址+读信号
- IIC_Wait_Ack();
- for(i=0;i<14;i++)
- {
- if(i==13)buf[i]=IIC_Read_Byte(0);//读一个字节+不继续再读,发送NACK
- else buf[i]=IIC_Read_Byte(1); //读一个字节+继续读,发送ACK
- }
- IIC_Stop();
-
- /*-----------------------------------------------------------------------------------------------------------------------------------*/
- //读取地磁传感器
- IIC_Start();
- IIC_Send_Byte(AK8963_I2C_ADDR); //发送地址设备
- IIC_Wait_Ack();
- IIC_Send_Byte(AK8963_HXL); //发送寄存器地址
- IIC_Wait_Ack();
- IIC_Start();
- IIC_Send_Byte(AK8963_I2C_ADDR+1);//发送地址设备+读
- IIC_Wait_Ack();
- for(i=14;i<20;i++)
- {
- if(i==19)buf[i]=IIC_Read_Byte(0);//读一个字节+不继续再读,发送NACK
- else buf[i]=IIC_Read_Byte(1); //读一个字节+继续读,发送ACK
- }
- IIC_Stop();
-
- IIC_Write_OneByte(AK8963_I2C_ADDR,AK8963_CNTL1,0x11);//每读一次,ak8963自动进入powerdown模式,这里需要重新设定单测量模式
- /*-------------------------------------------------------------------------------------------------------------------------------------*/
- //加速度
- mpu9250.acc_x=(buf[0]<<8)+buf[1];
- mpu9250.acc_y=(buf[2]<<8)+buf[3];
- mpu9250.acc_z=(buf[4]<<8)+buf[5];
- //温度
- mpu9250.temp =(buf[6]<<8)+buf[7];
- //陀螺仪
- mpu9250.gyro_x=(buf[8]<<8)+buf[9];
- mpu9250.gyro_y=(buf[10]<<8)+buf[11];
- mpu9250.gyro_z=(buf[12]<<8)+buf[13];
- //地磁
- mpu9250.mag_x=(buf[15]<<8)+buf[14];
- mpu9250.mag_y=(buf[17]<<8)+buf[16];
- mpu9250.mag_z=(buf[19]<<8)+buf[18];
- }
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
该献的血还是要献的。你不献他不献。难道让我去献? --- 出自坛友:lovejp1981
|