STM32基础学习笔记-DHT11单总线协议面试基础题7

第七章、DHT11: 单总线协!议

在这里插入图片描述
在这里插入图片描述

常见问题
1、DHT11是什么 ?有什么特性 ?
2、单总线协议是什么 ?原理 ?DHT11的单总线协议的组成 ?
## 1、DHT11定义 单总线协议是一种用于在多个设备之间进行通信的协议,所有设备共享同一条数据线(总线),通过特定的时序和信号来区分不同设备的通信。

原理:

单总线协议通过在同一条数据线上发送和接收数据,利用时序控制和信号电平来实现设备之间的通信。每个设备在总线上都有唯一的地址,主设备通过发送特定的命令来选择与之通信的从设备。

DHT11温湿度传感器使用单总线协议进行数据传输,其协议主要包括以下几个部分:

起始信号:主设备向DHT11发送一个起始信号,持续约18毫秒,表示开始通信。

应答信号:DHT11在接收到起始信号后,发送一个应答信号,持续约20-40微秒,表示准备好发送数据。

数据传输:DHT11通过单总线发送40位数据,包括湿度和温度信息。每位数据由一个高电平和一个低电平组成,具体时长决定了数据位的值(0或1)。

校验位:最后,DHT11发送一个校验位,用于验证数据的完整性。

2、微秒延时在其中的作用 ?

时序控制:在数据传输过程中,微秒级的延时确保了主设备和从设备之间的时序同步,避免数据丢失或错误。

信号稳定:在发送和接收信号之间的延时可以确保信号在总线上稳定,避免由于信号抖动导致的误读。

数据完整性:通过精确控制延时,可以确保每一位数据的发送和接收都在预定的时间窗口内完成,从而提高数据的完整性和可靠性。

3、如何实现微秒延时 ?

1.使用循环延时

通过空循环来实现延时,适用于简单的延时需求,但不够精确。

void delay_us(unsigned int us) {for (unsigned int i = 0; i < us; i++) {// 根据具体的系统时钟频率调整循环次数for (volatile int j = 0; j < 10; j++);
}   
}

2. 使用定时器

使用硬件定时器可以实现更精确的延时。

