news 2026/5/25 8:07:13

基于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/5/25 6:44:34

29、Samba远程服务器管理与域成员服务器配置全解析

Samba远程服务器管理与域成员服务器配置全解析 1. 远程服务器管理概述 Windows 提供了大量远程管理应用程序,如 Server Manager 和 User Manager for Domains 。这些工具能帮助管理员管理文件共享、启停服务、搜索日志文件以及监控系统资源等。支持 Windows 管理员熟悉的工具…

作者头像 李华
网站建设 2026/5/22 2:44:03

32、Winbind 功能与配置详解

Winbind 功能与配置详解 1. idmap 后端介绍 在某些场景下,你可能希望对 winbindd 为域账户分配 UID 和 GID 的方式有更多控制,或者希望在多台服务器的 Winbind 安装之间共享映射。idmap 后端参数允许你指定一个替代的 SID 到 UID/GID 数据库,它还可能提供替代的 UID 和 GI…

作者头像 李华
网站建设 2026/5/25 6:53:16

JELOS:专为游戏掌机打造的终极Linux系统解决方案

JELOS&#xff1a;专为游戏掌机打造的终极Linux系统解决方案 【免费下载链接】distribution Home of the JELOS Linux distribution. 项目地址: https://gitcode.com/gh_mirrors/di/distribution 在当今复古游戏复兴的浪潮中&#xff0c;JELOS&#xff08;Just Enough L…

作者头像 李华
网站建设 2026/5/24 21:31:07

VSCode Jupyter Notebook调试GPT-SoVITS训练过程

VSCode Jupyter Notebook调试GPT-SoVITS训练过程 在语音合成技术飞速发展的今天&#xff0c;少样本语音克隆已不再是实验室里的概念&#xff0c;而是逐渐走向个人开发者与产品落地的现实工具。尤其是 GPT-SoVITS 这类开源项目&#xff0c;凭借仅需一分钟语音即可复刻高保真音色…

作者头像 李华
网站建设 2026/5/25 12:09:12

GitHub星标过万的AI项目——Anything-LLM部署教程完整版

GitHub星标过万的AI项目——Anything-LLM部署教程完整版 在智能知识管理需求激增的今天&#xff0c;越来越多个人和企业开始寻求一种既能保护数据隐私、又能高效利用大模型能力的解决方案。传统的通用聊天机器人虽然强大&#xff0c;但面对“我的合同里关于违约金是怎么写的&am…

作者头像 李华
网站建设 2026/5/24 10:50:48

实战拆解:从零构建Llama3大模型,掌握AI核心技术

实战拆解&#xff1a;从零构建Llama3大模型&#xff0c;掌握AI核心技术 【免费下载链接】llama3-from-scratch llama3 一次实现一个矩阵乘法。 项目地址: https://gitcode.com/GitHub_Trending/ll/llama3-from-scratch 还在为复杂的AI模型望而却步吗&#xff1f;想了解T…

作者头像 李华