news 2026/4/3 4:12:59

基于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/3/21 19:36:04

Better OneTab:让浏览器标签管理变得如此简单高效

Better OneTab&#xff1a;让浏览器标签管理变得如此简单高效 【免费下载链接】better-onetab :bookmark_tabs: A better OneTab for Chrome :memo: Temporarily removed from firefox :construction: V2 is WIP 项目地址: https://gitcode.com/gh_mirrors/be/better-onetab …

作者头像 李华
网站建设 2026/4/1 5:17:21

LangFlow在法律文书自动生成中的实践探索

LangFlow在法律文书自动生成中的实践探索 在律师事务所的日常工作中&#xff0c;起草一份标准民事起诉状往往需要数小时——从整理当事人信息、归纳事实经过&#xff0c;到匹配适用法条、构建诉讼请求。即便对于经验丰富的律师而言&#xff0c;这类高度重复性任务仍消耗着大量…

作者头像 李华
网站建设 2026/3/26 7:48:29

31、Samba 域与 ADS 安全模式及 Winbind 配置详解

Samba 域与 ADS 安全模式及 Winbind 配置详解 1. 定位域控制器 在默认配置下,Samba 会尝试自动查找其需要联系的任何域的域控制器。这种自动查找在很大程度上依赖于网络名称服务,而查询这些服务的顺序由 name resolve order 全局选项控制。 当配置为 security = domain…

作者头像 李华
网站建设 2026/3/29 5:01:22

37、Samba故障排查全攻略

Samba故障排查全攻略 1. 网络基础测试 在排查Samba问题时,首先要确保网络基础正常。这涉及到多个方面的测试,下面将详细介绍。 1.1 测试本地名称服务 在Samba服务器的shell中尝试ping本地主机名 localhost 。 localhost 是回环接口 127.0.0.1 的传统主机名,应该能…

作者头像 李华
网站建设 2026/3/29 0:34:23

移动端数据持久化架构深度探索:从离线体验到性能优化

移动端数据持久化架构深度探索&#xff1a;从离线体验到性能优化 【免费下载链接】PocketHub PocketHub Android App 项目地址: https://gitcode.com/gh_mirrors/po/PocketHub 在移动应用开发领域&#xff0c;数据持久化和离线体验已成为衡量应用质量的关键指标。本文将…

作者头像 李华