前言
1、DHT11概述
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。产品为4 针单排引脚封装。
DHT11的供电电压为 3-5.5V。传感器上电后,要等待 1s 以越过不稳定状态在此期间无需发送任何指令。电源引脚(VDD,GND)之间可增加一个100nF 的电容,用以去耦滤波。
接口说明:
2、串行接口 (单线双向)
DATA 用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,当前小数部分用于以后扩展,现读出为零。
- 操作流程如下:一次完整的数据传输为40bit,高位先出。数据格式:
8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验和
。数据传送正确时校验和数据等于“8bit 湿度整数数据+8bit 湿度小数数据+8bit温度整数数据+8bit 温度小数数据”所得结果的末8位。注:传感器数据输出的是未编码的二进制数据。数据(湿度、温度、整数、小数)之间应该分开处理。如下图所示:
- 用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据。从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集。采集数据后转换到低速模式。
(1)通讯过程
- 总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号。DHT11接收到主机的开始信号后,等待主机开始信号结束,然后发送80us低电平响应信号。主机发送开始信号结束后,延时等待20-40us后,读取DHT11的响应信号,主机发送开始信号后,可以切换到输入模式,或者输出高电平均可, 总线由上拉电阻拉高。(IO口被配置为开漏输出时,并且输出高电平,那么与浮空输入的特性是一样的)
-
总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线拉高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短定了数据位是0还是1。格式见下面图示。如果读取响应信号为高电平,则DHT11没有响应,请检查线路是否连接正常。当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态。
-
数字0信号及数字1信号表示方法,如下图所示:
延时50us去读数据线,如果读出来的是高电平那么就是数据1,反之就是数据0。
一、串口打印温湿度
现象:串口助手接收到USART1发送过来的温湿度数据。
步骤:
1、开GPIOB时钟和AFIO时钟。
2、释放PB3(禁止JTAG启用SW)。
3、PB3配置为开漏输出。
4、主机发送开始信号。
5、等待DHT11响应信号。
6、跳过测量时间去读取DHT11输出的数据(一次性需要将40bit全部读出来)。
7、校验(将温度整数数据+小数数据+湿度整数数据+小数数据 与 最低8bit的数据做比较,如果不相等代表数据误差过大,反之数据准确)。
在STM32的中文参考手册中可以发现PB3是JTAG/SWD
复用功能重映射。所以需要使用GPIO_PinRemapConfig函数来改变指定管脚的映射(可查看STM32固件库使用手册了解详情)。
2、编写dht11.c文件。
#include "dht11.h"
//DHT11初始化函数
//DHT11:DATA--PB3
void Dht11_Init(void)
{
//1、开GPIOB组和AFIO时钟
RCC_APB2PeriphClockCmd