|
BlueMicrosystem2_V2.2.0\Drivers\BSP\Components\hts221
hts221.rar
(16.9 KB, 下载次数: 13)
- /**
- * [url=home.php?mod=space&uid=159083]@brief[/url] Read HTS221 temperature output registers, and calculate temperature.
- * @param *handle Device handle.
- * @param Pointer to the returned temperature value that must be divided by 10 to get the value in ['C].
- * @retval Error code [HTS221_OK, HTS221_ERROR].
- */
- HTS221_Error_et HTS221_Get_Temperature(void *handle, int16_t *value)
- {
- int16_t T0_out, T1_out, T_out, T0_degC_x8_u16, T1_degC_x8_u16;
- int16_t T0_degC, T1_degC;
- uint8_t buffer[4], tmp;
- float tmp_f;
- if(HTS221_ReadReg(handle, HTS221_T0_DEGC_X8, 2, buffer))
- return HTS221_ERROR;
- if(HTS221_ReadReg(handle, HTS221_T0_T1_DEGC_H2, 1, &tmp))
- return HTS221_ERROR;
- T0_degC_x8_u16 = (((uint16_t)(tmp & 0x03)) << 8) | ((uint16_t)buffer[0]);
- T1_degC_x8_u16 = (((uint16_t)(tmp & 0x0C)) << 6) | ((uint16_t)buffer[1]);
- T0_degC = T0_degC_x8_u16 >> 3;
- T1_degC = T1_degC_x8_u16 >> 3;
- if(HTS221_ReadReg(handle, HTS221_T0_OUT_L, 4, buffer))
- return HTS221_ERROR;
- T0_out = (((uint16_t)buffer[1]) << 8) | (uint16_t)buffer[0];
- T1_out = (((uint16_t)buffer[3]) << 8) | (uint16_t)buffer[2];
- if(HTS221_ReadReg(handle, HTS221_TEMP_OUT_L_REG, 2, buffer))
- return HTS221_ERROR;
- T_out = (((uint16_t)buffer[1]) << 8) | (uint16_t)buffer[0];
- tmp_f = (float)(T_out - T0_out) * (float)(T1_degC - T0_degC) / (float)(T1_out - T0_out) + T0_degC;
- tmp_f *= 10.0f;
- *value = ( int16_t )tmp_f;
- return HTS221_OK;
- }
复制代码
|
|