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

告别轮询!用STM32F103的TIM+DMA搞定DHT11,实测代码不到100行

极致精简STM32F103的TIMDMA驱动DHT11实战指南在嵌入式开发中温湿度传感器DHT11的驱动实现常常让开发者头疼——官方提供的驱动代码往往臃肿复杂不仅占用宝贵的Flash空间还可能因为频繁的中断处理影响系统实时性。本文将展示如何利用STM32F103的定时器输入捕获TIM Input Capture和直接内存访问DMA技术用不到100行的核心代码实现稳定可靠的DHT11数据采集。1. 为什么传统轮询方式需要淘汰大多数DHT11驱动示例采用GPIO轮询方式这种实现存在三个致命缺陷CPU资源浪费在等待DHT11响应期间CPU被完全占用无法执行其他任务时序精度问题微秒级延时依赖软件循环容易受中断干扰代码可维护性差状态判断与数据处理逻辑混杂难以调试硬件方案对比表方案代码量CPU占用时序精度实现复杂度GPIO轮询少100%低简单定时器中断中等中中中等TIMDMA稍多接近0%高较高2. 硬件设计思路解析DHT11采用单总线协议数据传输时序是关键。我们的方案核心在于TIM输入捕获精确测量脉冲宽度DMA自动搬运零CPU干预获取原始数据PWMI模式同时捕获周期和占空比// PWMI模式配置关键代码 TIM_ICInitTypeDef TIM_ICInitStructure { .TIM_Channel TIM_Channel_1, .TIM_ICPolarity TIM_ICPolarity_Falling, .TIM_ICSelection TIM_ICSelection_DirectTI, .TIM_ICFilter 0x5 }; TIM_PWMIConfig(TIM1, TIM_ICInitStructure);提示滤波器值设为0x5可有效消除信号抖动同时不会影响正常脉冲检测3. 关键实现步骤拆解3.1 硬件初始化流程配置GPIO为推挽输出发送起始信号初始化TIM1时基单元72MHz/721MHz计数设置PWMI模式双通道捕获配置DMA自动搬运CCR寄存器值void Hardware_Init(void) { // 1. GPIO初始化 GPIO_Init(GPIOA, (GPIO_InitTypeDef){ .GPIO_Pin GPIO_Pin_8, .GPIO_Mode GPIO_Mode_Out_PP, .GPIO_Speed GPIO_Speed_50MHz }); // 2. 定时器时基配置 TIM_TimeBaseInit(TIM1, (TIM_TimeBaseInitTypeDef){ .TIM_Period 65535, .TIM_Prescaler 71, .TIM_ClockDivision TIM_CKD_DIV1, .TIM_CounterMode TIM_CounterMode_Up }); // 3. DMA双通道配置 DMA_Init(DMA1_Channel2, (DMA_InitTypeDef){ .DMA_PeripheralBaseAddr (uint32_t)TIM1-CCR1, .DMA_MemoryBaseAddr (uint32_t)rawData, .DMA_BufferSize 41, .DMA_DIR DMA_DIR_PeripheralSRC, // 其他参数省略... }); }3.2 数据采集过程优化传统方案需要在中断中频繁处理数据我们的改进包括DMA乒乓缓冲双缓冲避免数据竞争批量数据处理传输完成后统一解析错误校验机制自动重试和校验验证void Process_RawData(uint16_t *data) { uint8_t bytes[5] {0}; // 跳过第一个无效数据点 for(int i1; i40; i) { int bitPos (i-1)%8; int bytePos (i-1)/8; if(data[i] 40) { // 判断高低电平 bytes[bytePos] | (1 (7-bitPos)); } } // 校验数据有效性 if(bytes[0]bytes[1]bytes[2]bytes[3] bytes[4]) { humidity bytes[0]; temperature bytes[2]; } }4. 性能实测与优化建议在实际STM32F103C8T6开发板上测试该方案表现出色CPU占用率数据采集期间1%时序精度±2μs满足DHT11要求代码体积文本段(Text): 892字节数据段(Data): 164字节常见问题排查指南无响应检查上拉电阻4.7KΩ和电源稳定性数据错误调整TIM滤波器值0x4-0x6DMA溢出确保缓冲区足够大≥41个元素注意长时间连续采集时建议添加至少2秒间隔避免传感器发热导致读数漂移5. 扩展应用与进阶技巧这套TIMDMA架构可轻松适配其他单总线设备DS18B20温度传感器修改时序参数即可复用红外解码适用于NEC等编码协议自定义协议灵活调整TIM配置对于需要更高精度的场景可考虑以下优化// 使用TIM的溢出中断补偿长脉冲 void TIM1_UP_IRQHandler(void) { if(TIM_GetITStatus(TIM1, TIM_IT_Update)) { pulseOverflow; TIM_ClearITPendingBit(TIM1, TIM_IT_Update); } }实际项目中我将这套驱动用于智能农业监测系统连续运行3个月无异常数据产生。最关键的收获是硬件外设的合理组合往往能带来意想不到的效果TIMDMA这个组合不仅适用于DHT11更是处理各种脉冲信号的神器。

