2. 配置 SHT30 传感器
以下代码展示如何配置和读取 SHT30 传感器的数据。
c
复制代码
#include "stm32f0xx_hal.h"
/* I2C 句柄 */
extern I2C_HandleTypeDef hi2c1;
/* SHT30 设备地址 */
#define SHT30_ADDR 0x44 << 1 // SHT30 I2C 地址(Shift 1 位)
/* 读取 SHT30 温湿度数据 */
HAL_StatusTypeDef SHT30_ReadTemperatureHumidity(float* temperature, float* humidity)
{
uint8_t data[6];
HAL_StatusTypeDef status;
// 请求数据(读取温湿度)
uint8_t command[2] = {0x2C, 0x06}; // 命令:测量温湿度
status = HAL_I2C_Master_Transmit(&hi2c1, SHT30_ADDR, command, 2, HAL_MAX_DELAY);
if (status != HAL_OK) return status;
// 延时等待数据准备好
HAL_Delay(50);
// 读取 6 字节数据(温度和湿度数据)
status = HAL_I2C_Master_Receive(&hi2c1, SHT30_ADDR, data, 6, HAL_MAX_DELAY);
if (status != HAL_OK) return status;
// 解析温湿度数据
uint16_t raw_temperature = (data[0] << 8) | data[1];
uint16_t raw_humidity = (data[3] << 8) | data[4];
// 温度转换公式
*temperature = -45 + (175 * (float)raw_temperature / 65535);
// 湿度转换公式
*humidity = 100 * (float)raw_humidity / 65535;
return HAL_OK;
}
|