STM32--DHT11(标准库)驱动开发

一、前言

在我们进行嵌入式开发时,驱动开发也是十分重要的一步,在很多时候,我们的都需要自己来编写硬件的底层驱动,实现硬件与芯片的通信,常见的协议有SPI,IIC,以及单总线的一些通信方式,今天我们就来开发DHT11驱动。

二、DHT11

在开发一款驱动前,我们需要知道他是干什么的,DHT11数字温湿度传感器,是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数 字模块采集技术和温湿度传感技术,确保产品具有枀高的可靠性与卓越的长期稳定性。传感器包括一 个电容式感湿元件和一个NTC 测温元件。

常用于,暖通空调、除湿器、农业、冷链仓储、测试及检测设备、消费品、汽车、自动控制、数据记录器、气 象站、家电、湿度调节器、医疗、其他相关湿度检测控制。

因其成本低、长期稳定、相对湿度和温度测量、品质卓越、超快响应、抗干扰能力强、超长的信号传输距 离、数字信号输出、精确校准,而广泛适用。

他有四个引脚,1脚为电源引脚,2脚为串行数据引脚(单总线),3脚为悬空NC,4脚为GND接地。以下是他的原理图。

在实际运用中,常将2脚与主控芯片相连接,我们这里以stm32F103C8T6为例,以下是它的电路连接图。

我们选择的是PA3脚,来作为我们的通信引脚,因此我们在编写程序时,也要选择我们的PA3脚,接下来我们就要进行驱动开发。

三、DHT11底层驱动开发

在开发任何一款驱动时,他们的数据手册,就是我们的开发依据,所有的时序以及通信方式,校验方式,我们都要依据他们的数据手册,开发DHT11也不例外,我们先在网上搜索DHT11数据手册,下载下来。

如果找不到,也可以用我下面这个:

百度网盘: https://pan.baidu.com/s/1MGWL-QDO7CBo2ZFKPBY-vQ?pwd=styz

提取码: styz

接着我们就可以开始我们的驱动编写了,我们打开CUBEMX,来创建一个工程文件。

接着我们创建两个文件夹,一个为DHT11.c一个为DHT11.h

我们引入头文件后我们开始解读我们的数据手册。

我们可以看到他有两个状态,当主机输出,以及主机输入状态,显然我们需要初始化我们的PA3引脚为两个状态。因此我们要创建两个函数,来封装这两个状态。

这样我们在改变模式的时候就可以直接调用函数就可以了。我们接着看数据手册。

我们可以看到,在开始接受数据之前我们需要输出低信号18ms,以代表起始信号,所以我们也需要在程序里编写。

我们在看上面的时序图,我们需要拉低电平,也就是输出低电平,为了方便后续的编写,我们可以直接定义一个函数。

这样我们就可以直接调用函数,然后按照起始信号的时序来编写就行。

这样我们就可以开始接受从机给我们发送命令了 ,我们继续看数据手册。

我们可以看到,这里的延时,变为了微秒级的延时,因此我们还需要自己写一个函数来实现微秒延迟。

这样一个简单的us延时就完成了。我们继续看数据手册,我们可以发现,当我们的DHT11开始输出低电平时则代表它响应了我们主机的信号。我们就可以用函数先判断引脚是否为低电平。

这样我们直接判断信号为高还是低,如果为低我们就直接改为输入模式,因为这时的DHT11为输出。因此我们还需要写输入逻辑。也就是发送数据的时序。

接下来我们就可以开始存数据了。我们为了便于使用,我们可以创建一个结构体变量。

根据数据手册,我们按照顺序创建结构体。

接着我们就可以使用他了,我们继续编写我们的读时序。

这样就完成了我们的读时序编写,最后我们只需要再写一个函数初始化我们的硬件。

这样我们的驱动就编写完成了,我们最后只需要在我们的DHT11.h中声明我们的函数就可以在外部调用我们的函数了。

这样我们可以读取数据了。

相关推荐
悠哉悠哉愿意6 小时前
【电赛学习笔记】MaixCAM 的OCR图片文字识别
笔记·python·嵌入式硬件·学习·视觉检测·ocr
慕容白 MU8 小时前
新唐51单片机看门狗配置流程
c语言·单片机·嵌入式硬件·51单片机
jingjing~10 小时前
STM32 软件模拟 I2C 读写 MPU6050--实现加速度与陀螺仪数据采集
stm32·单片机·嵌入式硬件
wearegogog12313 小时前
Arduino与STM32:初学者该如何选择?
stm32·单片机·嵌入式硬件
EVERSPIN14 小时前
新升级超值型系列32位单片机MM32G0005
单片机·嵌入式硬件
qq_4017004114 小时前
stm32的can总线
stm32·单片机·嵌入式硬件
蜡笔小电芯14 小时前
【CAN总线】STM32 的 CAN 总线通信开发笔记(基于 HAL)
笔记·stm32·单片机
景彡先生15 小时前
STM32系统定时器(SysTick)详解:从原理到实战的精确延时与任务调度
stm32·单片机·嵌入式硬件
F1372980155716 小时前
80V降5V,输出电流4A,应用于车载充电器WD5105
stm32·单片机·嵌入式硬件·51单片机