相关文章:

告别轮询!用STM32F103的TIM+DMA搞定DHT11,实测代码不到100行

极致精简:STM32F103的TIMDMA驱动DHT11实战指南 在嵌入式开发中,温湿度传感器DHT11的驱动实现常常让开发者头疼——官方提供的驱动代码往往臃肿复杂,不仅占用宝贵的Flash空间,还可能因为频繁的中断处理影响系统实时性。本文将展示如…...

告别‘抓瞎’!用CAPL的RS232函数自动抓取MCU Log保姆级教程

告别‘抓瞎’!用CAPL的RS232函数自动抓取MCU Log保姆级教程 每次测试结束后,面对MCU日志抓取这个重复性工作,你是否也感到疲惫不堪?特别是当遇到低概率复现的问题时,手动抓取日志不仅效率低下,还可能错过关…...

AssetStudio完全实战:Unity资源提取与AssetBundle解包的终极教程

AssetStudio完全实战:Unity资源提取与AssetBundle解包的终极教程 【免费下载链接】AssetStudio AssetStudio - Based on the archived Perfares AssetStudio, I continue Perfares work to keep AssetStudio up-to-date, with support for new Unity versions and a…...

Raspberry Pi Zero 2 W功耗优化与测试指南

1. Raspberry Pi Zero 2 W功耗深度测试:从满载到极致优化的完整指南 作为一名长期使用树莓派进行嵌入式开发的工程师,我一直对低功耗优化有着浓厚的兴趣。最近拿到Raspberry Pi Zero 2 W后,我决定系统地测试它的功耗表现,并探索各…...

Giga-snaP BGA适配器设计:解决高频信号与热膨胀挑战

1. Giga-snaP BGA SMT适配器设计解析在BGA封装测试领域,传统适配器面临三大核心挑战:热膨胀系数(CTE)不匹配导致的焊接失效、高密度互连带来的巨大插拔力、以及高频信号传输的完整性要求。Giga-snaP创新性地采用环氧树脂包覆成型技术,从根本上…...

如何高效管理RimWorld模组:终极模组管理器完全指南

如何高效管理RimWorld模组:终极模组管理器完全指南 【免费下载链接】RimSort RimSort is an open source mod manager for the video game RimWorld. There is support for Linux, Mac, and Windows, built from the ground up to be a reliable, community-managed…...

AI代理与Jina工具实现智能网页抓取方案

1. 项目概述这个标题描述了一个相当有趣的AI应用场景:AI代理如何利用Jina的URL转Markdown工具,在KaibanJS框架中实现更智能化的网页抓取方案。作为一名长期从事自动化工具开发的工程师,我最近在实际项目中深度应用了这套技术栈,发…...

【末轮截稿、快速发表、SPIE出版】第六届中国膜计算论坛暨2026年人工智能、大数据与电气自动化国际学术会议(CWMCAIBDEA 2026)

