当前位置: 首页 > article >正文

STM32F103C8T6与DHT11单总线通信:从时序解析到数据校验的实战指南

1. 认识STM32F103C8T6与DHT11这对黄金搭档第一次接触嵌入式开发的朋友可能会觉得让单片机读取温湿度数据是个复杂的事情。但当你用STM32F103C8T6这颗性价比超高的Cortex-M3内核芯片搭配DHT11这个经典温湿度传感器时事情就变得简单多了。我刚开始玩嵌入式时就是从这个组合入门的实测下来稳定性相当不错。DHT11是个采用单总线通信的数字温湿度传感器价格便宜十几块钱就能买到测量范围覆盖日常需求温度0-50℃湿度20-90%RH。虽然精度不算高温度±2℃湿度±5%RH但对于大多数室内环境监测、智能家居等场景完全够用。最关键的是它采用单总线协议只需要一根数据线就能通信大大简化了硬件连接。STM32F103C8T6大家应该不陌生江湖人称蓝莓派72MHz主频、64KB Flash、20KB RAM的配置对于这种传感器驱动开发绰绰有余。我用的是最常见的最小系统板某宝上二十多块钱就能买到自带USB转串口芯片调试特别方便。2. 硬件连接其实比你想象的简单很多新手最怕的就是硬件连接其实DHT11的接线特别简单。我当初也犯过嘀咕担心接错线烧坏设备后来发现完全多虑了。DHT11只有三个有效引脚有些版本是四个引脚但VCC和NC通常已经内部连接VCC接3.3V-5V电源GND接地DATA数据线接STM32的GPIO在我的方案里用的是PA1引脚连接DHT11的DATA线。这里有个重要细节DATA线需要接一个4.7KΩ的上拉电阻到VCC。很多开发板已经内置了这个电阻如果你的板子没有记得自己加一个。实际接线时我踩过一个小坑有次偷懒没接上拉电阻结果数据一直读取失败。后来用逻辑分析仪抓波形才发现高电平根本拉不上去。所以提醒各位上拉电阻绝对不能省3. 单总线通信时序详解DHT11的通信协议是典型的单总线协议理解时序是关键。刚开始看时序图可能有点懵我把它拆解成几个关键阶段配合代码一起看就清楚了。3.1 启动信号打招呼的艺术主机STM32要先发起通信这个过程就像敲门打招呼主机拉低DATA线至少18ms我一般用20ms比较保险然后释放总线拉高等待20-40us对应的代码实现void DHT11_Rst(void) { DHT11_IO_OUT(); // 设置GPIO为输出模式 DHT11_DQ_Low; // 拉低DATA线 delay_ms(20); // 保持低电平20ms DHT11_DQ_High; // 释放总线 delay_us(30); // 等待30us }3.2 传感器响应确认眼神DHT11检测到启动信号后会给出回应先拉低总线80us左右响应信号再拉高80us准备发送数据这个阶段我们需要检测这些信号u8 DHT11_Check(void) { u8 retry 0; DHT11_IO_IN(); // 切换GPIO为输入模式 // 等待DHT11拉低响应信号 while((GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)1) retry100) { retry; delay_us(1); } if(retry100) return 1; // 超时未响应 retry 0; // 等待DHT11拉高准备数据 while((GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)0) retry100) { retry; delay_us(1); } if(retry100) return 1; // 超时 return 0; // 响应正常 }3.3 数据传输高电平持续时间决定数据位DHT11发送的每个bit都以50us低电平开始然后通过高电平持续时间区分0和126-28us高电平表示070us高电平表示1读取单个bit的代码u8 DHT11_Read_Bit(void) { u8 retry 0; // 等待50us低电平结束 while((GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)1) retry100) { retry; delay_us(1); } retry 0; // 等待高电平开始 while((GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)0) retry100) { retry; delay_us(1); } delay_us(40); // 关键延时40us后检测电平状态 return GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11); }4. 数据解析与校验确保数据准确DHT11每次发送40位数据包含湿度、温度整数和小数部分以及校验位。我刚开始用的时候经常忽略校验结果出了好几次数据异常没发现后来养成了必做校验的好习惯。4.1 数据帧结构40位数据分为5个字节湿度整数湿度小数DHT11固定为0温度整数温度小数DHT11固定为0校验和例如收到数据0011 0101 0000 0000 0001 1000 0000 0100 0101 0001 对应湿度0011 0101(高8位) 0000 0000(低8位) 53%RH温度0001 1000(高8位) 0000 0100(低8位) 24.4℃校验位0101 00014.2 校验计算校验规则很简单前4个字节相加结果应该等于校验位第5个字节。代码实现u8 DHT11_Read_Data(u8 *temp, u8 *humi) { u8 buf[5]; u8 i; DHT11_Rst(); if(DHT11_Check() 0) { // 响应正常 for(i0; i5; i) { buf[i] DHT11_Read_Byte(); // 读取5个字节 } // 校验计算 if((buf[0] buf[1] buf[2] buf[3]) buf[4]) { *humi buf[0]; // 湿度整数 *temp buf[2]; // 温度整数 return 0; // 成功 } } return 1; // 失败 }5. 常见问题排查指南在实际项目中我遇到过各种DHT11通信失败的情况这里分享几个典型问题和解决方法5.1 传感器无响应现象DHT11_Check()总是返回超时 可能原因接线错误VCC、GND接反上拉电阻未接或阻值过大启动信号时间不足小于18ms传感器损坏排查步骤用万用表检查电源电压3.3V-5V检查DATA线是否有上拉电阻用逻辑分析仪抓取启动信号波形5.2 数据校验失败现象校验和不匹配 可能原因时序不准确导致数据位判断错误电磁干扰长线传输时容易发生电源不稳定解决方法调整delay_us()的精度特别是40us那个关键延时缩短传感器与MCU的距离或使用屏蔽线在VCC和GND之间加一个0.1uF去耦电容5.3 数据更新频率问题DHT11的采样周期不能太快建议≥1s否则容易失败。我在代码中加了2秒的读取间隔while(1) { if(DHT11_Read_Data(temperature, humidity) 0) { printf(Temp: %d℃, Humi: %d%%\n, temperature, humidity); } delay_ms(2000); // 2秒读取一次 }6. 完整代码实现把前面分散的代码整合起来加上必要的初始化完整的工程应该包含这些部分GPIO初始化设置PA1为推挽输出/浮空输入延时函数精确到us级别DHT11驱动代码前面介绍的各个函数主循环读取数据这里给出关键的主函数示例int main(void) { u8 temperature 0; u8 humidity 0; // 初始化系统时钟、GPIO等 SystemInit(); GPIO_Configuration(); USART1_Init(115200); // 初始化串口用于打印 printf(DHT11 Test Start...\n); while(1) { if(DHT11_Read_Data(temperature, humidity) 0) { printf(Temperature: %d℃, Humidity: %d%%\n, temperature, humidity); } else { printf(DHT11 Read Error!\n); } delay_ms(2000); // 2秒读取一次 } }7. 进阶优化建议当你能稳定读取数据后可以考虑以下优化使用中断方式检测数据线变化减少CPU占用添加滤波算法对连续几次读数进行平滑处理实现软件CRC校验提高数据可靠性封装成标准的HAL库格式方便移植到其他STM32型号比如简单的移动平均滤波实现#define FILTER_SIZE 5 u8 filter_buffer[FILTER_SIZE]; u8 filter_index 0; u8 moving_average(u8 new_value) { filter_buffer[filter_index] new_value; filter_index (filter_index 1) % FILTER_SIZE; u32 sum 0; for(int i0; iFILTER_SIZE; i) { sum filter_buffer[i]; } return (u8)(sum / FILTER_SIZE); }8. 实际项目中的应用技巧在真正的产品开发中我总结了几个实用技巧电源处理DHT11对电源波动敏感建议使用LDO稳压供电并在VCC和GND之间加104电容长线传输如果传感器需要远距离连接1米建议降低上拉电阻值如2.2KΩ异常恢复增加自动重试机制连续3次失败后复位I/O口温度补偿DHT11自身发热会影响测量避免安装在MCU附近一个健壮的重试机制实现u8 read_with_retry(u8 *temp, u8 *humi, u8 retry_count) { while(retry_count--) { if(DHT11_Read_Data(temp, humi) 0) { return 0; // 成功 } delay_ms(100); } // 仍然失败则复位GPIO DHT11_GPIO_DeInit(); DHT11_GPIO_Init(); return 1; }最后提醒一点DHT11虽然简单易用但在高精度要求的场合如医疗、工业控制可能不够用。如果项目对精度要求高可以考虑DHT22、SHT3x等更专业的传感器。不过对于大多数日常应用DHT11STM32F103C8T6这个组合已经足够稳定可靠了。

相关文章:

STM32F103C8T6与DHT11单总线通信:从时序解析到数据校验的实战指南

1. 认识STM32F103C8T6与DHT11这对黄金搭档 第一次接触嵌入式开发的朋友可能会觉得,让单片机读取温湿度数据是个复杂的事情。但当你用STM32F103C8T6这颗性价比超高的Cortex-M3内核芯片,搭配DHT11这个经典温湿度传感器时,事情就变得简单多了。…...

分布式架构实战:全平台矩阵管理系统的技术实现与性能优化

前言在数字化运营进入全域竞争的今天,多平台账号集群管理已成为企业与开发者的核心技术挑战。传统单体架构的矩阵工具普遍存在算力弹性不足、账号关联风险高、跨平台适配复杂、AI 能力割裂等问题,导致 90% 以上的自研矩阵系统最终以失败告终。本文基于生…...

阿里云效前端流水线自动化部署

一、权限准备 如果你想实现这个功能,那么你的云效必须要有权限!!这非常重要!!如何确定自己是否有相关权限呢? 流水线权限 制品仓库权限 就是云服务器的权限,这个权限是要你可以读写文件的…...

告别启动盘识别难题:手把手教你搞定CentOS 7在SR650上的UEFI启动与自定义分区(含/dev/sdX查找技巧)

告别启动盘识别难题:手把手教你搞定CentOS 7在SR650上的UEFI启动与自定义分区(含/dev/sdX查找技巧) 在服务器运维领域,系统安装看似基础却暗藏玄机。特别是当面对企业级硬件如Lenovo SR650时,UEFI启动模式与传统BIOS的…...

XUnity自动翻译器:打破语言壁垒的终极Unity游戏汉化解决方案

XUnity自动翻译器:打破语言壁垒的终极Unity游戏汉化解决方案 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你是否曾经因为语言障碍而错过精彩的游戏剧情?是否在面对日文RPG或英文…...

Cursor Pro永久免费使用终极指南:如何绕过试用限制完整教程

Cursor Pro永久免费使用终极指南:如何绕过试用限制完整教程 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached you…...

淘宝商品详情 API 实现标题 / SKU / 主图批量采集

item_get_pro-获得淘宝商品详情高级版请求示例-- 请求示例 url 默认请求参数已经URL编码处理 curl -i "https://api-服务器.cn/taobao/item_get_pro/?key<您自己的apiKey>&secret<您自己的apiSecret>&num_iid678121631641"响应示例"num_ii…...

Cartographer闭环优化里的‘分支定界’:一个机器人SLAM工程师的实战笔记与避坑心得

Cartographer闭环优化中的分支定界算法&#xff1a;工程实践与性能调优指南 在SLAM&#xff08;即时定位与地图构建&#xff09;领域&#xff0c;闭环检测的准确性直接决定了系统长期运行的稳定性。作为Cartographer算法的核心组件之一&#xff0c;分支定界&#xff08;Branch …...

鸿蒙系统安装

一、下载 DevEco Studio 打开华为开发者官网&#xff0c;找到 DevEco Studio 6.1.0 Release 下载页面。 DevEco Studio for Windows 6.1.0.830(2.8GB) 下载。 Mac 用户可以选择对应版本&#xff08;x86/ARM&#xff09;。 等待下载完成&#xff0c;得到 .exe 安装文件。二、安装…...

一分钟看懂大模型备案

大模型备案&#xff0c;全称 “生成式人工智能服务上线备案”&#xff0c;是国内面向公众提供大模型服务的法定合规流程&#xff0c;核心是审核模型安全、数据合规与内容可控&#xff0c;未备案违规上线最高罚一千万元&#xff0c;该处罚依据主要来自两大核心法规&#xff1a;1…...

抖音下载器终极指南:3分钟实现无水印批量下载的高效解决方案

抖音下载器终极指南&#xff1a;3分钟实现无水印批量下载的高效解决方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback…...

告别时序烦恼:用Xilinx MIG IP核搞定FPGA DDR3内存接口(附MT41J256M16配置要点)

告别时序烦恼&#xff1a;用Xilinx MIG IP核搞定FPGA DDR3内存接口&#xff08;附MT41J256M16配置要点&#xff09; 在FPGA开发中&#xff0c;DDR3内存接口设计往往是让工程师头疼的难题之一。时序控制、信号完整性、配置参数选择&#xff0c;每一个环节都可能成为项目推进的拦…...

Dell G15终极散热管理:开源热控中心完全指南 [特殊字符]

Dell G15终极散热管理&#xff1a;开源热控中心完全指南 &#x1f680; 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 还在为Dell G15游戏本的过热问题而烦恼…...

告别网盘限速烦恼!九大平台直链下载助手让你的文件下载飞起来

告别网盘限速烦恼&#xff01;九大平台直链下载助手让你的文件下载飞起来 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘…...

软件设计原则之DIP依赖倒置原则

(DIP) 依赖倒置原则 Dependency Inversion Principle核心原则抽象不应该依赖细节&#xff1b;细节应该依赖于抽象。场景描述在一个应用程序 Application 中需要使用到数据库&#xff0c;比如我们此时需要使用到 Mysql 数据库。Mysql 数据库分别具有连接&#xff0c;断开关闭&am…...

从一次内部渗透测试说起:我是如何利用SSRF漏洞,通过Gopher协议拿下Redis的

渗透测试实战&#xff1a;SSRF漏洞到Redis未授权访问的完整攻击链剖析 在一次常规的企业内部渗透测试中&#xff0c;我发现了一个看似普通的SSRF漏洞&#xff0c;却意外打开了通往内网核心系统的大门。这个故事不是教科书式的漏洞复现&#xff0c;而是一个真实攻击者视角下的完…...

在多轮对话应用中体验Taotoken路由策略对响应速度的优化

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在多轮对话应用中体验Taotoken路由策略对响应速度的优化 1. 场景与背景 在开发一个需要多轮交互的对话应用时&#xff0c;我们常常…...

macOS桌面歌词终极解决方案:LyricsX 2.0完整指南

macOS桌面歌词终极解决方案&#xff1a;LyricsX 2.0完整指南 【免费下载链接】Lyrics Swift-based iTunes plug-in to display lyrics on the desktop. 项目地址: https://gitcode.com/gh_mirrors/lyr/Lyrics 你是否曾经在听音乐时&#xff0c;想要跟着歌词一起唱却发现…...

在Taotoken模型广场中根据任务与预算选择合适的模型

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在Taotoken模型广场中根据任务与预算选择合适的模型 当开发者需要将大模型能力集成到自己的应用或工作流中时&#xff0c;面对市场…...

TEdit地图编辑器:10倍效率打造你的泰拉瑞亚梦想世界

TEdit地图编辑器&#xff1a;10倍效率打造你的泰拉瑞亚梦想世界 【免费下载链接】Terraria-Map-Editor TEdit - Terraria Map Editor - TEdit is a stand alone, open source map editor for Terraria. It lets you edit maps just like (almost) paint! It also lets you chan…...

Kafka高效的原因

Kafka高效的原因Kafka的高效性源于其独特的架构设计和多项优化技术&#xff0c;以下是关键因素&#xff1a;分布式架构与分区机制 Kafka采用分布式设计&#xff0c;主题&#xff08;Topic&#xff09;被划分为多个分区&#xff08;Partition&#xff09;&#xff0c;每个分区可…...

【独家】Lindy内部SLO白皮书泄露:自主工作流SLA达标率低于99.95%的5个致命信号

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Lindy AI Agent自主工作流的核心架构与SLO哲学 Lindy AI Agent 的核心架构基于“自治闭环”&#xff08;Autonomous Closed Loop&#xff09;范式&#xff0c;将任务规划、工具调用、状态反馈与自校准能…...

Taotoken用量看板与成本管理功能的实际使用体验

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken用量看板与成本管理功能的实际使用体验 对于需要持续调用大模型API的项目而言&#xff0c;成本的可观测与可控性是管理中的…...

从 Token 消耗到 AI 资产:企业如何把一次调用沉淀成模板、流程、知识库和制度

关键词:Token 管理、AI 资产、模板库、流程化、知识库、制度化、投入产出比 开篇:企业真正要管的不是 Token,而是 Token 之后留下了什么 很多企业开始使用 AI 以后,第一反应是看成本:这个月用了多少 Token,哪个部门调用最多,哪个模型最贵,哪些场景消耗最高。 这当然重…...

别再死记硬背了!用Python和C语言手把手带你理解CRC32查表法的实现原理

从数学到代码&#xff1a;用Python和C语言彻底搞懂CRC32查表法的实现 在数据传输和存储过程中&#xff0c;错误检测是确保数据完整性的关键环节。CRC32作为一种广泛应用的校验算法&#xff0c;从网络协议到压缩工具&#xff0c;再到文件系统&#xff0c;几乎无处不在。但很多开…...

STM32L4低功耗实战:用RTC内部唤醒定时1秒,让设备续航翻倍(附CubeIDE配置)

STM32L4低功耗实战&#xff1a;RTC唤醒中断与CubeIDE配置全解析 在电池供电的物联网终端设计中&#xff0c;每微安电流都关乎产品寿命。曾有个智能农业项目&#xff0c;原本预计6个月的传感器续航&#xff0c;因未优化低功耗模式&#xff0c;实际仅维持了3周。这促使我们深入研…...

工业 AI 赋能采购:智能供应商匹配重构招标流程

Q1&#xff1a;传统企业采购招标&#xff0c;供应商对接与筛选存在哪些固有痛点&#xff1f;传统工业企业采购招标模式高度依赖人工经验&#xff0c;存在三大核心痛点&#xff1a;供应商资源固化&#xff1a;每次招标都需从零手动联络供应商&#xff0c;仅依靠采购人员个人记忆…...

企业采购AI升级:需求驱动的智能供应商匹配实战

工业数字化与 AI 技术深度融合的当下&#xff0c;传统采购招标模式的短板愈发凸显。众多 Java 架构的企业采购系统仍停留在人工化、经验化运营阶段&#xff0c;供应商管理效率低、匹配精准度不足、人力成本居高不下。依托JBoltAI企业级 Java AI 应用开发框架所倡导的 AIGS 人工…...

【JVM】面试题-有哪些垃圾回收器

【JVM】面试题-有哪些垃圾回收器 在JVM的内存管理中&#xff0c;垃圾收集算法是内存回收的核心逻辑与方法论&#xff0c;而垃圾收集器则是将这套方法论落地实现的具体工具。 不同的垃圾收集器针对JVM堆的不同分代&#xff08;新生代、老年代&#xff09;设计&#xff0c;具备不…...

第六届机械制造与智能控制国际学术会议(ICMMIC 2026)

第六届机械制造与智能控制国际学术会议&#xff08;ICMMIC 2026&#xff09;将于2026年6月12-14日在中国浙江湖州隆重举行。本次会议旨在汇聚全球“机械制造、智能控制”领域的学者、专家、研发者和技术人员&#xff0c;共同探讨学术前沿&#xff0c;分享科研成果&#xff0c;促…...