STM32F103--DHT11的配置

本文介绍了如何使用STM32F103单片机与DHT11温湿度传感器进行通信。内容包括DHT11的接口说明、通信时序分析、数据位识别方法,以及详细的配置步骤,如开启GPIO时钟、配置PB3为开漏输出等。同时,还提供了数据校验和读取40bit数据的详细过程。
摘要由CSDN通过智能技术生成

对DHT11的使用,就是编写时序和stm32进行通信。
DHT11和stm32是通过一根线进行通信的,双方通过这根线上的电平变化来识别各种信号。DHT11的供电电压为 3-5.5V。传感器上电后,要等待 1s 以越过不稳定状态在此
期间无需发送任何指令。

接口说明

在这里插入图片描述

串行接口 (单线双向)

DATA 用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一
次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数
部分用于以后扩展,现读出为零.操作流程如下:一次完整的数据传输为40bit,高位先出。
数据格式:8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验和数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bit
温度整数数据+8bit温度小数数据”所得结果的末8位。

在这里插入图片描述
校验= byte4+ byte3+ byte2+ byte1=73(=湿度+温度)(校验正确)

时序分析

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210621213443790.png

总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必
须大于18毫秒,保证DHT11能检测到起始信号。DHT11接收到主机的开始信号后,
等待主机开始信号结束,然后发送80us低电平响应信号.主机发送开始信号结束后,
延时等待20-40us后, 读取DHT11的响应信号,主机发送开始信号后,可以切换到输
入模式,或者输出高电平均可, 总线由上拉电阻拉高。
在这里插入图片描述

总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线
拉高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短定了
数据位是0还是1.格式见下面图示.如果读取响应信号为高电平,则DHT11没有响
应,请检查线路是否连接正常.当最后一bit数据传送完毕后,DHT11拉低总线50us,
随后总线由上拉电阻拉高进入空闲状态。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一次通信的过程: 主机发送开始信号,DHT11回响应,等待DHT11测量,读取DHT11测量结果、结束一次通信

DATA的空闲状态是高电平 开始信号:主机把DATA拉低并且保持至少18ms后拉高DATA结束开始信号
等待DHT11响应:等待DATA被DHT11拉低 等待响应结束:等待DATA被DHT11拉高
等待DHT11测量结束后发送数据:
等待DATA被DHT11拉低 连续判断40位数据 解析数据,判断数据准确性

如何区分数据位是‘0’还是‘1’

在这里插入图片描述
在这里插入图片描述
虽然‘0’和‘1’都是高电平,但是表示‘0’的高电平时间在26us到28us之间,而表示‘1’高电平时间为70us。可以延时大于28us时间再读取引脚的状态,如果高电平则为表示‘1’,低电平为表示‘0’。

DHT11程序步骤。

1.开GPIOX时钟和AFIO时钟

GPIOX中的X为引脚的组别

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB,ENABLE);

2.释放PB3(禁止JTAG启用SW)

在这里插入图片描述

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);

3.PB3配置为开漏输出

    GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_OD; //配置为开漏
	GPIO_InitStruct.GPIO_Pin
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梨花落-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值