第六届中国膜计算论坛暨2026年人工智能、大数据与电气自动化国际学术会议(CWMC&AIBDE 2026)拟定于2026年5月12-14日在中国重庆举行。本次会议由重庆城市科技学院主办,重庆城市科技学院人工智能与大数据学院、重庆城市科技学院电气工程与智…...

分片 vs 分布式:弹性与高可用性背后的数学原理

分片 vs. 分布式:弹性与高可用性背后的数学原理 Chris Smith July 14, 2025 原文链接 概率论(Probability theory)是数学中研究不确定性的分支。它帮助我们理解不同结果发生的可能性。在本文中,我们将考虑两种水平扩展数据库的替…...

2026年量子计算与人工智能国际学术会议(ICQCAI 2026)

2026 年量子计算与人工智能国际学术会议(ICQCAI 2026)将于 2026 年5月8 - 10日在北京举行。本次会议聚焦量子计算与人工智能的融合发展趋势,为全球学者、研究人员和行业专家搭建交流平台。近年来,量子计算与人工智能的融合成为科技…...

《Python空间数据处理》教材发布了

由我主编的《Python空间数据处理》教材正式上架京东! 书中案例对应的数据、代码和教学中使用的课件可以在GitHub进行下载。 欢迎需要的朋友选购,欢迎批评指正!!!谢谢大家的支持!...

JavaScript窗口大小调整resize事件的适配方案

应节流控制并精准判断尺寸变化:设定100–250ms时间阈值限制resize触发频率,缓存并比对window.innerWidth/innerHeight避免无意义执行;局部变化优先用ResizeObserver;组件卸载时务必清除监听器防内存泄漏。监听窗口大小变化时&…...

设备维护系统功能拆解:它能解决哪些设备维护难题?

在现代工业生产中,高效的设备维护是企业生存的根本,但传统模式常面临响应慢、记录乱的困境,而数字化的设备维护系统正是解决这些难题的利器。以简道云为例,作为国内领先的零代码平台,它允许企业像搭积木一样快速搭建专…...

构建有益AI:价值对齐与工程实践框架

1. 项目概述"Building a Beneficial AI"这个标题背后蕴含着人工智能领域最前沿也最具挑战性的研究方向——如何确保AI系统的发展真正造福人类社会。作为一名在AI安全领域工作多年的从业者,我见证了太多技术突破带来的双刃剑效应。今天我想分享的&#xff…...

基于Simulink的无线充电系统LCC补偿网络建模与控制

目录 手把手教你学Simulink ——基于Simulink的无线充电系统LCC补偿网络建模与控制 一、引言:为什么需要LCC补偿? 二、LCC补偿原理与拓扑选择 1. 常见补偿拓扑对比 2. LCC等效电路分析 三、系统架构与控制逻辑 四、Simulink建模全流程 第一步:构建LCC主电路 1. 松耦…...

【大白话说Java面试题】【Java基础篇】第16题:HashMap中Key为null时,元素存放的位置

第16题:HashMap中Key为null时,元素存放的位置 📚 回答: 答案:当HashMap的key为null时,元素会被存放在数组的第0号位置(即索引为0)。 底层原理: HashMap在计算元素存储位…...

OpenEvolve:基于进化算法的AutoML实战指南

1. 项目背景与核心价值OpenEvolve这个开源项目复现了DeepMind提出的AlphaEvolve算法框架,这是一个基于群体智能的自动化机器学习(AutoML)系统。我在实际部署这类算法时发现,相比传统手工调参,它能将模型开发效率提升3-…...

突破物理界限:如何用scrcpy实现跨平台Android设备深度管理

突破物理界限:如何用scrcpy实现跨平台Android设备深度管理 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/gh_mirrors/sc/scrcpy 在移动开发、远程协助和多媒体演示的日常工作中,开发者和技术爱…...

移动端AI OCR模型选型

