历史上的今天
返回首页

历史上的今天

今天是: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


推荐阅读

史海拾趣

DOMINANT公司的发展小趣事

为了进一步提升市场竞争力,统明亮公司在2016年推出了一款新型直角DomiLED产品。这款LED产品具有高光照强度、低热阻等特点,广泛应用于测光照明领域。新型直角DomiLED的推出,不仅丰富了统明亮的产品线,也进一步巩固了其在LED市场的领先地位。这款产品的成功推出,也充分展示了统明亮公司在LED技术创新方面的实力。

台湾肯尼威(CANNYWELL)公司的发展小趣事

台湾肯尼威公司成立于1986年,其创始人李明(化名)是一位对电子技术充满热情的工程师。在当时的台湾,电子制造业正处于蓬勃发展的阶段。李明看到电源滤波器在电子设备中的重要性,于是决定专注于这一领域的研发和生产。他带领一支小团队,经过无数次的试验和改进,终于成功研发出CW系列单相电源滤波器,为公司的发展奠定了坚实的技术基础。

广芯电子(BROADCHIP)公司的发展小趣事

面对不断变化的市场需求和技术环境,肯尼威始终坚持以创新为引领。公司不断投入研发资源,推出了一系列具有创新性的产品。例如,针对特殊需求的客户,公司推出了定制化的电源滤波器解决方案;同时,还开发了新型的三相电源滤波器等产品,满足了市场的多样化需求。这些创新不仅提升了公司的技术实力,也为公司赢得了更多的市场份额。

Fillfactory Nv公司的发展小趣事

FIDELIX公司成立于1990年,是一家专注于存储芯片研发与销售的韩国企业。在公司成立初期,FIDELIX凭借对技术的深入研究和对市场的敏锐洞察,成功推出了多款性能优越的NAND FLASH(闪存)和SDR/DDR(单/双数率同步动态存储器)等存储芯片产品。这些产品不仅在韩国市场上获得了良好的口碑,同时也开始逐步进入国际市场。

随着技术的不断进步和市场的不断扩大,FIDELIX逐渐在韩国存储芯片领域崭露头角。公司不断投入研发资金,加强技术创新,努力提升产品的性能和品质。同时,FIDELIX也积极拓展销售渠道,与多家国内外知名厂商建立了合作关系,为公司的持续发展奠定了坚实的基础。

Holt Integrated Circuits公司的发展小趣事

自成立以来,Holt Integrated Circuits便专注于为航空电子行业提供高性能的集成电路解决方案。四十多年来,Holt始终站在技术前沿,为全球超过400家制造商提供模拟和混合信号IC数据总线解决方案。从F-16到A-350等先进飞行器,Holt的IC产品已成为飞行控制、导航、发动机管理、通信、安全系统及机上娱乐系统的核心部件。这种长期且稳定的合作关系,不仅奠定了Holt在航空电子领域的领导地位,也推动了整个行业的技术进步。

Artaflex公司的发展小趣事

面对全球电子市场的不断扩张,Artaflex公司制定了全球化的发展战略。公司通过设立海外分支机构、拓展国际市场、参与国际展会等方式,不断提升品牌知名度和市场份额。同时,公司还积极引进国际先进技术和管理经验,提升自身的竞争力。这一战略的实施使得Artaflex在全球电子行业中占据了重要地位。

问答坊 | AI 解惑

利用运算放大器实现的混频器

混频器常常用一个二极管桥式电路(diodebridge)或一个Gilbert单元(Gilbertcell)来实现。这两类混频器都使用了一个本地振荡器(LO)来跳转射频输入的极性。   当LO为正时,RF输入被混频转换为中频(IF)输出时极性不改变。当LO为负时,RF输入转换为IF时极 ...…

查看全部问答>

关于TAPI的lineInitializeEx的困惑

Windows Embedded CE 6.0帮助文档中介绍,Establishing a Modem Connection的流程如下: lineInitializeEx      ↓ lineOpen      ↓ lineMakeCall      ↓ lineGetMessage & ...…

查看全部问答>

subproject的问题

用windows ce 的template建了个pda的os project 想在这个project下面加一个 subproject 来播放一个 test16bit.wav的文件 这个文件 我是从project property的custom build actions里面加入目录relase的 这个subproject我是这么写的 #include # ...…

查看全部问答>

虚拟网卡动态修改mac

    本人目前维护一个虚拟网卡的微端口驱动程序,代码已经由别人完成,且已经商品化,公司要求我增加一项功能,功能是驱动能够动态的修改虚拟网卡的mac地址。      虚拟网卡mac地址的初始化是通过读一个TXT文件,然 ...…

查看全部问答>

串口输出 程序调试

#include #include void main() { int i=7,j=2; float f=(float)i/j; SCON = 0x50; TMOD |= 0x20; TH1 = 0xf3; TR1 = 1; TI = 1; printf(\"%f\",f); while(1) {} } 这个程序为什么在运行的时候 在串口输入串口 没看到东西啊 ...…

查看全部问答>

一个让人纠结的结果

最近玩单片机的时候谢了一个小代码,但是实在不知道出错在哪里。代码如下         ORG 0000H         ;程序从000H地址开始运行         LJMP        ...…

查看全部问答>

求教!新手求指点

若我有一台17KW  600V的无刷电机,控制器的驱动部分因该选用哪种IGBT和驱动芯片呀,求个型号以供参考,谢谢了…

查看全部问答>

LPCXpresso-CN在IAR下怎么开发,选什么仿真器啊

驱动应该装好了,用lpcxpresso IDE开发无能 板子后面写了IAR,应该可以用IAR来开发 导入了一个IAR里自带的LPC1114的例程 编绎有一警告,无错误 仿真器选择那个呢,我一个个试好像都不行啊, 是不是有其他的选项要设置…

查看全部问答>

Z-Stack中SimpleApp开关结点加入网络流程

(1)开关结点初始化    这时选择的节点类型是终端节点,所以使用f8wEndev.cfg文件,所以在Zglobals.h文件中,我们可以得到下面的定义#define ZG_DEVICETYPE_ENDDEVICE        0x02#define DEVICE_LO ...…

查看全部问答>