这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【STEVAL-STWINKT1B】:结合STMcubeMX软件读取HTS221

共2条 1/1 1 跳转至

【STEVAL-STWINKT1B】:结合STMcubeMX软件读取HTS221温湿度

高工
2026-03-29 08:27:49     打赏

一:HTS221温湿度基础知识

    HTS221是意法半导体推出的一款超紧凑型数字温湿度传感器,它集成了16位ADC和数字接口,能直接将物理信号转换为数字量输出

    HTS221是一款超小型的相对湿度和温度传感器。它包含一个传感元件以及一个混合信号专用集成电路(ASIC),能够通过数字串行接口提供测量信息。

    传感元件由一种能够检测相对湿度变化的聚合物介电平面电容器结构组成,并采用专用的ST工艺制造。

    HTS221提供小型顶部开孔的贴片网格阵列(HLGA)封装,保证在-40°C至+120°C温度范围内工作。

二:器件的原理图:

03-2 HTS221 原理图.png

    可见,开发板上面使用的是IIC的通讯方式,模块的地址为:0xBF 模块的通讯的时许图如下所示:

03-1 IIC时序图.png

硬件连接如下所示:

    IIC2-SDA <----------> PF0

    IIC2-SCL  <----------> PF1

三:STM32 cube MX软件配置:

03-3 cube MX配置图.png

四:软件实现过程:

4.1:芯片初始化及配置过程:

首先,你需要对传感器进行初始化和配置。

    硬件连接:将传感器的 SCL 和 SDA 引脚连接到MCU(微控制器)对应的I2C引脚,并确保总线通过电阻上拉。同时,将传感器的 CS 引脚拉高(连接到 VDD)以启用I2C模式。器件地址通常是 0x5F 或 0xBE(7位或8位模式)。

    软件初始化:通过I2C向传感器写入配置,通常是将 CTRL_REG1 (地址 0x20) 寄存器的值设为 0x84。此举用于开启传感器并将输出数据速率(ODR)设置为1 Hz。

    等待稳定:初始化后,建议延时几十毫秒,等待传感器内部电路稳定。

4.2:读取原始数据:

在轮询模式下,读取数据非常简单,无需手动触发采集。你只需不断从特定的寄存器中读取原始数据即可。

温度数据:连续读取 TEMP_OUT_L (地址 0x2A) 和 TEMP_OUT_H (地址 0x2B) 寄存器,得到16位的温度原始值(低字节在前)。

湿度数据:连续读取 HUMIDITY_OUT_L (地址 0x28) 和 HUMIDITY_OUT_H (地址 0x29) 寄存器,得到16位的湿度原始值(低字节在前)。

4.3:数据处理过程:

从寄存器读出的16位原始数据需要经过线性转换才能得到真实的温湿度值。

转换公式为:

  • 温度 (°C) = (TEMP_OUT_raw / 10.0)

  • 湿度 (%RH) = (HUMIDITY_OUT_raw / 10.0)

     说明:上述公式假设传感器已经过工厂校准,是最简化的转换方法。更精确的转换需从寄存器 0x30 - 0x37 读取校准系数,再进行线性插值计算.

主要函数代码如下所示:

#include "HTS221.h" // 假设包含寄存器地址和器件地址的定义

void HTS221_Init(void)
{
    uint8_t data = 0x84; // 1000 0100: 启动传感器,ODR=1Hz
    HAL_I2C_Mem_Write(&hi2c1, HTS221_ADDR, 0x20, I2C_MEMADD_SIZE_8BIT, &data, 1, 0x10);
}

void HTS221_Get_Temperature(int16_t *temperature)
{
    uint8_t buf[2];
    // 读取温度原始值(低字节在前)
    HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR, 0x2A, I2C_MEMADD_SIZE_8BIT, buf, 2, 0x10);
    // 合并为16位整数
    *temperature = (int16_t)((uint16_t)buf[1] << 8 | buf[0]);
}

void HTS221_Get_Humidity(int16_t *humidity)
{
    uint8_t buf[2];
    // 读取湿度原始值(低字节在前)
    HAL_I2C_Mem_Read(&hi2c1, HTS221_ADDR, 0x28, I2C_MEMADD_SIZE_8BIT, buf, 2, 0x10);
    // 合并为16位整数
    *humidity = (int16_t)((uint16_t)buf[1] << 8 | buf[0]);
}

五:串口接收数据如下所示:

03-4 串口接收温湿度数据图.png

后记:

HTS221支持两种工作模式,

模式1:轮询模式<--->最为简单,MCU(微控制器)直接读取寄存器获取最新数据。如果配置为“单次转换”模式,读取前需要先写入命令触发采样。

模式2: 中断模式<--->传感器通过DRDY引脚通知MCU(微控制器)新数据已准备好,MCU(微控制器)再通过中断读取。



关键词: HTS221     温湿度    

专家
2026-03-30 08:59:28     打赏
2楼

谢谢分享


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]