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中声明我们的函数就可以在外部调用我们的函数了。

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

相关推荐
Zevalin爱灰灰19 小时前
能源与电源管理电路——防倒灌电路
单片机·嵌入式硬件·电源管理
jianqiang.xue21 小时前
ESP-IDF保姆级入门02|Ubuntu24.04搭建EIM-GUI开发环境,打通Windows_Linux双平台统一开发
stm32·单片机·物联网
无垠的广袤1 天前
【工业树莓派 CM0 Dev Board】扩展板设计
linux·python·嵌入式硬件·pcb设计·模块化·传感器
嵌入式-老费1 天前
esp32开发与应用(添加数据分区)
单片机·嵌入式硬件
阿扬ABCD1 天前
ipmitool的Windows版本编译
windows·驱动开发
嵌入式-老费1 天前
esp32开发与应用(OTA升级)
嵌入式硬件
CYLAM20251 天前
STC32G 单片机0.96“OLED 西历农历可调万年历 (1901-2100)
单片机·嵌入式硬件·stc32g·万年历·西历农历·0.96”oled 12864·4x4 矩阵键盘
Discipline~Hai1 天前
ARM03-蜂鸣器和中断
c语言·arm开发·单片机·嵌入式硬件·嵌入式
KaifuZeng1 天前
电源面试问题汇总一
单片机·嵌入式硬件·面试·电路
驱动探索者1 天前
RISC-V PLIC 深度解析:从 Spec 到 Zephyr 驱动实现
单片机·嵌入式硬件·中断控制器