• 大小: 3KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-12
  • 语言: 其他
  • 标签: AM2302  

资源简介

STM32F030实现AM2302模块温湿度采集,stm32,stm8系列基本都支持,工作经验总结,根据实际情况稍微修改即可

资源截图

代码片段和文件信息

#include “dht22.h“
#include “uart.h“

//存放采集数据
u8 DHT_Tem_H = 0;     //温度高8位 
u8 DHT_Tem_L = 0;     //温度低8位 
u8 DHT_Hum_H = 0;     //湿度高8位 
u8 DHT_Hum_L = 0;     //湿度低8位 


//请求信号
extern u8 DHT_askL_500us_cnt;          //总线请求信号500us低电平间隔计数
extern u8 DHT_askL_500us_cnt_flag;     //总线请求信号500us低电平间隔计数开始标记位

extern u8 DHT_askH_30us_cnt;           //总线请求信号30us高电平间隔计数
extern u8 DHT_askH_30us_cnt_flag;      //总线请求信号30us高电平间隔计数开始标记位

//应答信号
extern u8 DHT_ansL_80us_cnt;           //总线应答信号80us低电平间隔计数
extern u8 DHT_ansL_80us_cnt_flag;      //总线应答信号80us低电平间隔计数开始标记位

extern u8 DHT_ansH_80us_cnt;           //总线应答信号80us高电平间隔计数
extern u8 DHT_ansH_80us_cnt_flag;      //总线应答信号80us高电平间隔计数开始标记位

extern u8 DHT_data_send_flag;          //应答信号结束,开始接收数据标记位

//高低电平判断
extern u8 DHT_BitGap_50us_cnt_flag;    //数据位50us低电平间隔计数开始标记位
extern u8 DHT_BitGap_50us_cnt;         //数据位50us低电平间隔计数
 
extern u8 DHT_BitH_cnt_flag;           //高电平计数开始标记位
extern u8 DHT_BitH_cnt;                //高电平计数


/*
*********************************************************************************************************
* 函数名:   void DHT_delay_us(uint32_t value)
* 功能说明: 延时程序,(10*value)us延时
* 形参: uint32_t value  
* 返回值: void
* 时间:  
* 作者: 

*********************************************************************************************************
*/
void DHT_delay_us(uint32_t value)
{
uint32_t i;
i = value * 8;
while(i--);
}

/*
*********************************************************************************************************
* 函数名:   void DHT_ReadBit(void)
* 功能说明: 读取一个数据位,一个数据位由50us的低电平间隔和若各高电平组成,
*                           数据位1 = 50us低电平 + 70us高电平
                            数据位0 = 50us低电平 + (26~28)us的高电平 
* 形参: void 
* 返回值: int bit_lever
* 时间:  
* 作者: 
*
*********************************************************************************************************
*/

int DHT_ReadBit(void)
{
u8 bit_lever = 0;
while(!GPIO_ReadInputDataBit(GPIOAGPIO_Pin_1))
{
DHT_BitGap_50us_cnt_flag = 1;
}
DHT_BitGap_50us_cnt_flag = 0;

if(DHT_BitGap_50us_cnt >=5)   //50us低电平间隙
{
while(GPIO_ReadInputDataBit(GPIOAGPIO_Pin_1))
{
DHT_BitH_cnt_flag = 1;
}
DHT_BitH_cnt_flag = 0;
if(DHT_BitH_cnt <= 3)   //26-28us的高电平 表示 0
{
bit_lever = 0;
DHT_BitH_cnt = 0;
}
else if(DHT_BitH_cnt >= 5)   //70us的高电平表示1
{
bit_lever = 1;
DHT_BitH_cnt_flag = 0;
DHT_BitH_cnt = 0;
}

DHT_BitGap_50us_cnt = 0;
}

return bit_lever;
}

/*
*********************************************************************************************************
* 函数名:   void DHT_ReadByte(void)
* 功能说明: 读取一个字节,将读取的数据位,依次位移存放
* 形参: void 
* 返回值: int data
* 时间:  
* 作者: 
*

*********************************************************************************************************
*/
int DHT_ReadByte(void)
{
u8 data = 0;
u8 i;
u8 Bit_temp = 0;

for(i=0; i<8; i++)
{
Bit_temp = DHT_ReadBit();

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-12-01 16:19  STM32F030实现AM2302\
     文件        8469  2017-12-01 16:22  STM32F030实现AM2302\dht22.c
     文件         417  2017-10-30 10:13  STM32F030实现AM2302\dht22.h
     文件         114  2017-12-01 16:20  STM32F030实现AM2302\readme.txt

评论

共有 条评论