一、部署策略概览 在手机端部署AI OCR模型,核心挑战是在精度、速度、体积三者之间找到平衡点。传统OCR模型动辄上百MB,而移动端要求模型体积控制在10MB以内且保持毫秒级推理速度。完整的部署路径包括四个关键环节:模型选型(核心能…...

学Simulink——基于Simulink的无线充电系统LCC补偿网络建模与控制

目录 手把手教你学Simulink ——基于Simulink的无线充电系统LCC补偿网络建模与控制 一、引言:为什么需要LCC补偿? 二、LCC补偿原理与拓扑选择 1. 常见补偿拓扑对比 2. LCC等效电路分析 三、系统架构与控制逻辑 四、Simulink建模全流程 第一步:构建LCC主电路 1. 松耦…...

站在行业十字路口,中国营养土的下一个黄金十年该去向何方?

当前的中国营养土与栽培基质行业,正处在一个混沌与希望交织的十字路口。一边是市场规模以两位数速度膨胀,全球设施农业、智慧农业带来前所未有的基础设施需求;另一边却是劣质原料泛滥、标准缺失引发的信任低谷。低价内卷、以次充好正在反噬整…...

YOLO11语义分割注意力机制改进:全网首发--使用CASAB多层注入增强多尺度特征筛选(方案3)

1. 工程简介 🚀 本工程基于 Ultralytics 框架扩展,面向语义分割与 YOLO 系列模型改进实验。核心特点是通过切换 yaml 配置文件,即可快速完成不同网络结构的训练、对比与验证,无需为每个模型单独编写训练脚本。 当前已支持的主要…...

5分钟掌握TranslucentTB:让你的Windows任务栏瞬间变透明的终极美化方案

5分钟掌握TranslucentTB:让你的Windows任务栏瞬间变透明的终极美化方案 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 厌倦了…...

大模型技术路线图:Transformer已不再是唯一选择,多方博弈下的未来趋势解读!

文章分析了当前大模型的技术演进格局,指出其已不再是单一方向的线性推进,而是形成了多条相互竞争、借鉴且底层数学趋同的路线。文章从主干序列建模、记忆与上下文扩展、规模化与系统实现三个层次详细剖析了自注意力、状态空间模型、线性递推、长卷积等不…...

从零构建AI Agent:新手必看!5种核心工作流+实战避坑指南

本文从AI Agent的核心运作原理出发,详细解析了LLM、工具和记忆的角色,并区分了工作流与Agent的适用场景。文章重点介绍了五种核心工作流模式(提示词链、路由、并行化、编排者-工作者、评估者-优化者),为新手提供了构建…...

推荐系统中的轻量级适配器头技术与多兴趣建模

1. 轻量级适配器头的技术背景与核心价值在当今推荐系统领域,用户兴趣建模正面临三个关键挑战:兴趣多样性、计算效率和模型可解释性。传统单一向量表示法(如双塔模型)难以捕捉用户的多维度兴趣,而完全端到端的多兴趣模型…...

Cognita开源RAG框架实战:构建企业级智能知识库的模块化方案

1. 项目概述:当向量数据库遇上RAG,Cognita如何重塑企业知识管理?最近在折腾企业级知识库和智能问答系统时,我几乎把所有主流的RAG(检索增强生成)框架都试了个遍。从早期的LangChain、LlamaIndex&#xff0c…...

如何用FanControl在5分钟内彻底掌控电脑风扇:新手必看的完全指南

如何用FanControl在5分钟内彻底掌控电脑风扇:新手必看的完全指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_T…...

DeepSeek-V4 爆发!无预告开源,百万上下文+华为昇腾,中国AI破局之战!

没有发布会,没有预告片,甚至没有任何铺垫——就在一个普普通通的周四中午,DeepSeek 直接在官网甩出了 V4 预览版和全套开源权重。 这种感觉,像极了它一年前的风格。这一次,不一样了 如果说 2025 年 1 月的 R1 是 DeepS…...

DeepSeek-V4横空出世!AI巨头争相接入,国产大模型引领算力浪潮!

百度正式发布DeepSeek-V4大模型并开源,分为Pro和Flash两个版本。寒武纪、AccioWork、摩尔线程等巨头纷纷完成适配,展现国产大模型强大能力。DeepSeek-V4在上下文处理、推理性能等方面领先,预计将推动国产算力发展,券商看好国产算力…...