STEVAL-MKI141V2是具备有STM HTS221 MEMS 温溼度感应器的开发板,本文示范如何利用STM32 MCU和STEVAL-MKI141V2使用I2C通讯取得目前环境的温溼度。本文范例使用STM32L053C8T6,主要是具备有COM-SEG LCD控制和超低待机功耗,适合长时间待机使用。
首先利用CubeMX,开通I2C作为和HTS221 EVB通讯使用,参数不须特意更改。
HTS221_ReadID();if (SensorID != 0xBC){
// Error Handler
}
首先读取sensor ID,确保I2C和sensor已经可以通讯。
HTS221_Power_On();
通知sensor离开power down,转换到active模式。
HTS221_Calibration();
读取sensor的工厂校正值,稍后在做温溼度读取时会需要用到这些参数。
HTS221_Config();
设定sensor其他功能,如DRDY讯号输出和转换频率等参数,到这边准备工作基本上就已经完成了。
下面是读取湿度的范例。
HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDRESS, HTS221_HUMIDITY_OUT_L_ADDR | INCREMENTING_RW, I2C_MEMADD_SIZE_8BIT, tempReg, 2, I2C_TIMEOUT);
这边读取湿度资料的暂存器。
H_T_out = (int16_t)((((uint16_t)tempReg[1]) << 8) | (uint16_t)tempReg[0]);
H_rh = ((float)(H_T_out - H0_T0_out)) / (H1_T0_out - H0_T0_out) * (H1_rh - H0_rh) + H0_rh;
这边是根据校正值后算出实际湿度。
下面是读取温度的范例。
HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDRESS, HTS221_TEMP_OUT_L_ADDR | INCREMENTING_RW, I2C_MEMADD_SIZE_8BIT, tempReg, 2, I2C_TIMEOUT);
这边是读取温度的暂存器。
T_out = (int16_t)((((uint16_t)tempReg[1]) << 8) | (uint16_t)tempReg[0]);
T_degC = ((float)(T_out - T0_out)) / (T1_out - T0_out) * (T1_degC - T0_degC) + T0_degC;
这边是根据校正值后算出实际温度。