历史上的今天
返回首页

历史上的今天

今天是:2024年09月10日(星期二)

正在发生

2021年09月10日 | DHT11温湿度传感器stm32测试程序

2021-09-10 来源:eefocus

//dht11.h

#ifndef __DHT_H__

#define __DHT_H__

#include "stm32f10x.h"

#include "systick.h"

#include "led.h"

#include "stdio.h"

#include "Usart1.h"



#define DHT11_GPIO_TYPE  GPIOA

#define DHT11_GPIO_PIN   GPIO_Pin_8

#define DHT11_RCC        RCC_APB2Periph_GPIOA




#define DHT11_OUT_H GPIO_SetBits(DHT11_GPIO_TYPE, DHT11_GPIO_PIN)

#define DHT11_OUT_L GPIO_ResetBits(DHT11_GPIO_TYPE, DHT11_GPIO_PIN)

#define DHT11_IN    GPIO_ReadInputDataBit(DHT11_GPIO_TYPE, DHT11_GPIO_PIN)


void dht11_gpio_input(void);

void dht11_gpio_output(void);

u16 dht11_scan(void);

u16 dht11_read_bit(void);

u16 dht11_read_byte(void);

u16 dht11_read_data(u8 buffer[4]);


#endif


//dht11.c

#include "dht.h"

 

void dht11_gpio_input(void)

{

    GPIO_InitTypeDef GPIO_InitStruct;

    

    RCC_APB2PeriphClockCmd(DHT11_RCC, ENABLE);

    

    GPIO_InitStruct.GPIO_Pin = DHT11_GPIO_PIN;

    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入

    

    GPIO_Init(DHT11_GPIO_TYPE, &GPIO_InitStruct);

}

 

void dht11_gpio_output(void)

{

    GPIO_InitTypeDef GPIO_InitStruct;

    

    RCC_APB2PeriphClockCmd(DHT11_RCC, ENABLE);

    

    GPIO_InitStruct.GPIO_Pin = DHT11_GPIO_PIN;

    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出

 

    GPIO_Init(DHT11_GPIO_TYPE, &GPIO_InitStruct);

}

 

void dht11_reset(void)

{

    dht11_gpio_output();//配置IO口输出模式

    DHT11_OUT_L;//拉低IO口

    Delay_us(19000);//延时18ms-30ms之间

    DHT11_OUT_H;//拉高IO口

    Delay_us(30);//延时30us,等待接收

    dht11_gpio_input();//配置为输入模式

}

 

u16 dht11_scan(void)

{

    return DHT11_IN;

}

 

u16 dht11_read_bit(void)

{

    while (DHT11_IN == RESET);//等待低电平结束

    Delay_us(40);//延时40us,如果是信号0,高电平信号在26-28us之间,如果是信号1,高电平信号在70us

    if (DHT11_IN == SET)//如果还是高电平就是信号1

    {

        while (DHT11_IN == SET);//等待此信号结束

        return 1;

    }

    else

    {

        return 0;

    }

}

 

u16 dht11_read_byte(void)

{

    u16 i;

    u16 data = 0;

    for (i = 0; i < 8; i++)

    {

        data <<= 1;

        data |= dht11_read_bit();

    }

    return data;

}

 

u16 dht11_read_data(u8 buffer[5])

{

    u16 i = 0;

    u8 checksum;

    dht11_reset();//发送起始信号

    if (dht11_scan() == RESET)

    {

        //等待响应信号结束

        while (dht11_scan() == RESET);

        while (dht11_scan() == SET);

        for (i = 0; i < 5; i++)

        {

            buffer[i] = dht11_read_byte();

        }

        

        while (dht11_scan() == RESET);//接收结束,拉高片选

        dht11_gpio_output();

        DHT11_OUT_H;


         checksum = buffer[0] + buffer[1] + buffer[2] + buffer[3];//校验数据

        if (checksum != buffer[4])

        {

            // checksum error

            return 1;

        }

    }

    

    return 0;

}


//main.c测试

if(dht11_read_data(buf)==0){

            hum = buf[0] + buf[1] / 10.0;

            temp = buf[2] + buf[3] / 10.0;

}

printf("湿度 == %.2f%%RHrn",hum);

printf("温度 == %.2f℃rn",temp);

Delay_ms(2000);

推荐阅读

史海拾趣

Blaze Display Technology Co Ltd公司的发展小趣事

在国内市场取得一定成绩后,Blaze公司开始积极拓展国际市场。通过与全球知名企业的合作,公司成功将产品打入国际市场,并赢得了良好的口碑。此外,公司还积极参加国际电子展会和交流活动,与全球同行建立了广泛的合作关系,为公司的进一步发展奠定了坚实的基础。

EREM公司的发展小趣事

随着全球市场的不断融合,EREM公司开始寻求国际合作机会。通过与国外知名企业的合作,EREM不仅将产品销售到了全球各地,还学到了许多先进的管理经验和技术。同时,EREM也积极参与国际展览和交流活动,提升了品牌知名度和影响力。这些努力使得EREM在国际市场上逐渐崭露头角。

