stm32之DHT11

        今天,记录一下DHT11,涉及到了单总线协议,所以先花点时间谈论一下单总线协议(DS18B20也是用的单总线)。

单总线协议

 在这里插入图片描述

 单总线技术的通信协议

可能这时序图就是个例子,ds18b20的时序图与DHT11的时序图也是不一样的。

 

 DHT11

#ifndef __DHT11_H
#define __DHT11_H
#include "stm32f10x.h"                  // Device header#define DHT11_PORT 			GPIOC   
#define DHT11_PIN 			GPIO_Pin_10
#define DHT11_PORT_RCC		RCC_APB2Periph_GPIOC#define dht11_high GPIO_SetBits(GPIOC, GPIO_Pin_10)
#define dht11_low GPIO_ResetBits(GPIOC, GPIO_Pin_10)
#define Read_Data GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_10)void DHT11_GPIO_Init_OUT(void);
void DHT11_GPIO_Init_IN(void);
void DHT11_Start(void);
unsigned char DHT11_REC_Byte(void);
void DHT11_REC_Data(void);#endif
#include "stm32f10x.h"                  // Device header
#include  "dht11.h"
#include  "SysTick.h"
//数据
unsigned int rec_data[4];//对于stm32来说,是输出
void DH11_GPIO_Init_OUT(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP; //推挽输出GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_10;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStructure);}//对于stm32来说,是输入
void DH11_GPIO_Init_IN(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN_FLOATING; //浮空输入GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_10;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStructure);}//主机发送开始信号
void DHT11_Start(void)
{DH11_GPIO_Init_OUT(); //输出模式dht11_high; //先拉高delay_us(30);dht11_low; //拉低电平至少18usdelay_ms(20);dht11_high; //拉高电平20~40usdelay_us(30);DH11_GPIO_Init_IN(); //输入模式,可以说是释放总线
}//获取一个字节
char DHT11_Rec_Byte(void)
{unsigned char i = 0;unsigned char data;for(i=0;i<8;i++) //1个数据就是1个字节byte,1个字节byte有8位bit{while( Read_Data == 0); //从1bit开始,低电平变高电平,等待低电平结束delay_us(30); //延迟30us是为了区别数据0和数据1,0只有26~28usdata <<= 1; //左移if( Read_Data == 1 ) //如果过了30us还是高电平的话就是数据1{data |= 1; //数据+1}while( Read_Data == 1 ); //高电平变低电平,等待高电平结束}return data;
}//获取数据void DHT11_REC_Data(void)
{unsigned int R_H,R_L,T_H,T_L;unsigned char RH,RL,TH,TL,CHECK;DHT11_Start(); //主机发送信号dht11_high; //拉高电平if( Read_Data == 0 ) //判断DHT11是否响应{while( Read_Data == 0); //低电平变高电平,等待低电平结束while( Read_Data == 1); //高电平变低电平,等待高电平结束,耗费掉DHT11的响应输出R_H = DHT11_Rec_Byte();R_L = DHT11_Rec_Byte();T_H = DHT11_Rec_Byte();T_L = DHT11_Rec_Byte();CHECK = DHT11_Rec_Byte(); //接收5个数据dht11_low; //当最后一bit数据传送完毕后,DHT11拉低总线 50usdelay_us(55); //这里延时55usdht11_high; //随后总线由上拉电阻拉高进入空闲状态。if(R_H + R_L + T_H + T_L == CHECK) //和检验位对比,判断校验接收到的数据是否正确{RH = R_H;RL = R_L;TH = T_H;TL = T_L;}}rec_data[0] = RH;rec_data[1] = RL;rec_data[2] = TH;rec_data[3] = TL;
}
像DHT11响应输出,以及DHT11输出的0和1,这些是DHT11内部的控制器发出来的,我们不需要写时序去描述,只需要对DHT11输出的数据进行读取,判断即可
附录:
DHT11详细介绍(内含51和STM32代码)_安赫'的博客-CSDN博客
七、【中级篇】传感器DHT11、DHT22、DS18B20_dht22和dht11比较_十七阿哥的春天的博客-CSDN博客
16 STM32基础学习 DS18B20 温度与DHT11温湿度模块 - 古月居 (guyuehome.com)
【通信协议】1-Wire 单总线_淹死的大白鲨的博客-CSDN博客
DHT11 温湿度传感器_比特冬哥的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/110671.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我想开通期权?如何开通期权账户?

场内期权的合约由交易所统一标准化定制&#xff0c;大家面对的同一个合约对应的价格都是一致的&#xff0c;比较公开透明&#xff0c;期权开户当天不能交易的&#xff0c;期权开户需要满足20日日均50万及半年交易经验即可操作&#xff0c;下文科普我想开通期权&#xff1f;如何…

软件工程(十七) 行为型设计模式(三)

1、观察者模式 简要说明 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新 速记关键字 联动,广播消息 类图如下 基于上面的类图,我们来实现一个监听器。类图中的Subject对应我们的被观察对象接口(IObservable),…

开源与云计算:新的合作模式

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

SQL注入之宽字节注入

文章目录 宽字节注入是什么&#xff1f;注入练习让转义符失效联合查询 代码审计 宽字节注入是什么&#xff1f; 宽字节注入准确来说不是注入手法&#xff0c;而是另外一种比较特殊的情况。宽字节注入的目的是绕过单双引号转义。 宽字节注入是一种绕过单双引号转义的手段&#x…

HQL解决连续三天登陆问题

1.背景 统计连续登录天数超过3天的用户&#xff0c;输出信息包括&#xff1a;用户id&#xff0c;登录天数&#xff0c;起始时间&#xff0c;结束时间&#xff1b; 2.准备数据 -- 建表 create table if not exists user_login_3days(user_id STRING,login_date date );--插入…

基于PIC单片机篮球计分计时器

一、系统方案 本设计采用PIC单片机作为主控制器&#xff0c;矩阵键盘控制&#xff0c;比分&#xff0c;计时控制&#xff0c;24秒&#xff0c;液晶12864显示。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 2、液晶显示程序 /*************…

老Python程序员职业生涯感悟—写给正在迷茫的你

我来讲几个极其重要&#xff0c;但是大多数Python小白都在一直犯的思维错误吧&#xff01;如果你能早点了解清楚这些&#xff0c;会改变你的一生的。所以这一期专门总结了大家问的最多的&#xff0c;关于学习Python相关的问题来给大家聊。希望能带给大家不一样的参考。或者能提…

前端js实现获取指定元素(top,lef,right,bottom)到视窗的距离 ;getBoundingClientRect()获取

getBoundingClientRect()获取元素位置&#xff0c;这个方法没有参数 该函数返回一个Object对象&#xff0c;该对象有6个属性&#xff1a;top,lef,right,bottom,width,height&#xff1b; <div id"box"></div>var objectdocument.getElementById(box); …

【数据结构】树与二叉树

文章目录 &#x1f340;树型结构&#x1f431;‍&#x1f464;什么是树型结构&#x1f431;‍&#x1f453;树型结构的概念&#x1f431;‍&#x1f3cd;树的表示形式&#x1f431;‍&#x1f409;树的应用 &#x1f333;二叉树&#x1f431;‍&#x1f464;二叉树的概念&#…

计算机网咯——性能指标

常见性能指标 1.速率 2.带宽 3.吞吐量 4.时延 [外链图片转存失败,源站可 5.时延带宽积 6.往返时间 7.利用率 8.丢包率

SpringBoot初级开发--加入Log4j进行日志管理打印(6)

日志记录在整个java工程开发中占着很重要的比重&#xff0c;因为很多问题的排查需要通过日志分析才能确认。在SpringBoot中我用得最多的就是log4j这个日志框架。接下来我们具体配置log4j. log4j定义了8个级别的log&#xff08;除去OFF和ALL&#xff0c;可以说分为6个级别&#…

Python爬虫实战案例——第三例

文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff01;严禁将文中内容用于任何商业与非法用途&#xff0c;由此产生的一切后果与作者无关。若有侵权&#xff0c;请联系删除。 起点中文网月票榜加密字体处理 字体加密的原理&#xff1a;就是将一种特定的…

Python工具箱系列(四十一)

使用zip批量压缩文件 前文的代码示例了使用gzip对单个文件进行压缩。本文示例使用更通用的zipfile来批量压缩文件。zipfile也是python内置的库&#xff0c;使用起来非常方便。废话不说&#xff0c;直接上代码示例。 import dbm import glob import zipfile# 保存压缩计划的库名…

开发工具——IDE安装 / IDEA子module依赖导入失败编译提示xx找不到符号 / IDEA在Git提交时卡顿

近期换了工作电脑&#xff0c;公司的IT团队不够给力&#xff0c;不能复制电脑系统&#xff0c;所以又到了需要重装IDE配置开发环境的时候了&#xff1b;在安装和导入Java编译器IDEA的时候遇到一些"棘手"问题&#xff0c;这里整理下解决方法以备不时之需&#xff1b; …

Python爬虫框架之快速抓取互联网数据详解

概要 Python爬虫框架是一个能够帮助我们快速抓取互联网数据的工具。在互联网时代&#xff0c;信息爆炸式增长&#xff0c;人们越来越需要一种快速获取信息的方式。而Python爬虫框架就能够帮助我们完成这个任务&#xff0c;它可以帮助我们快速地从互联网上抓取各种数据&#xf…

Nginx-报错no live upstreams while connecting to upstream

1、问题描述 生产环境Nginx间歇性502的事故分析过程 客户端请求后端服务时一直报错 502 bad gateway&#xff0c;查看后端的服务是正常启动的。后来又查看Nginx的错误日志&#xff0c;发现请求后端接口时Nginx报错no live upstreams while connecting to upstream&#xff0c…

防御网络攻击风险的4个步骤

如今&#xff0c;人们正在做大量工作来保护 IT 系统免受网络犯罪的侵害。令人担忧的是&#xff0c;对于运营技术系统来说&#xff0c;情况却并非如此&#xff0c;运营技术系统用于运行从工厂到石油管道再到发电厂的所有业务。 组织应该强化其网络安全策略&#xff0c;因为针对…

Golang Gorm 一对多的添加

一对多的添加有两种情况&#xff1a; 一种是添加用户的时候同时创建文章其次是创建文章关联已经存在的用户。 package mainimport ("gorm.io/driver/mysql""gorm.io/gorm" )// User 用户表 一个用户拥有多篇文章 type User struct {ID int64Name …

华为数通方向HCIP-DataCom H12-821题库(单选题:101-120)

第101题 可用于多种路由协议,由 ​​if-match​​​和 ​​apply​​子句组成的路由选择工具是 A、​​route-policy​​ B、​​IP-Prefix​​ C、​​commnityfilter​​ D、​​as-path-filter​​ 答案&#xff1a;A 解析&#xff1a; Route-policy&#xff08;路由策…

Java代码通过经纬度计算省份。

直接上代码&#xff0c;需要市区县可自己解析 String areaName addressUtil.getPosition(longitude, latitude); package com.skyable.device.utils.velicle;import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import l…