1. 项目概述
在嵌入式系统开发中,环境参数监测是一个基础但至关重要的功能模块。SHT30-DIS-B2.5KS作为Sensirion公司推出的新一代数字温湿度传感器,凭借±2%RH的湿度精度和±0.2℃的温度精度,在工业控制、智能家居等领域有着广泛应用。本项目基于STM32F4系列MCU和HAL库,实现了该传感器的完整驱动方案。
选择STM32F4XX平台主要考虑其丰富的外设资源和较高的运算性能,能够轻松应对传感器数据处理需求。而HAL库作为ST官方提供的硬件抽象层,大大简化了底层寄存器操作,让开发者可以更专注于业务逻辑实现。这套组合在实际项目中验证稳定,特别适合需要快速开发的场景。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件设计与接口配置
2.1 硬件连接方案
SHT30支持I2C和单线两种通信方式,本项目采用标准的I2C接口连接。具体硬件连接如下:
- 电源引脚:VDD接3.3V,GND接地。特别注意传感器工作电压范围为2.4V-5.5V,直接使用STM32的3.3V电源即可
- I2C接口:SCL接PB6,SDA接PB7(对应I2C1外设)
- ALERT引脚:可悬空或连接至GPIO用于中断检测
- ADDR引脚:接地选择I2C地址0x44,接高电平选择0x45
重要提示:I2C总线必须接上拉电阻,典型值4.7kΩ。若通信不稳定,可适当减小阻值至2.2kΩ。
2.2 STM32CubeMX配置
使用STM32CubeMX工具进行初始化配置:
- 在Pinout界面启用I2C1外设
- 配置I2C参数:
- Timing参数:选择Standard Mode(100kHz)
- 不启用DMA(单次传输数据量小)
- 生成代码时选择HAL库支持
3. 软件驱动实现
3.1 基础驱动函数
首先定义传感器相关常量和结构体:
c复制#define SHT30_ADDR 0x44 << 1 // 7位地址左移1位
#define SHT30_MEAS_HIGHREP 0x2400 // 高精度测量命令
typedef struct {
float temperature;
float humidity;
} SHT30_Data;
实现I2C通信基础函数:
c复制HAL_StatusTypeDef SHT30_WriteCmd(I2C_HandleTypeDef *hi2c, uint16_t cmd) {
uint8_t buf[2];
buf[0] = cmd >> 8;
buf[1] = cmd & 0xFF;
return HAL_I2C_Master_Transmit(hi2c, SHT30_ADDR, buf, 2, HAL_MAX_DELAY);
}
HAL_StatusTypeDef SHT30_ReadData(I2C_HandleTypeDef *hi2c, uint8_t *data) {
return HAL_I2C_Master_Receive(hi2c, SHT30_ADDR, data, 6, HAL_MAX_DELAY);
}
3.2 数据采集与处理
实现完整的温湿度读取函数:
c复制HAL_StatusTypeDef SHT30_GetValues(I2C_HandleTypeDef *hi2c, SHT30_Data *result) {
uint8_t data[6];
HAL_StatusTypeDef ret;
