最近用了无人机。MPU9250 bmp280,在读取bmp280传感器数据时,读取的数据没有变化。
状态寄存器为0,表明数据转换尚未完成。读取温度寄存器和气压寄存器时,固定值没有变化(寄存器值为0或128)。
网上搜索,有人被这个问题卡了半年...吓得我
幸运的是,我花了十多分钟才发现问题。这是一个初始化问题。参考本文:https://blog.csdn.net/liaokesen168/article/details/50930834
复位寄存器地址 BMP280_RST_REG :0xE0
uint8_t Bmp280Init(void)// { if(I2cReadByte(BMP280_I2C_ADDR, BMP280_CHIP_ID) == BMP280_DEFAULT_CHIP_ID) /* 读取bmp280 ID*/ { HAL_I2C_Mem_Read(&hi2c1, BMP280_I2C_ADDR<<1, BMP280_TEMPERATURE_CALIB_DIG_T1_LSB_REG, I2C_MEMADD_SIZE_8BIT, (uint8_t *)&bmp280Cal, 24, 1000); I2cWriteByte(BMP280_I2C_ADDR, BMP280_RST_REG, 0xB6); ///数据全部清零 I2cWriteByte(BMP280_I2C_ADDR, BMP280_CTRL_MEAS_REG, BMP280_MODE); I2cWriteByte(BMP280_I2C_ADDR, BMP280_CONFIG_REG, 5<<2); /*配置IIR滤波*/ return 0; } return 1; }
bmp初始化步骤280:
1. 读补偿数据
2. 复位BMP280,数据全部清零(这一步很重要,必须放在前面,否则后面设置无效)
3. 再设置模式、滤波器等
详细步骤可到官方文档。