STM32之温湿度DHT11驱动

  • DHT11 API
  • 原文件 dht11.c
  • 头文件 dht11.h

DHT11 API

原文件 dht11.c

  • u8 DHT11_Init(void);
    初始化DHT11
  • u8 DHT11_Read_Data(u8 *temp,u8 *humi);
    读取温湿度
  • u8 DHT11_Read_Byte(void);
    读出一个字节
  • u8 DHT11_Read_Bit(void);
    读出一个位
  • u8 DHT11_Check(void);
    检测是否存在DHT11
  • void DHT11_Rst(void);
    复位DHT11
#include "dht11.h"//复位DHT11
void DHT11_Rst(void)
{                 DHT11_IO_OUT();   //SET OUTPUTDHT11_DQ_OUT=0;    //拉低DQdelay_ms(20);     //拉低至少18msDHT11_DQ_OUT=1;  //DQ=1 delay_us(30);       //主机拉高20~40us
}//等待DHT11的回应
//返回1:未检测到DHT11的存在
//返回0:存在
u8 DHT11_Check(void)
{   u8 retry=0;DHT11_IO_IN();//SET INPUT    while (DHT11_DQ_IN&&retry<100)//DHT11会拉低40~80us{retry++;delay_us(1);};     if(retry>=100)return 1;else retry=0;while (!DHT11_DQ_IN&&retry<100)//DHT11拉低后会再次拉高40~80us{retry++;delay_us(1);};if(retry>=100)return 1;      return 0;
}//从DHT11读取一个位
//返回值:1/0
u8 DHT11_Read_Bit(void)
{u8 retry=0;while(DHT11_DQ_IN&&retry<100)//等待变为低电平{retry++;delay_us(1);}retry=0;while(!DHT11_DQ_IN&&retry<100)//等待变高电平{retry++;delay_us(1);}delay_us(40);//等待40usif(DHT11_DQ_IN)return 1;else return 0;
}//从DHT11读取一个字节
//返回值:读到的数据
u8 DHT11_Read_Byte(void)
{        u8 i,dat;dat=0;for (i=0;i<8;i++) {dat<<=1; dat|=DHT11_Read_Bit();}                          return dat;
}//从DHT11读取一次数据
//temp:温度值(范围:0~50°)
//humi:湿度值(范围:20%~90%)
//返回值:0,正常;1,读取失败
u8 DHT11_Read_Data(u8 *temp,u8 *humi)
{        u8 buf[5];u8 i;DHT11_Rst();if(DHT11_Check()==0){for(i=0;i<5;i++)//读取40位数据{buf[i]=DHT11_Read_Byte();}if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4]){*humi=buf[0];*temp=buf[2];}}else return 1;return 0;
}//初始化DHT11的IO口 DQ 同时检测DHT11的存在
//返回1:不存在
//返回0:存在
u8 DHT11_Init(void)
{    GPIO_InitTypeDef  GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  //使能PA端口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;                //PA0端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;          //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);              //初始化IO口GPIO_SetBits(GPIOA,GPIO_Pin_0);                         //PA0 输出高DHT11_Rst();  //复位DHT11return DHT11_Check();//等待DHT11的回应
}

头文件 dht11.h

#ifndef __DHT11_H
#define __DHT11_H
#include "sys.h"
#include "delay.h"//PA.11
//IO方向设置   L H
#define DHT11_IO_IN()  {GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=8;}
#define DHT11_IO_OUT() {GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=3;}IO操作函数
#define DHT11_DQ_OUT PAout(0) //数据端口    PA0
#define DHT11_DQ_IN  PAin(0)  //数据端口    PA0 u8 DHT11_Init(void);//初始化DHT11
u8 DHT11_Read_Data(u8 *temp,u8 *humi);//读取温湿度
u8 DHT11_Read_Byte(void);//读出一个字节
u8 DHT11_Read_Bit(void);//读出一个位
u8 DHT11_Check(void);//检测是否存在DHT11
void DHT11_Rst(void);//复位DHT11    #endif

STM32之温湿度DHT11驱动相关推荐

  1. 单片机课程设计:基于STM32的温湿度检监测报警系统的设计

    基于STM32的温湿度检监测报警系统 文章目录 基于STM32的温湿度检监测报警系统 前言 一.设计任务 二.系统硬件设计 1.元器件选用 2.系统模型设计 3.硬件连接 二.系统程序设计 1.程序流 ...

  2. 基于stm32的温湿度检测案例串口通信屏显示(二)

    文章目录 前言 一.串口通信屏幕 二.DHT11测试效果与说明 三.读入数据 四.串口及中断配置 五.屏幕上显示数据 5.1.屏幕内嵌指令 5.2.静态数据 5.3.动态数据 六.效果 前言 因为st ...

  3. 15、基于STM32的温湿度超限报警器

    15.基于STM32的温湿度超限报警器 引言 1系统概述 1.1设计任务 1.2设计要求 2 方案设计与论证 2.1芯片选择方案 2.2 系统概述 2.3设计要求: 2.4系统总体设计思路 2.5各功 ...

  4. 基于STM32环境温湿度监测系统设计

    基于STM32环境温湿度监测系统设计 1. 实验目的 2. 任务和要求 3. proteus仿真图 4. 实验代码 1. 实验目的 (1) 掌握使用 KEIL MDK5 进行软件开发的具体流程: (2 ...

  5. stm32+HTU21D温湿度传感器通过usart1发送温湿度数据在串口助手显示

    stm32+HTU21D温湿度传感器 这里就不拍实物图了,我用的是下面这款HTU21D ic是stm32f103vet6 工程代码是io口模拟i2c和传感器通讯 PB6-SCL,PB7-SDA usa ...

  6. 【STM32】 硬件IIC 驱动SSD1302(0.96 OLED模块) -- 3/4 OLED的命令表 学习

    书接上回 文章1:[STM32] 硬件IIC 驱动SSD1306(0.96 OLED模块) – 1/4 库函数 学习 文章2:[STM32] 硬件IIC 驱动SSD1302(0.96 OLED模块) ...

  7. 【STM32】实战3.1—用STM32与TB6600驱动器驱动42步进电机(一)

    目录 0 参考资料出处 1 实验预期效果 2 硬件学习 2.1 TB6600驱动器 2.1.1 通过拨码开关设定细分与电流 2.1.2 共阴共阳接线法 2.2 开关电源(AC转DC变压器)& ...

  8. WS2812灯珠(三)-- STM32 PWM+DMA方式驱动

    WS2812灯珠(三)-- STM32 PWM+DMA方式驱动 文章目录 WS2812灯珠(三)-- STM32 PWM+DMA方式驱动 一.理论 二.代码实践 一.理论 PWM输出就是对外输出脉宽( ...

  9. STM32模拟IIC协议驱动AD7991/AD7995/AD7999芯片

    STM32模拟IIC协议驱动AD7991/AD7995/AD7999芯片 AD7991/AD7995/AD7999是12位/10位/8位 4通道模拟输入的AD转换芯片 通信方式采用的是:I2C 芯片供 ...

最新文章

  1. java IO流文件的读写具体实例
  2. 牛顿的另一面:夺权、严惩罪犯,以一己之力挽救英国危机
  3. ABP学习 解决:Update-Database : 无法将“Update-Database”项识别为 cmdlet、函数、脚本文件或可运行程序的名称的问题...
  4. Python常见问题(4):Python库与扩展 Library and Extension FAQ
  5. iNeuOS工业互联平台,生产过程业务联动控制
  6. 分享百度文库提交成功的八大因素
  7. 面试题-ASP 与 ASP.Net的区别?
  8. 上下伸缩代码_CQRS之旅——旅程4(扩展和增强订单和注册限界上下文)
  9. 嵌入式仿真平台SkyEye的覆盖率分析
  10. 指针数组、数组指针、指针函数、函数指针
  11. MVI - 继续来凑个热闹
  12. 105 基于socketserver实现并发的socket编程
  13. 汉语言文学如何利用计算机思维,计算机在应用于汉语言文学时产生的优势与局限.PDF...
  14. 模块参考资料-硬件资料-Air720UG/UH
  15. agent实现apm上报
  16. 如何重装系统(小白系列-超详细的手把手教你-图文并茂-WIN7,8,10,XP)
  17. 【HTML】设置页面字体
  18. 将页面中的指定 div 下载为图片
  19. ELS3120代替品MPCS-341 3A 光电耦合器 用于IGBT/MOSFET隔离栅极驱动芯片
  20. Android 4.4Phone的变化(二)

热门文章

  1. 泡利不相容原理适用的空间范围(系统)是多大?
  2. [Practical.Vim(2012.9)].Drew.Neil.Tip52 学习摘要
  3. C++程序员发展方向
  4. 南京邮电大学微型计算机原理与接口技术答案,微型计算机原理与接口技术南京邮电大学...
  5. CodeVS 1697-⑨要写信
  6. 001_wz_bbk_GCC的介绍与发展历史
  7. 计算机缺失d3dcompiler43.dll,电脑d3dcompiler43.dll文件丢失怎么解决?
  8. 大数据如此火爆 如何看待大数据行业发展趋势
  9. ArcGIS Server 注册私有云存储并发布影像切片服务
  10. MySQL_day2笔记