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/6 11:49:37

33、Unix系统下SMB/CIFS文件共享访问指南

Unix系统下SMB/CIFS文件共享访问指南 1. SMB/CIFS的跨平台应用 SMB/CIFS协议不仅在微软Windows系统中广泛使用,还支持多种其他操作系统,包括Linux、Mac OS X等。通过在不同系统上提供SMB/CIFS支持,可以实现局域网的标准化,方便用户使用跨平台的办公软件,如OpenOffice.or…

作者头像 李华
网站建设 2026/7/6 7:53:32

GESP认证C++编程真题解析 | B3863 [GESP202309 一级] 买文具

​欢迎大家订阅我的专栏&#xff1a;算法题解&#xff1a;C与Python实现&#xff01; 本专栏旨在帮助大家从基础到进阶 &#xff0c;逐步提升编程能力&#xff0c;助力信息学竞赛备战&#xff01; 专栏特色 1.经典算法练习&#xff1a;根据信息学竞赛大纲&#xff0c;精心挑选…

作者头像 李华
网站建设 2026/7/6 17:43:18

9 个专科生开题报告工具,AI降重查重率推荐

9 个专科生开题报告工具&#xff0c;AI降重查重率推荐 开题报告的“战场”&#xff1a;专科生的写作困境 对于许多专科生来说&#xff0c;撰写开题报告是一场充满挑战的“战役”。从选题到文献综述&#xff0c;再到内容组织与语言表达&#xff0c;每一个环节都充满了压力。尤其…

作者头像 李华
网站建设 2026/7/7 1:44:11

39、Samba故障排除指南

Samba故障排除指南 1. 常见错误及解决办法 在使用Samba服务时,可能会遇到一些常见错误,以下是这些错误及对应的解决建议: - 权限或配置错误 :当出现 “You do not have the necessary access rights” 或 “This server is not configured to list shared resources”…

作者头像 李华
网站建设 2026/7/6 11:52:21

【软考架构】滑动窗口限流算法的原理是什么?

核心结论 滑动窗口限流算法是对固定窗口计数器算法的优化&#xff0c;核心是将整体时间窗口拆分为多个等长的子窗口&#xff08;时间片&#xff09;&#xff0c;通过“滑动”方式实时更新当前统计窗口的范围&#xff0c;并累加窗口内所有子窗口的请求数&#xff0c;以此精准控制…

作者头像 李华
网站建设 2026/7/5 5:30:49

FlutterToast跨平台通知组件终极指南:从零到专家级定制

FlutterToast跨平台通知组件终极指南&#xff1a;从零到专家级定制 【免费下载链接】FlutterToast fluttertoast是一个Flutter插件&#xff0c;旨在帮助开发者在Flutter应用中显示自定义的Toast消息。 该仓库为fluttertoast库适配OpenHarmony的仓库。 项目地址: https://gitc…

作者头像 李华