bmp280读出数据不变

最近在弄无人机,用到了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;
}

bmp280初始化步骤:

1. 读补偿数据

2. 复位BMP280,数据全部清零(这步很关键,必须放在前面,不然后面设置无效)

3. 再设置模式、滤波器等等

 

详细的步骤可以去官方文档。

 

你可能感兴趣的:(stm32)