Eby Electro Inc公司的发展小趣事

随着公司规模的扩大和产品质量的提升,Eby Electro Inc开始寻求拓展国际市场。公司积极参加国际电子产品展览,与国际知名企业建立合作关系,将产品销往全球各地。在国际市场的竞争中,Eby Electro Inc凭借卓越的产品质量和良好的售后服务,赢得了客户的信赖和好评。同时,公司也积极学习国际先进的管理经验和技术,不断提升自身的竞争力。

General Dynamics SATCOM Technologies公司的发展小趣事

随着公司规模的扩大和产品质量的提升,Eby Electro Inc开始寻求拓展国际市场。公司积极参加国际电子产品展览,与国际知名企业建立合作关系,将产品销往全球各地。在国际市场的竞争中,Eby Electro Inc凭借卓越的产品质量和良好的售后服务,赢得了客户的信赖和好评。同时,公司也积极学习国际先进的管理经验和技术,不断提升自身的竞争力。

Electronic Sensor + Resistor GmbH公司的发展小趣事

Electronic Sensor + Resistor GmbH(简称ESR公司)的创立源于两位电子工程师的远见卓识。他们发现市场上对于高精度电子传感器和定制电阻器的需求日益增长,但现有产品往往无法满足特定应用的性能要求。于是,ESR公司应运而生,专注于研发和生产高性能的电子传感器和电阻器。

在创业初期,ESR公司面临着资金、技术和市场的三重挑战。但凭借其卓越的研发实力和坚持不懈的市场推广,公司逐渐在市场上树立起高品质、高可靠性的品牌形象。通过与多家知名企业的合作,ESR公司的产品逐渐获得了市场的认可。

Avic公司的发展小趣事

随着中国航空工业的快速发展,Avic公司不断加强在航空电子技术领域的研发和创新。公司成功研制出一系列先进的航空电子系统,这些系统不仅提高了飞机的性能和安全性,也为中国航空工业的国际竞争力奠定了坚实基础。Avic公司在航空电子领域的突破,不仅推动了国内航空工业的发展,也为国际航空市场带来了新的选择。

问答坊 | AI 解惑

二种差分探头技术参数比较

这是二种目前顶级的100M,1300V高压差分探头,如果你用这此类探头,从参数上来分析,你认为哪款要好点,探头分为标号1和标号2,点评时不要把标号搞错了,凡是参加的人员,我将把国内市埸上的同一等级(P5205为参照点)共六款在不同频率下所测出的波形与参数提 ...…

查看全部问答>

反馈环路的稳定

这是从哪本书里专门讲环路稳定的,看了不错,和大家一起分享! 本书目录:   详细目录: 第一篇 开关电源的优化设计 第一章 绪论 第一节 电源 第二节 负载 第三节 安全 第二章 电路拓朴的实用选择 第一节 概述 第二节 一般性考 ...…

查看全部问答>

本人有全套车载导航程序,有需要的请 联系我。VC开发,无需控件。QQ:626149468

本人有全套车载导航程序,有需要的请 联系我。底层开发,无需控件。QQ:626149468  能用于WINCE平台。…

查看全部问答>

变频器节电率计算

最近在一泥浆搅拌机上安装一台变频器11kw !工频电流14.7A,电压390V.变频50HZ输入电流6A,电压390V.变频正常工作在25HZ,输入电流1.5A,电压390V:以上数据均用万用表测得!用这些数据可否计算出节电率?最好的办法就是加电表,但没有条件!…

查看全部问答>

奇怪STM32复位问题?

                                 我用STM32f101c6t6和STM32f103vbt6各做20台仪表,复位电路10K电阻和1UF电容组成复位电路,发现103VBT6有时不能顺利 ...…

查看全部问答>

头文件中#ifndef 的作用是什么啊

本帖最后由 dontium 于 2015-1-23 13:36 编辑 #ifndef _AD_func #define _AD_func     void main(); void SystemInit(void); void AdInit(void); #endif 一个头文件  但是不知道什么意思 …

查看全部问答>

关于差分运放时发生的小问题

谁能告诉我对于一个差分运放来说,其中一个输入电压是怎样线性操作的?…

查看全部问答>

近距智能巡航直升机

近距智能巡航直升机 飞行器:遥控直升机。 处理器:arduino单片机或avr单片机。 模块:gps定位模块,gsm短信模块,陀螺仪模块,电源模块,摄像头模块等。 难点:续航能力,障碍识别及规避,升降和盘旋控制,内存卡读写。 功能简介:飞行器由起 ...…

查看全部问答>

收集的一些学习DSP不错的资料,有需要的拿去喽!

收集的一些学习DSP的资料,同志们看看有没有需要的,有需要的就拿去吧~…

查看全部问答>

多个pio的中断可以不可以写在一起,这样

多个pio的中断可以不可以写在一起,这样 IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_BRK_BASE | PIO_FR_BASE | PIO_QS_BASE | PIO_EN_BASE, 1); 一个pio写一句?这样是不是很麻烦…

查看全部问答>