历史上的今天
今天是:2025年08月14日(星期四)
2019年08月14日 | STM32 DTH11温湿度模块读写代码
2019-08-14 来源:eefocus
dth11.c
#include "dth11.h"
/*
DTH11 ---->PG9
*/
void DHT11_Init(void)
{
GPIO_InitTypeDef GFIO_InitStruct;
//开始GPIOG时钟
RCC_AHB1PeriphClockCmd(RCC_AHBPeriph_GPIOG, ENABLE);
//配置以及初始化GPIO模式
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_out; //输出
GPIO_InitStruct.GPIO_OType =GPIO_OType_PP; //推挽
GPIO_InitStruct. GPIO_Pin =GPIO_Pin_9; //引脚
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_25MHz;
GPIO_Init(GPIOG,&GPIO_InitStruct);
}
void DHT11_Modeout(void)
{
GPIO_InitTypeDef GFIO_InitStruct;
//开始GPIOG时钟
RCC_AHB1PeriphClockCmd(RCC_AHBPeriph_GPIOG, ENABLE);
//配置以及初始化GPIO模式
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_out; //输出
GPIO_InitStruct.GPIO_OType =GPIO_OType_PP; //推挽
GPIO_InitStruct. GPIO_Pin =GPIO_Pin_9; //引脚
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_25MHz;
GPIO_Init(GPIOG,&GPIO_InitStruct);
}
void DHT11_ModeIn(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
//配置为输出模式,DTH11链接STM32只有一根线,采用的是单总线模式,所以要同时定义输入输出模式
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN; //输出
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9; //引脚
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOG, &GPIO_InitStruct);
}
uint8_t DTH11_ReadByte(void)
{
uint8_t data =0;
uint8_t i;
for(i=0;i<8;i++)
{
while( DTH11_IN() == 0 );
if( DTH11_IN() ==1)
{
date |= 0x1 <<(7-i);
}else{
data &=~(0x1<<(7-i));
}
while(DTH11_IN() == 1);
}
}
return data;
}
int DHT11_ReadData(uint8_t DataBuf[])
{
int ret = -1;
uint8_t cnt = 0;
DHT11_ModeOut();
DHT11_DQ(1);
delay_us(30);
DHT11_DQ(0);
delay_ms(20);
DHT11_DQ(1);
delay_us(30);
DHT11_ModeIn();
while( DHT11_IN() == 0 )
{
delay_us(1);
cnt++;
if(cnt > 100)
ret = -1;
}
cnt = 0;
while( DHT11_IN() == 1 )
{
delay_us(1);
cnt++;
if(cnt > 100)
ret = -1;
}
for(cnt=0;cnt<5;cnt++)
{
DataBuf[cnt] = DHT11_ReadByte();
}
if( DataBuf[4] == (DataBuf[0]+DataBuf[1]+DataBuf[2]+DataBuf[3]) )
{
ret = 0;
}
delay_s(1);
delay_ms(300);
return ret;
}
dth11.h
#ifndef _DTH11_H
#define _DTH11_H
#inlcude "stm32f4xx.h"
#include "systick.h"
#define DTH11_DQ(a); if(a)
GPIO_Setbit(GPIOG,GPIO_Pin_9);
else
GPIO_ResetBits(GPIOG, GPIO_Pin_9);
#define DTH11_IN() GPIO_ReadInputDateBit(GPIOG, GPIO_Pin_9); //此函数是读取PG9的电平
void DTH11_Init(void);
int DTH11_ReadData(uint8_t DataBuff[]);
#endif
史海拾趣
|
混频器常常用一个二极管桥式电路(diodebridge)或一个Gilbert单元(Gilbertcell)来实现。这两类混频器都使用了一个本地振荡器(LO)来跳转射频输入的极性。 当LO为正时,RF输入被混频转换为中频(IF)输出时极性不改变。当LO为负时,RF输入转换为IF时极 ...… 查看全部问答> |
|
Windows Embedded CE 6.0帮助文档中介绍,Establishing a Modem Connection的流程如下: lineInitializeEx ↓ lineOpen ↓ lineMakeCall ↓ lineGetMessage & ...… 查看全部问答> |
|
用windows ce 的template建了个pda的os project 想在这个project下面加一个 subproject 来播放一个 test16bit.wav的文件 这个文件 我是从project property的custom build actions里面加入目录relase的 这个subproject我是这么写的 #include # ...… 查看全部问答> |
|
本人目前维护一个虚拟网卡的微端口驱动程序,代码已经由别人完成,且已经商品化,公司要求我增加一项功能,功能是驱动能够动态的修改虚拟网卡的mac地址。 虚拟网卡mac地址的初始化是通过读一个TXT文件,然 ...… 查看全部问答> |
|
LPCXpresso-CN在IAR下怎么开发,选什么仿真器啊 驱动应该装好了,用lpcxpresso IDE开发无能 板子后面写了IAR,应该可以用IAR来开发 导入了一个IAR里自带的LPC1114的例程 编绎有一警告,无错误 仿真器选择那个呢,我一个个试好像都不行啊, 是不是有其他的选项要设置… 查看全部问答> |
|
(1)开关结点初始化 这时选择的节点类型是终端节点,所以使用f8wEndev.cfg文件,所以在Zglobals.h文件中,我们可以得到下面的定义#define ZG_DEVICETYPE_ENDDEVICE 0x02#define DEVICE_LO ...… 查看全部问答> |




