DHT11驱动(STM32)

发布者:cwm6269310最新更新时间:2019-05-08 来源: eefocus关键字:DHT11  驱动  STM32 手机看文章 扫描二维码
随时随地手机看文章

一、前期准备

单片机:STM32F103ZET6

开发环境:MDK5.14

库函数:标准库V3.5

DHT11模块:淘宝有售


在这里插入图片描述

二、实验效果

在这里插入图片描述
在这里插入图片描述



三、驱动原理

看数据手册。需要完整工程或者有问题的请加QQ:1002521871,验证:呵呵。


四、驱动代码

dht11.h


#ifndef __DHT11_H__

#define __DHT11_H__

#include "stm32f10x.h"

#include "gpio.h"

#include "delay.h"


#define DHT_Direction_I  {GPIOA->CRL &= 0XFFFFFFF0; GPIOA->CRL |= 8;}

#define DHT_Direction_O {GPIOA->CRL &= 0XFFFFFFF0; GPIOA->CRL |= 3;}

/* IO Definitions */

#define O_DHT_DAT PAout(0)

#define I_DHT_DAT PAin(0)

#define DHT_DAT_Pin GPIO_Pin_0

#define    DHTPORT         GPIOA

#define     DHTCLKLINE      RCC_APB2Periph_GPIOA


extern void DHT11Configuration(void);

extern uint8_t DHT11_IsOnline(void);

extern uint8_t DHT11_Read_Data(uint8_t *temp,uint8_t *humi);

#endif



ds1302.c


#include "dht11.h"

      

//复位DHT11

void DHT11_Reset(void)    

{                 

DHT_Direction_O;

    O_DHT_DAT = 0;

    DelayMs(20);   

    O_DHT_DAT = 1;

DelayUs(30);     

}


//等待DHT11的回应

//返回1:未检测到DHT11的存在

//返回0:存在

uint8_t DHT11_IsOnline(void)    

{   

uint8_t retry = 0;

DHT_Direction_I;

    while (I_DHT_DAT && retry < 100)//DHT11会拉低40~80us

{

retry ++;

DelayUs(1);

}

if(retry >= 100)

{

return 1;

}

else

{

retry = 0;

}

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

{

retry ++;

DelayUs(1);

}

if(retry >= 100)

{

return 1;

}     

return 0;

}


uint8_t DHT11_ReadBit(void)  

{

  uint8_t retry = 0;

while(I_DHT_DAT && retry < 100)

{

retry ++;

DelayUs(1);

}

retry = 0;

while(!I_DHT_DAT && retry < 100)

{

retry ++;

DelayUs(1);

}

DelayUs(40);//等待40us

if(I_DHT_DAT)

{

return 1;

}

else 

{

return 0;

}

}



uint8_t DHT11_ReadByte(void)    

{        

    uint8_t i,dat;

    dat = 0;

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

{

    dat <<= 1; 

    dat |= DHT11_ReadBit();

    }     

    return dat;

}


//从DHT11读取一次数据

//temp:温度值(范围:0~50°)

//humi:湿度值(范围:20%~90%)

//返回值:0,正常;1,读取失败

uint8_t DHT11_Read_Data(uint8_t *temp,uint8_t *humi)    

{        

  uint8_t buf[5];

uint8_t i;

DHT11_Reset();

if(DHT11_IsOnline() == 0)

{

for(i = 0; i < 5; i ++)//读取40位数据

{

buf[i] = DHT11_ReadByte();

}

if((buf[0] + buf[1] + buf[2] + buf[3]) == buf[4])

{

*humi = buf[0];

*temp = buf[2];

}

}

else 

{

return 1;

}

return 0;     

}

 

void DHT11Configuration(void)

{  

  GPIO_InitTypeDef  MyGPIO;

 

  RCC_APB2PeriphClockCmd(DHTCLKLINE, ENABLE);  

  MyGPIO.GPIO_Pin = DHT_DAT_Pin;  

  MyGPIO.GPIO_Mode = GPIO_Mode_Out_PP;  

  MyGPIO.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(DHTPORT, &MyGPIO);  

O_DHT_DAT = 1;

    

DHT11_Reset();  //复位DHT11



关键字:DHT11  驱动  STM32 引用地址:DHT11驱动(STM32)

上一篇:US-020超声波模块驱动(STM32)
下一篇:DS1302驱动(STM32)

推荐阅读最新更新时间:2024-11-19 16:01

uCOS-II在STM32上的移植步骤
前言: 说点废话,网上有很多关于uCOS-ii移植的文章,好多都是千篇一律,理论性很强,分析了一大堆虚头巴脑的东西,真想问他们,你确定你分析的这些东西是需要你做的工作吗?实操性严重欠缺。。。这方面我也走了很多弯路,下面就将自己的移植过程一步步的记录下来,也给大家做做参考。 首先,简单总结一下移植的大概过程: (1) 去uC/OS-ii官网下载你要移植芯片CPU的相关案例,不一定完全对应,那就找相应系列吧。 (2) 编程环境一般有两种,分别是IAR和MDK,这个根据你自己的编程环境进行下载。 (3) 本案例需要将uC/OS-II 移植到STM32F103ZET6上,而我使用的编程环境是MDK,很遗憾,官网上提供的案例是基于
[单片机]
stm32-学习经验总结 ———UCOSIII-软件定时器
一、软件定时器简介 UC/OS-III提供了软件定时器服务,定时器的本质就是一个递减的计数器,当计数器减到0的时候可以触发某种动作的执行,这个动作通过回调函数来实现,回调函数是用户自己定义的,可以是简单的打开一个LED灯,或者开启电机等。当定时器计时完成时,定义的回调函数就会被立即调用,应用程序可以有任意数量的定时器。 注意!一定不要在回调函数中使用阻塞调用或者可以阻塞或删除定时器任务的函数,比如:OSTimeDly() OSTimeDlyHMSM() 等等一些函数。 UCOSIII的软件定时器服务的相关代码是在OS_TIMR.c文件中,当设置OS_CFG.H中的OS_CFG_TMR_EN置为1的时候软件定时器服务被使能。 UCO
[单片机]
stm32与HC-SR04超声波传感器测距
首先,先来看一下这个模块的基本功能和原理。 HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm;模块包括超声波发射器、接收器与控制电路。像智能小车的测距以及转向,或是一些项目中,常常会用到。智能小车测距可以及时发现前方的障碍物,使智能小车可以及时转向,避开障碍物。 注意是5v输入,但是我用stm32 的3.3v输入也是没有问题的。 二.工作原理 1.给超声波模块接入电源和地。 2.给脉冲触发引脚(trig)输入一个长为20us的高电平方波 3.输入方波后,模块会自动发射8个40KHz的声波,与此同时回波引脚(echo)端的电平会由0变为1;(此时应该启动
[单片机]
基于DDK的TLV320AIC23型编解码器的驱动设计
摘 要:以Tl的DM642 EVM板为例,介绍基于DDK的TLV320AIC23型编解码器驱动程序设计的一般方法。针对常用的需求,给出三种实用的参数配置方法。 关键词: DDK:TLV320AIC23;DM642;寄存器 1 引言 TLV320AIC23是TI公司推出的一款高性能立体声音频编解码器,内置耳机输出放大器,支持mic和line in二选一的输入方式。输入和输出都具有可编程的增益调节功能。TLV320AIC23的模/数转换器(ADC)和数,模转换器(DAC)集成在芯片内部.采用先进的Σ一△过采样技术.可以在8kHz至96kHz的采样率下提供16bit、20bit、24bit和32bit的采样数据。ADC和DAC的输
[应用]
linux2.6.32.2 mini2440平台移植--移植DM9000网卡驱动
1.1.1 设备资源初始化 Linux-2..6.32.2已经自带了完善的DM9000网卡驱动驱动(源代码位置:linux-2.6.32.2/ drivers/net/dm9000.c),它也是一个平台设备,因此在目标平台初始化代码中,只要填写好相应的结构表即可(在mach-mini2440.c里面),具体步骤如下: 首先添加驱动所需的头文件dm9000.h: #include linux/dm9000.h 再定义DM9000网卡设备的物理基地址,以便后面用到: /* DM9000AEP 10/100 ethernet controller */ #define MACH_MINI2440_DM9K_BAS
[单片机]
STM32的独立看门狗(IWDG)
一、什么是看门狗: 看门狗就是一种专用定时器。 二、看门狗的功能: 在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称“看门狗”(watchdog) 。 简单来说就是在系统跑飞(程序异常执行)的情况时,系统复位,程序重新执行。 -------------------------------------------------
[单片机]
<font color='red'>STM32</font>的独立看门狗(IWDG)
基于STM32的可遥控智能跟随小车的设计与实现
1、引言 智能小车是一个集自动控制、环境监测、无线遥控等多功能于一体的综合系统,人们习惯称其为移动轮式机器人,目前以单片机为核心的移动机器人还存在处理数据局限、控制不稳定等不足之处,国内市场暂时还没有出现具有真正意义的跟随性智能载物小车。本设计基于单片机的智能小车测距模块、红外遥控模块和小车智能控制模块,通过软硬件设计调试,实现了小车的自动跟随状态。主要利用超声波测距模块实现小车与目标之间距离的实时检测,当两者距离较近小车就“缓慢跟随”,一旦测得距离较远,小车将“加快脚步”,直到追上目标,并且小车可以跟随目标一起转弯,不会“跟丢”。 2、硬件设计 2.1、系统总体设计 为实现小车智能跟随,采用了超声波测距、电机驱动、红外遥控等功能
[单片机]
基于<font color='red'>STM32</font>的可遥控智能跟随小车的设计与实现
凤凰号火星探测船采用Actel低功耗RTAX-S
低功耗太空FPGA用于电池和太阳能供电的任务必需性仪器,以获取和处理重要的环境数据 Actel公司宣布其耐辐射的RTAX-S现场可编程门阵列 (FPGA) 已用在美国国家航空航天局 (NASA) 的凤凰号 (Phoenix) 火星探测船上,进一步将低功耗解决方案的优点带到任务必需的领域中,而该探测船已于2007年8月4日在美国佛罗里达州卡纳维拉尔角空军基地发射。凤凰号飞船包括由加拿大航天局提供的气象站 (MET),该气象站仪器的主要建造者是全球领先的太空机器人系统供应商MDA公司,在仪器子系统中集成了Actel的百万门FPGA器件RTAX1000S-CQ352,用于获取、处理和传送温度和气压数据,并将数据传送给地球上的科研人员。
[焦点新闻]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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