STM32+DHT11读取温湿度数据显示

发布者:DreamySunset最新更新时间:2022-10-17 来源: csdn关键字:STM32  DHT11 手机看文章 扫描二维码
随时随地手机看文章

一、环境介绍

MCU:  STM32F103C8T6


温湿度模块: DHT11


开发软件: Keil5


源码下载地址:  https://download.csdn.net/download/xiaolong1126626497/18263569


二、DHT11介绍

DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。


它应用专用的数字模块采集技术和温湿度传感技术, 确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。


每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。


单线制串行接口, 使系统集成变得简易快捷。超小的体积、极低的功耗, 信号传输距离可达20米以上, 使其成为各类应用甚至最为苛刻的应用场合的最佳选则。


产品为 4 针单排引脚封装。 连接方便, 特殊封装形式可根据用户需求而提供。



应用领域

►暖通空调


►测试及检测设备

►汽车


►数据记录器

►消费品


►自动控制

►气象站


►家电

►湿度调节器


►医疗

►除湿器

三、核心代码

3.1  dht11.c

#include "dht11.h"

#include "delay.h"

 

//复位DHT11

void DHT11_Rst(void)    

{                 

  DHT11_IO_OUT(); //SET OUTPUT

    DHT11_DQ_OUT=0; //拉低DQ

    DelayMs(20);    //拉低至少18ms

    DHT11_DQ_OUT=1; //DQ=1 

  DelayUs(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++;

DelayUs(1);

};  

if(retry>=100)return 1;

else retry=0;

    while (!DHT11_DQ_IN&&retry<100)//DHT11拉低后会再次拉高40~80us

{

retry++;

DelayUs(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++;

DelayUs(1);

}

retry=0;

while(!DHT11_DQ_IN&&retry<100)//等待变高电平

{

retry++;

DelayUs(1);

}

DelayUs(40);//等待40us

if(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)

{

RCC->APB2ENR|=1<<2;    //使能PORTA口时钟 

GPIOA->CRL&=0XFF0FFFFF;//PORTA.11 推挽输出

GPIOA->CRL|=0X00300000;

GPIOA->ODR|=1<<5;      //输出1     

DHT11_Rst();

return DHT11_Check();

}


3.2 dht11.h

#ifndef __DHT11_H

#define __DHT11_H 

#include "sys.h"   

    

//IO方向设置

#define DHT11_IO_IN()  {GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=0x00800000;}

#define DHT11_IO_OUT() {GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=0x00300000;}

 

IO操作函数    

#define DHT11_DQ_OUT PAout(5) //数据端口 PA5

#define DHT11_DQ_IN  PAin(5)  //数据端口 PA5

 

 

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


3.3 main.c

#include "stm32f10x.h"

#include "delay.h"

#include "led.h"

#include "sys.h"

#include "usart.h"

#include

#include

#include "timer.h"

#include "adc.h"

#include "dht11.h"

 

int main(void)

{

  u8 Temperature,Humidity;

LED_Init();  //初始化LED

USARTx_Init(USART1,72,115200);//串口1的初始化

  DHT11_Init();

  

while(1)

{

LED1=!LED1;

     if(DHT11_Read_Data(&Temperature,&Humidity) == 0)

     {

       printf("温湿度: %d,%dn",Temperature,Humidity);

     }

     DelayMs(500);

}

}

关键字:STM32  DHT11 引用地址:STM32+DHT11读取温湿度数据显示

上一篇:STM32+果云GA6-GPRS/GSM模块+MQTT+HTTP协议连接中移OneNet上传GPS数据定位
下一篇:STM32+ESP8266+MQTT协议连接OneNet物联网平台

推荐阅读最新更新时间:2024-11-05 10:21

GPIO工作模式详解
STM32中每组由16个IO,不同的型号IO分组不一样,比如STM32F407ZGT6 一共有7组IO口, 每组IO口有16个IO, 一共16X7=112个IO,外加2个PH0和PH1,一共114个IO口。分别是GPIOA,GPIOB---GPIOG,外加2个PH0和PH1 一、GPIO介绍 GPIO:就是一个引脚作为输入或者输出。 GPIO的八种工作模式:输入输出是相对于CPU,四种输入、四种输出模式及四种输出最大速度 输入:外部数据输入到开发板 输出:开发板的数据输出到外部设备 (1) GPIO_Mode_AIN 模拟输入 将IO口作为模拟输入接口,输入的可能是变化的值,接收外部的模拟信号输入 (2) GPIO_Mo
[单片机]
GPIO工作模式详解
STM32 (Cortex-M3) 中NVIC(嵌套向量中断控制)的理解
一、STM32 (Cortex-M3) 中的优先级概念 STM32(Cortex-M3)中有两个优先级的概念:抢占式优先级和响应优先级,也把响应优先级称作“亚优先级”或“副优先级”,每个中断源都需要被指定这两种优先级。 1. 何为占先式优先级(pre-emption priority) 高占先式优先级的中断事件会打断当前的主程序/中断程序运行—抢断式优先响应,俗称中断嵌套。 2. 何为副优先级(subpriority) 在占先式优先级相同的情况下,高副优先级的中断优先被响应; 在占先式优先级相同的情况下,如果有低副优先级中断正在执行, 高副优先级的中断要等待已被响应的低副优先级中断执行结束后才能得到响应—非抢断式响应(
[单片机]
<font color='red'>STM32</font> (Cortex-M3) 中NVIC(嵌套向量中断控制)的理解
基于STM32和CPLD可编程逻辑器件的等精度测频
传统的频率测量方法在实际应用中有较大的局限性,基于传统测频原理的频率计的测量精度将随被测信号频率的变化而变化,传统的直接测频法其测量精度将随被测信号频率的降低而降低,测周法的测量精度将随被测信号频率的升高而降低。本文中提出一种基于ARM与CPLD宽频带的数字频率计的设计,以微控器STM32作为核心控制芯片,利用CPLD可编程逻辑器件,实现闸门测量技术的等精度测频。 本设计的技术指标: 测频范围:1Hz~200MHz,分辨率为0.1Hz,测频相对误差百万分之一。 周期测量:信号测量范围与精度要求与测频功能相同。 占空比测量:准确度99%。 计数范围:0~1000000000,可手动暂停、复位。 功耗大小:5V
[单片机]
基于<font color='red'>STM32</font>和CPLD可编程逻辑器件的等精度测频
stm32 usb_istr.c 文件分析
最近做一个项目,在stm32内部一部分用来存储自己的代码,开辟出一段空间来用来存储FPGA代码。每次开机实现stm32往FPGA写入代码的功能。 向stm32某段空间写入代码的方法: (1)ST_LINK Utility软件 通过JTAG,连接后。载入FPGA的bin文件,改写Start address就可以将代码写入固定的区域。 当然可以用ST-LINK写入任意代码。 (2)用STMFlashDemo软件。 这个官方的串口下载软件,通过系统存储器进行下载。在之前的日志中提到过,不详说。 利用MCUISP下载的时候,会擦出整个芯片。 所以如果将一部分内容存到FLASH中比如(0x0807000~0x0807100),再
[单片机]
<font color='red'>stm32</font> usb_istr.c 文件分析
基于STM32的大扭矩永磁同步电机驱动系统
引言   大扭矩永磁同步电机直接驱动由于去掉了复杂的机械传动机构,从而消除了机械结构带来的效率低、维护频繁、噪声与转动惯量大等不利因素,具有效率高、振动与噪声小、精度高、响应快、使用维修方便等一系列突出优点 .近年来,随着电力电子技术、永磁材料、电机设计与制造技术、传感技术、控制理论等的发展,大扭矩永磁同步电机在数控机床、矿山机械、港口机械等高性能系统中得到了越来越广泛的应用 .   交流电机控制系统广泛采用单片机、DSP、FPGA为控制系统核心。STM32 是一种基于ARM 公司Cortex-M3 内核的新型32 位闪存微控制器,采用了高性能、高代码密度的Thumb-2 指令集和紧耦合嵌套向量中断控制器,拥有丰富的外围接口
[单片机]
基于<font color='red'>STM32</font>的大扭矩永磁同步电机驱动系统
STM32】串口通信---用代码与芯片对话
前言 开发板:stm32f407VET6 开发环境:keil5 MDK 串口通信的相关知识,请参考这篇文章 【STM32】5分钟了解STM32的串口通信 这篇文章讲的都是基础知识,那么串口通信的代码该如何写呢? 一、串口通信基本知识 【STM32】5分钟了解STM32的串口通信 二、编程思路 usart.h // ============================================= # @Time : 2020-09-03 # @Author : AXYZdong # @CSDN : https://blog.csdn.net/qq_43328313 # @FileName: usart.
[单片机]
对比STM32各系列产品特性和外设兼容性
在考虑更换STM32,且跨系列更换,可以看看下面各系列的对比图。 STM32产品系列特性比较 下面是STM32F0、F1、F2、F4、L1各产品系列的特性进行对比: 3 外设兼容性分析对比 对STM32进行过研究的朋友,特别是使用过寄存器开发的朋友应该很明白STM32片上外设,进行过对比的朋友,会发现,各系列MCU的片上外设很多相似之处,甚至完全一样。 下面将F1分别和F0、F2、F4、L1对比一下,大家看看有哪些差异。 1.STM32 F1 与 F0 系列外设兼容性分析对比 2.STM32 F1 与 F2 系列外设兼容性分析对比 3.STM32 F1 与 F4 系列外设兼容性分析对比 4.STM32 F
[单片机]
对比<font color='red'>STM32</font>各系列产品特性和外设兼容性
stm32 mmc卡扫描指定文件夹下的所有文件 串口输出(文件名长度有限制)
硬件环境:神州一号开发板 软件环境:mdk 1、sd卡初始化 2、f_mount 3、扫描函数如下: #define _USE_LFN 0 FRESULT scan_files (char* path) { FRESULT res; FILINFO fno; DIR dir; int i; char *fn; #if _USE_LFN static char lfn ; fno.lfname = lfn; fno.lfsize = sizeof(lfn); #endif res = f_opendir(&dir, path); if (res == FR_OK) { i = strl
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved