分享一个自己用STM32做的MPU9250调试经验,使用的单片机型号为:STM32F103ZET6
传感器简介
MPU9250包括三轴加速度计、三轴陀螺仪和三轴磁强计,以及动态运动处理器(DMP)。
编译环境
采用的编译工具为MDK
MPU9250支持IIC和SPI两种通信方式,本文采用的是IIC总线通信。
传感器初始化配置如下
{0x80, MPU9250_RA_PWR_MGMT_1} // Reset Device
{0x01, MPU9250_RA_PWR_MGMT_1} // Clock Source
{0x00, MPU9250_RA_PWR_MGMT_2} // Enable Acc & Gyro
{0x07, MPU9250_RA_CONFIG} //
{0x00, MPU9250_RA_GYRO_CONFIG} // +-250dps
{0x00, MPU9250_RA_ACCEL_CONFIG} // +-2G
{0x00, MPU9250_RA_ACCEL_CONFIG_2} // Set Acc Data Rates
{0x30, MPU9250_RA_INT_PIN_CFG} //
{0x40, MPU9250_RA_I2C_MST_CTRL} // I2C Speed 348 kHz
{0x20, MPU9250_RA_USER_CTRL} // Enable AUX
{0x8C, MPU9250_RA_I2C_SLV0_ADDR}
{0x00, MPU9250_RA_I2C_SLV0_REG}
{0x81, MPU9250_RA_I2C_SLV0_CTRL}
{0x01, MPU9250_RA_I2C_MST_DELAY_CTRL}
测试连通性代码
读取三轴加速度计和三轴陀螺仪MPU6500设备ID
MPU9250_readBytes(devAddr, MPU9250_RA_WHO_AM_I, 1, &DeviceID);
MPU6500设备ID为0x71
读取三轴磁强计AK8963设备ID
MPU9250_WriteReg(MPU9250_RA_I2C_SLV0_ADDR, 0x18); // Set AK8963 IIC address
MPU9250_WriteReg(MPU9250_RA_I2C_SLV0_REG, AK8963_WIA); // Set Write Reg
MPU9250_WriteReg(MPU9250_RA_I2C_SLV0_CTRL, 0x81); // Start Read
MPU9250_ReadReg(MPU9250_RA_EXT_SENS_DATA_00, &DeviceID); // Read Data
读取AK8963设备ID为0x00
可能的原因:
(1)缺少其它涉及到AK8963部分的代码配置
(2)传感器模块有问题(可能性较低)