当前位置: 首页 > news >正文

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

        

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

http://www.dtcms.com/a/304676.html

相关文章:

  • AI崛起后,对使用AI的一些小思考
  • LaTeX 下载安装保姆级教程
  • 异形设备前端适配挑战:条形屏/嵌入式终端的布局弹性与触控热区重构
  • 直播间里的酒旅新故事:内容正在重构消费链路
  • 亚马逊 Vine 计划:评论生态重构与合规运营策略
  • 《UE教程》第一章第九回——地图BGM
  • Kafka运维实战 17 - kafka 分区副本从 1 增加到 3【实战】
  • 减速机:自动化生产线的“精密传动心脏”
  • 网站备案号被注销了,怎么重新备案
  • 博弈论03——混合纳什均衡的收益求法
  • 76.最小覆盖子串
  • 线性回归原理与进阶
  • MySQL数据库 mysql常用命令
  • pvc怎么扩容
  • 深入解析Java元注解与运行时处理
  • Linux之网络部分-应用层协议 HTTP
  • 【RK3588部署yolo】算法篇
  • StackingClassifier参数详解与示例
  • 博创软件数智通OA平台:高效协同,安全办公新选择
  • 深度学习 目标检测常见指标和yolov1分析
  • Xilinx高性能低延时PCIe-DMA控制器IP,SGDMA,QDMA,RDMA,CDMA,V4L2驱动,视频采集、AD采集
  • ubuntu:运行gcfsd-admin守护进程需要认证,解决方法
  • Python 程序设计讲义(28):字符串的用法——格式化字符串:format()方法
  • python中的 @dataclass
  • Java函数式接口深度解析与应用
  • 机器学习笔记(四)——聚类算法KNN、Kmeans、Dbscan
  • 苏州工作机会:迈为股份子公司宸微半导体设备招聘技术文档工程师
  • 2025年AI大模型产业化技术突破,AI 大模型成本骤降 95%?
  • vulhub 02-Breakout靶场攻略
  • Android系统开发 在Android10版本的Framework中添加系统服务