stm32温湿度采集sht30
时间: 2025-05-20 20:37:55 浏览: 14
### STM32与SHT30温湿度传感器的数据采集教程及示例代码
#### 1. 硬件连接说明
STM32F103系列微控制器可以通过I²C协议与SHT30温湿度传感器进行通信。硬件连接通常如下:
- SHT30的SDA引脚连接到STM32的PB7 (I²C1_SDA)。
- SHT30的SCL引脚连接到STM32的PB6 (I²C1_SCL)。
- VCC和GND分别接至3.3V电源和地线。
这种连接方式可以确保两者之间的稳定通信[^1]。
#### 2. 软件初始化设置
为了使能I²C外设并完成基本配置,需在`main.c`文件中调用相应的初始化函数:
```c
#include "i2c.h"
void MX_I2C1_Init(void)
{
hi2c1.Instance = I2C1;
hi2c1.Init.ClockSpeed = 100000; // 设置标准模式下的时钟速度为100kHz
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c1.Init.OwnAddress1 = 0;
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
HAL_I2C_Init(&hi2c1);
}
```
此部分代码用于初始化I²C模块,并将其配置为工作于7位寻址模式下,适合大多数应用场合[^4]。
#### 3. 数据读取功能实现
以下是具体的SHT30数据读取逻辑,分为两步:发送测量命令以及接收实际数值。
##### 发送测量指令
向SHT30写入启动周期性测量的控制字节(如`0x2C06`表示高精度一次性测量),以便触发内部ADC转换过程。
```c
uint8_t cmd[2] = {0x2C, 0x06}; // 高精度模式的一次性测量命令
if(HAL_I2C_Master_Transmit(&hi2c1, SHT30_ADDR << 1, cmd, sizeof(cmd), HAL_MAX_DELAY)!= HAL_OK){
Error_Handler();
}
```
此处定义了一个数组来存储待传输的两个字节命令序列,并通过主设备发送给从属节点即SHT30芯片实例化对象`hi2c1`执行操作[^2]。
##### 接收处理后的原始数据包
等待一段时间后再次访问目标寄存器位置以提取最新计算完毕的结果集。
```c
#define SHT30_READ_LEN 6
uint8_t raw_data[SHT30_READ_LEN];
HAL_Delay(50); // 延迟至少50ms让器件完成采样运算
if(HAL_I2C_Master_Receive(&hi2c1, SHT30_ADDR<<1 | READ_BIT ,raw_data,SHT30_READ_LEN,HAL_MAX_DELAY)!= HAL_OK ){
Error_Handler();
}
// 将十六进制形式转化为浮点数表达的实际物理量度单位℃/%RH
float temp,humi;
SHT30_Convert_Raw_Data(raw_data,&temp,&humi);
printf("Temperature:%.2f C\nHumidity:%.2f %%\n",temp,humi);
```
这里先预留足够的延时期间允许传感器结束其全部检测流程;随后按照指定长度捕获返回的信息流片段交给后续解析环节进一步加工成易于理解的形式输出显示出来[^4]。
#### 4. 辅助工具方法封装
考虑到重复利用性和可维护性的需求,我们还可以单独创建一些辅助性质的小型子程序简化主业务逻辑结构复杂程度的同时提高整体性能表现水平。
```c
/**
* @brief Converts the raw data from SHT30 into floating point values.
*/
void SHT30_Convert_Raw_Data(const uint8_t* rawData,float* temperature,float* humidity){
int t_raw = ((int)(rawData[0])<<8)|(int)(rawData[1]);
int h_raw = ((int)(rawData[3])<<8)|(int)(rawData[4]);
*temperature = -45.f + 175.f*(t_raw)/((float)((1<<16)-1));
*humidity = 100.f*h_raw/((float)((1<<16)-1));
}
```
上述函数接受来自底层硬件层面上未经任何变换过的二进制比特串作为输入参数之一,经过一系列算术运算之后最终得到标准化范围内的摄氏温度值百分比相对空气湿润指数等直观易懂的表现形态供上层应用程序调用展示之用[^3]。
---
阅读全文
相关推荐


















