目录
模块接线
测量范围
相对湿度:5%~95%RH
温度:-20~60℃
模块代码
DTH11.h
#ifndef _DHT11_H_
#define _DHT11_H_
#include "stm32f10x.h" // Device header
//上电后等待1秒才调用函数
extern uint8_t DHT11_RxData[4];
void DHT11_GetData(void);
#endif
DHT11.c
#include "stm32f10x.h" // Device header
#include "DHT11.h"
#include "Delay.h"
//***********************
#define DHT11_IO GPIOB
#define DHT11_Pin GPIO_Pin_12
#define DHT11_Rcc RCC_APB2Periph_GPIOB
//*************************************
uint8_t DHT11_RxData[4];
/*
得到的结果:
湿度:
DHT11_RxData[0]=Humi_H;
DHT11_RxData[1]=Humi_L;=0
温度:
DHT11_RxData[2]=Temp_H;
DHT11_RxData[3]=Temp_L;=0
*/
void DHT11_MOSI_Init(void)
{
RCC_APB2PeriphClockCmd(DHT11_Rcc,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin=DHT11_Pin;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(DHT11_IO,&GPIO_InitStructure);
GPIO_SetBits(DHT11_IO,DHT11_Pin);
}
void DHT11_MISO_Init(void)
{
RCC_APB2PeriphClockCmd(DHT11_Rcc,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Pin=DHT11_Pin;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(DHT11_IO,&GPIO_InitStructure);
}
void DHT11_Start(void)
{
DHT11_MOSI_Init();
GPIO_ResetBits(DHT11_IO,DHT11_Pin);
Delay_ms(20);
GPIO_SetBits(DHT11_IO,DHT11_Pin);
Delay_us(30);
DHT11_MISO_Init();
}
uint8_t DHT11_ReceiveByte(void)
{
uint8_t i,Byte=0x00;
for(i=0;i<8;i++)
{
while(GPIO_ReadInputDataBit(DHT11_IO,DHT11_Pin)==0);
Delay_us(40);
if(GPIO_ReadInputDataBit(DHT11_IO,DHT11_Pin)==1)
{
Byte|=(0x80>>i);
}
while(GPIO_ReadInputDataBit(DHT11_IO,DHT11_Pin)==1);
}
return Byte;
}
void DHT11_GetData(void)
{
uint8_t Humi_H,Humi_L,Temp_H,Temp_L,Check;
DHT11_Start();
if(GPIO_ReadInputDataBit(DHT11_IO,DHT11_Pin)==0)
{
while(GPIO_ReadInputDataBit(DHT11_IO,DHT11_Pin)==0);
while(GPIO_ReadInputDataBit(DHT11_IO,DHT11_Pin)==1);
Humi_H=DHT11_ReceiveByte();
Humi_L=DHT11_ReceiveByte();
Temp_H=DHT11_ReceiveByte();
Temp_L=DHT11_ReceiveByte();
Check=DHT11_ReceiveByte();
GPIO_ResetBits(DHT11_IO,DHT11_Pin);
Delay_us(55);
GPIO_SetBits(DHT11_IO,DHT11_Pin);
if(Humi_H+Humi_L+Temp_H+Temp_L==Check)
{
DHT11_RxData[0]=Humi_H;
DHT11_RxData[1]=Humi_L;
DHT11_RxData[2]=Temp_H;
DHT11_RxData[3]=Temp_L;
}
}
}
参考文章:DHT11详细介绍(内含51和STM32代码)-CSDN博客
详细信息需要阅读对应手册。
DHT11温湿度传感器-温湿度传感器-温湿度传感器 温湿度芯片 温湿度变送器模块 气体传感器 流量传感器 广州奥松电子股份有限公司 (aosong.com)
PS:代码是笔者学习完自己独立cue的,发出来一是分享,二是激励自己
标签:Pin,温湿度,代码,Humi,IO,GPIO,void,DHT11 From: https://blog.csdn.net/m0_75090944/article/details/139359094