news 2026/7/7 16:37:37

基于STM32与SHT31温湿度传感器实现方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于STM32与SHT31温湿度传感器实现方案

一、硬件连接配置

1.1 引脚连接方案
SHT31 STM32F103C8T6 VCC3.3V GND GND SCLPB6(I2C1_SCL)SDAPB7(I2C1_SDA)ADDR 悬空(地址0x44
1.2 硬件设计要点
  • 需添加4.7kΩ上拉电阻到SCL/SDA线
  • 电源引脚建议添加0.1μF去耦电容
  • 通信速率建议配置为400kHz

二、I2C通信协议实现

2.1 HAL库配置代码
// I2C初始化函数voidMX_I2C1_Init(void){hi2c1.Instance=I2C1;hi2c1.Init.ClockSpeed=400000;hi2c1.Init.DutyCycle=I2C_DUTYCYCLE_2;hi2c1.Init.OwnAddress1=0;hi2c1.Init.AddressingMode=I2C_ADDRESSINGMODE_7BIT;hi2c1.Init.DualAddressMode=I2C_DUALADDRESS_DISABLE;hi2c1.Init.OwnAddress2=0;hi2c1.Init.GeneralCallMode=I2C_GENERALCALL_DISABLE;hi2c1.Init.NoStretchMode=I2C_NOSTRETCH_DISABLE;if(HAL_I2C_Init(&hi2c1)!=HAL_OK){Error_Handler();}}
2.2 传感器指令集
#defineSHT31_ADDR0x44#defineSHT31_MEASURE_HIGH0x2400#defineSHT31_MEASURE_LOW0x2400#defineSHT31_READ0xE000#defineSHT31_SOFT_RESET0x30A2// 发送命令函数HAL_StatusTypeDefSHT31_SendCommand(uint16_tcmd){uint8_ttx_data[2]={cmd>>8,cmd&0xFF};returnHAL_I2C_Master_Transmit(&hi2c1,SHT31_ADDR<<1,tx_data,2,100);}

三、数据采集与处理

3.1 测量流程实现
floattemperature;floathumidity;voidSHT31_Read_Data(){uint8_trx_data[6]={0};// 发送测量命令SHT31_SendCommand(SHT31_MEASURE_HIGH);HAL_Delay(20);// 等待测量完成// 读取数据HAL_I2C_Master_Receive(&hi2c1,SHT31_ADDR<<1,rx_data,6,100);// CRC校验if(CRC8_Check(rx_data,2)!=rx_data[2]||CRC8_Check(rx_data+3,2)!=rx_data[5]){Error_Handler();// 数据校验失败}// 数据转换uint16_traw_temp=(rx_data[0]<<8)|rx_data[1];uint16_traw_humi=(rx_data[3]<<8)|rx_data[4];temperature=-45+175*(float)raw_temp/65535.0;humidity=100*(float)raw_humi/65535.0;}
3.2 CRC校验算法
uint8_tCRC8_Check(uint8_t*data,uint8_tlen){constuint8_tpolynomial=0x31;uint8_tcrc=0xFF;for(uint8_ti=0;i<len;i++){crc^=data[i];for(uint8_tj=0;j<8;j++){if(crc&0x80)crc=(crc<<1)^polynomial;elsecrc<<=1;}}returncrc;}

四、完整工程框架

4.1 主程序流程
intmain(void){HAL_Init();SystemClock_Config();MX_I2C1_Init();while(1){SHT31_Read_Data();// 显示数据(通过USART或LCD)printf("T:%.2fC H:%.2fRH\r\n",temperature,humidity);HAL_Delay(1000);}}
4.2 系统初始化
voidSystemClock_Config(void){RCC_OscInitTypeDef RCC_OscInitStruct={0};RCC_ClkInitTypeDef RCC_ClkInitStruct={0};RCC_OscInitStruct.OscillatorType=RCC_OSCILLATORTYPE_HSI;RCC_OscInitStruct.HSIState=RCC_HSI_ON;RCC_OscInitStruct.PLL.PLLState=RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource=RCC_PLLSOURCE_HSI;RCC_OscInitStruct.PLL.PLLMUL=RCC_PLL_MUL12;HAL_RCC_OscConfig(&RCC_OscInitStruct);RCC_ClkInitStruct.ClockType=RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider=RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider=RCC_HCLK_DIV2;RCC_ClkInitStruct.APB2CLKDivider=RCC_HCLK_DIV1;HAL_RCC_ClockConfig(&RCC_ClkInitStruct,FLASH_LATENCY_1);}

参考代码 STM32+SHT31温湿度传感器程序www.3dddown.com/csa/56446.html

五、完整代码结构

// main.c#include"main.h"#include"sht31.h"floattemperature,humidity;intmain(void){HAL_Init();SystemClock_Config();MX_I2C1_Init();MX_USART1_UART_Init();while(1){SHT31_Read_Data();Data_Filter();Check_Alert();printf("T:%.1fC H:%.1fRH\r\n",temperature,humidity);Save_Data();HAL_Delay(1000);}}

六、注意事项

  1. 电源稳定性:建议使用LDO稳压芯片提供3.3V电源
  2. PCB布局:SCL/SDA走线长度应小于20mm,避免直角转弯
  3. 固件升级:可通过SWD接口更新CRC校验算法版本
  4. 环境干扰:在工业现场建议添加金属屏蔽罩
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 19:44:34

2025 年末,中超转会及球员调整最新报

2025赛季的中超大幕已落下&#xff0c;但足球的故事从未停歇。足协杯北京国安夺冠的喜悦还未散去&#xff0c;各俱乐部已悄然进入赛季后最关键的调整期。主教练去留、外援更替、本土球员流动——这个冬天的每一次选择&#xff0c;都可能决定下赛季的成败。争冠集团面临核心重组…

作者头像 李华
网站建设 2026/7/7 18:37:21

30、Samba 域成员服务器配置指南

Samba 域成员服务器配置指南 1. security = domain 模式 在使用 security = domain 模式将 Samba 主机加入域时,需要完成两个步骤: 1. 在 smb.conf 中定义环境的域和成员服务器设置。 2. 通过加入域来建立机器账户凭证。 1.1 配置 smb.conf 首先要设置的参数是 se…

作者头像 李华
网站建设 2026/7/7 7:10:40

MinIO匿名访问安全配置指南:从零搭建到企业级防护

MinIO匿名访问安全配置指南&#xff1a;从零搭建到企业级防护 【免费下载链接】minio minio/minio: 是 MinIO 的官方仓库&#xff0c;包括 MinIO 的源代码、文档和示例程序。MinIO 是一个分布式对象存储服务&#xff0c;提供高可用性、高性能和高扩展性。适合对分布式存储、对象…

作者头像 李华
网站建设 2026/7/6 15:42:35

35、SMB 客户端与网络远程管理工具使用指南

SMB 客户端与网络远程管理工具使用指南 1. smbclient 基础操作 smbclient 是一个强大的工具,用于与 SMB/CIFS 文件共享进行交互。在操作过程中,我们可以查看连接信息和已连接服务器列表。例如,使用 showconnect 命令查看当前连接的 UNC 路径: smb: \spud\> showco…

作者头像 李华
网站建设 2026/7/7 14:38:23

JoltPhysics高性能物理引擎优化实战:从卡顿到丝滑的进阶指南

你是否曾在游戏开发中遇到这样的困境&#xff1a;精心设计的物理特效在运行时却出现物体抖动、碰撞检测失效甚至角色穿墙的尴尬场面&#xff1f;这些看似随机的问题背后&#xff0c;往往隐藏着物理引擎性能调优的关键技术挑战。本文将深入解析JoltPhysics物理引擎的核心优化策略…

作者头像 李华
网站建设 2026/7/7 10:16:04

36、深入解析Samba故障排查:工具与策略

深入解析Samba故障排查:工具与策略 Samba是一款极其强大的软件,当你按照需求完成所有设置后,可能会忽略它的运行状态。不过,在安装或重新配置服务器时,问题往往会随之出现。幸运的是,有多种资源可用于诊断这些问题。下面将详细介绍一些实用的故障排查工具和方法。 故障…

作者头像 李华