void delay_us(unsigned int us) {    // 配置定时器TIM2->PSC = 72 - 1; // 预分频,假设系统时钟为72MHzTIM2->ARR = us;     // 设置自动重装载寄存器TIM2->CNT = 0;      // 清零计数器TIM2->CR1 |= TIM_CR1_CEN; // 启动定时器while (!(TIM2->SR & TIM_SR_UIF)); // 等待更新中断标志位TIM2->SR &= ~TIM_SR_UIF; // 清除更新中断标志位  }

3. 使用系统时钟

如果系统支持,使用系统时钟的延时函数(如 HAL_Delay())可以实现毫秒级延时,结合其他方法实现微秒级延时。

4. 使用专用延时库

一些嵌入式开发环境提供了专用的延时库,可以直接调用。

注意事项:

精度:使用循环延时时,延时的精度受编译器优化和系统时钟频率影响,可能不够准确。

中断:在延时期间,可能会影响中断的响应,特别是使用循环延时时。

系统负载:在高负载情况下,延时可能会受到影响,使用定时器通常更可靠。



4、DHT11

(本质也是一个滑动变阻器,把外界的环境信息转化成电压值,内部的一个高级一点的芯片把电压值转化成ADC,又通过内部的计算,把这个转化成十进制)

检测外部温度/湿度信号,当有数据后,

会通过某种通讯协议,发送给主设备,G030拿到数据后自己分析,通过公式转化得到温度和湿度。这是一种传感器;;另一种传感器是DHT11内部直接转化,得到当前的温度和湿度,再传给G030,节省了一步计算(也就是节省了一部分性能)

三根引脚,第一根是VCC,3.3V/5V 第三根是GND(0V),中间的一根是Data数据线,默认使用单总线协议,这是一种通讯方式;

5、通讯的分类

单工/全双工/半双工 串行/并行 同步/异步

单总线协议的一般形式:

主机:发送开始信号(18ms的低电平)

从机:给出一个反馈(响应信号是一个低电平,低电平的时间是30us)

从机:发送数据给主机(温度/湿度)

正常数据都由0/1组成,而这里0:由一段电平组成,就是20us的低电平和50us的高电平认定为0; 1由一段电平组成—50us的低电平,50us的高电平-----单总线只有一根线,不参考GND的数据的发送,核心点在于高低电平的时长

主机:停止信号

**

6、实验

**
移植步骤

1、写项目框架: printf移植框架

2、 移植 dht11 的 .c/.h 到项目中

3、 在keil中 添加 dht11.c 文件

4、 增加定时器14,写微秒延时函数

5、确定GPIO_CLK时钟被打开(开启PA8 输出模式)

6、 DTH11单总线协议

开始+响应+4字节数据+1字节校验

毫秒级延时 —》 tim14

// DHT11代码移植

void delay_us(uint16_t nus){    
//  DHT11 微秒延时__HAL_TIM_SetCounter(&htim14,0);__HAL_TIM_ENABLE(&htim14);while( __HAL_TIM_GetCounter(&htim14)< nus);__HAL_TIM_DISABLE(&htim14);}//  核心代码FS_DHT11_Init();              uint8_t humiH,humiL,tempH,tempL;while (1){
DHT11_Read_Data(&humiH,&humiL,&tempH,&tempL);printf("湿度:%d.%d    温度:%d.%d \r\n",humiH,humiL,tempH,tempL);HAL_Delay(1000);}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Calcite第一课

Calcite 是什么&#xff1f; 2024 年 9 月&#xff0c;最新版本 1.37.0 。前面三节我们先不看任何的源码&#xff0c;只从背景、介绍、概念、原理层面入手&#xff0c;作为深入学习和源码分析的预备。 如果用一句话形容 Calcite&#xff0c;Calcite 是一个用于优化异构数据源的…

2024年CSP-J认证 CCF信息学奥赛C++ 中小学初级组 第一轮真题-阅读程序题解析

2024 CCF认证第一轮&#xff08;CSP-J&#xff09;真题 二、阅读程序题 (程序输入不超过数组或字符串定义的范围&#xff0c;判断题正确填√错误填X;除特殊说明外&#xff0c;判断题 1.5分&#xff0c;选择题3分&#xff0c;共计40 分) 第一题 01 #include <iostream>…

【C++进阶】2024年了set、map还搞不懂底层细节?

&#x1f680;个人主页&#xff1a;小羊 &#x1f680;所属专栏&#xff1a;C 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 一、前情提要1、什么是关联式容器&#xff1f;2、键值对又是什么&#xff1f; 二、树形结构的关联式容器1、set1.1…

在不受支持的 Mac 上安装 macOS Sequoia (OpenCore Legacy Patcher v2.0.1)

在不受支持的 Mac 上安装 macOS Sequoia (OpenCore Legacy Patcher v2.0.1) Install macOS on unsupported Macs 请访问原文链接&#xff1a;https://sysin.org/blog/install-macos-on-unsupported-mac/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主…

【CoppeliaSim V4.7】The Python interpreter could not handle the wrapper script

[sandboxScript:error] The Python interpreter could not handle the wrapper script (or communication between the launched subprocess and CoppeliaSim could not be established via sockets). Make sure that the Python modules ‘cbor2’ and ‘zmq’ are properly i…

【C++】stack和queue的使用及模拟实现

stack就是栈的意思&#xff0c;这个结构遵循后进先出(LIFO)的原则&#xff0c;可以将栈想象为一个子弹夹&#xff0c;先进去的子弹后出来。 queue就是队列的意思&#xff0c;这个结构遵循先进先出(FIFO)的原则&#xff0c;可以将对列想象成我们排队买饭的场景&#xff0c;先排…

Shopee 大促想爆单如何准备?EasyBoss ERP为你准备了一份攻略!

Shopee下半年第二个大促节点——10.10品牌大促即将来到&#xff0c;根据Shopee的官方的数据&#xff0c;9.9大促当天&#xff0c;Shopee Mall单量增至平日4倍。 老板们&#xff0c;准备好自己的热卖爆款冲击10.10大促了吗&#xff1f; 图源&#xff1a;Shopee 为助力大家迎战大…

大模型速通LLM神书来了《从头开始构建大型语言模型》,尚未发布,GitHub标星22k!!

这本大模型书籍资料已经上传CSDN&#xff0c;朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】 本书介绍 《从零构建大模型》是一本即将于今年10月底发布的书籍&#xff0c;github已经吸引了惊人的21.7k标星&#xff01;作者是威斯康星大学麦迪逊分…

N个utils(类加载-初始化-序列化)

fasterxml.jackson.databind.ObjectMapper(springboot本身就集成了) public class ObjectMapper {// 公共的ObjectMapper对象public static com.fasterxml.jackson.databind.ObjectMapper mapper new com.fasterxml.jackson.databind.ObjectMapper();/*** Description: 将数据…

推荐一款开源的链路监控系统

12.9k star&#xff0c;最强链路监控系统推荐&#xff0c;推荐 用过cat、pinpoint、skywalking等链路监控系统&#xff0c;各有优劣&#xff0c;但用的最多的还是pinpoint&#xff0c;工作6年&#xff0c;其中有4年都在用pinpoint&#xff0c;所以也比较熟悉&#xff0c;之前也…

鸿蒙界面开发——组件(10):单选框Radio复选框checkbox 下拉框select 多条件筛选Filter

单选框Radio 单选框一直会有这个圆圈&#xff0c;在选中和未选中之间切换状态。 Radio通过调用接口来创建&#xff0c;接口调用形式如下&#xff1a; Radio(options: RadioOptions) Radio(options: {value: string, group: string ,indicatorType:RadioIndicatorType,(新增) …

NET 7 AOT 的使用以及+NET 与 Go 互相调用

目录 背景 C# 部分 环境要求 创建一个控制台项目 体验 AOT 编译 C# 调用库函数 减少体积 C# 导出函数 C# 调用 C# 生成的 AOT Golang 部分 安装 GCC Golang 导出函数 .NET C# 和 Golang 互调 C# 调用 Golang Golang 调用 C# 其他 背景 其实&#xff0c;规划这篇文章有一段时间了…

AI产品经理必知的133个专业术语

一、机器学习与数据科学 1、监督学习&#xff08;Supervised Learning&#xff09; 监督学习是机器学习的一种形式&#xff0c;其中模型通过带标签的数据集进行训练。训练数据包括输入特征&#xff08;X&#xff09;和对应的输出标签&#xff08;Y&#xff09;&#xff0c;模…

哪个牌子的麦克风好?选购无线麦克风必看的五大隐藏风险

随着短视频行业的兴起。短视频已经成为我们日常生活的一个重要表达载体&#xff0c;同时无线麦克风也是正式进入到了我们的视野之中&#xff0c;这种麦克风凭借没有线材束缚、兼容性更好、拾音更好的特性&#xff0c;成为了不少短视频创作者必不可少的“搭档之一”&#xff0c;…

uniapp APP自动更新组件

在uniapp中实现APP自动更新功能&#xff0c;主要涉及到客户端在功能不断迭代过程中&#xff0c;需要进行自动更新。uniapp一个详细的实现步骤&#xff0c;包括客户端和服务器端的配置&#xff1a; 服务器端配置 版本信息管理 服务器端需要维护一个数据库或配置文件&#xff…

C语言-动态内存分配讲解

目录 ✨1.什么是动态内存分配 &#x1f495;2.动态内存开辟函数 malloc ✨3.malloc函数的检查&#xff08;两种方法&#xff09; &#x1f495;4.动态内存释放函数 free ✨5.free 函数接收空指针 ✨6.为什么要释放动态内存 &#x1f495;7.动态内存开辟函数calloc &#…

【优选算法之位运算】No.7--- 经典位运算算法

文章目录 前言一、位运算几种模型&#xff1a;1.1 基础的位运算&#xff1a; << >> ~ & | ^1.2 几种模型&#xff1a;1.3 模型练习 二、位运算示例&#xff1a;2.1 判定字符是否唯⼀2.2 丢失的数字2.3 两整数之和2.4 只出现⼀次的数字 II2.5 消失的两个数字 前…

STM32G474使用DMA和SPI1实现自发自收

STM32G474使用DMA搬运数据&#xff0c;实现SPI自发自收&#xff0c;验证SPI收发是否正常。测试时&#xff0c;需要将SPI1_MISO和SPI1_MOSI短接。SPI1外设用作主机&#xff0c;其接口&#xff1a;将SPI1_SCK映射到PA5,SPI1_MISO映射到PA6,SPI1_MOSI映射到PA7,SPI1_NSS映射到PA4。…

基于PHP+MySQL组合开发地方门户分类信息网站源码系统 带完整的安装代码包以及搭建部署教程

系统概述 随着互联网技术的飞速发展&#xff0c;地方门户分类信息网站逐渐成为城市生活不可或缺的一部分。它们涵盖了房产、招聘、二手交易、生活服务等多个领域&#xff0c;为当地居民提供了全方位的信息服务。为了满足这一市场需求&#xff0c;我们开发了这款基于PHPMySQL的…

2015年国赛高教杯数学建模A题太阳影子定位解题全过程文档及程序

2015年国赛高教杯数学建模 A题 太阳影子定位 技术就是通过分析视频中物体的太阳影子变化&#xff0c;确定视频拍摄的地点和日期的一种方法。   1.建立影子长度变化的数学模型&#xff0c;分析影子长度关于各个参数的变化规律&#xff0c;并应用你们建立的模型画出2015年10月…