大家好!
我正在尝试使用几个霍尼韦尔传感器测量压力。 我有3个 i2c 压力传感器、它们都具有相同的地址。 该器件有一个多路复用器、允许与所有3个传感器进行通信。 每次打印压力数据时、我都会得到一个随机的十六进制值。 转换值时、返回值不是预期值。 返回的十六 进制值为十进制的0x8523 = 34083。
此函数从压力传感器读取原始数据并返回原始压力值
uint32_t i2cReadHWPressureTemp(uint8_t channel) { uint8_t c_cmd_data[1] = {channel}; *((uint32_t*)pressure_data) = 0xFFFFFFFFU; I2C_Master_WriteReg(0xF0, 0x01, c_cmd_data, 1); I2C_Master_ReadData(0x28, pressure_data, 4); return *((uint32_t*)pressure_data);
这是从函数读取的代码部分。 它正在将原始数据转换为压力和温度数据。
static uint8_t Press[PRESSURE_NUM_BYTES] = {0xFFU, 0xFFU, 0xFFU, 0xFFU}; uint32_t bridge_data; uint32_t pressure; uint32_t temp_data; uint32_t temperature; case sensors: *((uint32_t*)Press) = i2cReadHWPressureTemp(4); bridge_data = (((uint32_t)Press[0] & ~STATUS_MASK) << 8) | (uint32_t)Press[1]; pressure = ((bridge_data - OUTPUT_MIN)*(PRESSURE_MAX_001BA - PRESSURE_MIN_001BA))/ (OUTPUT_MAX - OUTPUT_MIN) + PRESSURE_MIN_001BA; temp_data = ((uint32_t)(Press[2]) << 8) | ((uint32_t)(Press[3] >> 5)); temperature = ((temp_data*0.0977) - 50); SendSignedHexNumStr(pressure, 4, false); break;
我的问题是 BRIDGE_DATA 始终显示为0、这意味着按下列表[PRESURE_NUM_BYTE] 是空列表、即使它由函数 i2cReadHWPressureTemp 填充 。 我需要帮助以确定如何填写列表。
我希望这一点很清楚。
谢谢你