OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2862|回复: 4

求助!DHT11温湿度传感器运行 电机无反应

[复制链接]

3

主题

10

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2020-5-9
在线时间
9 小时
发表于 2020-5-10 14:17:41 | 显示全部楼层 |阅读模式
5金钱
DHT传感器连接单片机PA7口(是IO口)连接后系统运行无反应  使用步进电机演示  电机功能正常         (LCD部分暂时不用)C文件

#include "stm32f10x.h"
#include "dht11.h"
u8  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;  
u8  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;  

#define BOOL unsigned char  
  
#ifndef TRUE  
#define TRUE 1  
#endif  
  
#ifndef FALSE  
#define FALSE 0  
#endif  


//Ñóê±oˉêy
void delay_ms(u16 nms)
{
  
  u32 f=nms,k;
  for (; f!=0; f--)
  {
    for(k=0x2fff; k!=0; k--);
  }
  
}                                 


//Ñóê±oˉêy 1us


void delay_us(u32 nus)
{
        u32 i;
       
        while(nus--)
        {
           i=10;
           while(i--);
  }
}


//ÅäÖÃDHT11ᬽóμÄGPIOÎaêä3öÄ£ê½
static void DHT11_DataPin_Configure_Output(void)  
{  
     GPIO_InitTypeDef  GPIO_InitStructure;  
     
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);     //ÅäÖ&#195A7½ÅÎaíÆíìêä3ö              
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;               
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
     GPIO_Init(GPIOA, &GPIO_InitStructure);  
}  
//ÅäÖÃDHT11ᬽóμÄGPIOÎaêäèëģ꽠 
static void DHT11_DataPin_Configure_Input(void)  
{  
       GPIO_InitTypeDef  GPIO_InitStructure;//DataPin;      
      
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;                  
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;              
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
     GPIO_Init(GPIOA, &GPIO_InitStructure);  
}  
//DHT11»ñè¡ò»¸öêy¾Yλ
BOOL DHT11_get_databit(void)  
{  
    uint8_t val;  
      
     val = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_7);  
    if(val == Bit_RESET){  
        return FALSE;  
    }else{  
        return TRUE;  
    }  
}  
//DHT11êä3öò»¸öêy¾Yλ  
void DHT11_set_databit(BOOL level)  
{  
    if(level == TRUE){  
        GPIO_SetBits(GPIOA, GPIO_Pin_7);  
    }else{  
        GPIO_ResetBits(GPIOA, GPIO_Pin_7);  
    }  
}  
  
void mdelay(u16 ms)   
{  
    if(ms != 0){  
        delay_ms(ms);  
    }  
}  
  
void udelay(u16 us)   
{  
    if(us != 0){  
        delay_us(us);  
    }  
}  
//DHT11¶áè¡ò»¸ö×Ö½úμÄêy¾Y
static uint8_t DHT11_read_byte(void)  
{      
    uint8_t i;   
    uint8_t data = 0;      
                        
    for(i = 0; i < 8; i++)         
    {      
        data <<= 1;         
           while((!DHT11_get_databit()));  
        udelay(10);  
        udelay(10);  
        udelay(10);  
  
        if(DHT11_get_databit())    {  
            data |= 0x1;  
            while(DHT11_get_databit());  
        } else{  
         
        }   
  
     }  
                           
     return data;  
}  
//DHT11&#198;&#244;&#182;ˉ×a&#187;&#187;   
static uint8_t DHT11_start_sampling(void)  
{  
    DHT11_DataPin_Configure_Output();  
    DHT11_set_databit(FALSE);  
    mdelay(18);  
    DHT11_set_databit(TRUE);  
    udelay(10);  
    udelay(10);  
    DHT11_set_databit(TRUE);  
  
    DHT11_DataPin_Configure_Input();  
  
    if(!DHT11_get_databit())         //T !        
    {  
       while((!DHT11_get_databit()));  
       while((DHT11_get_databit()));  
       return 1;  
    }  
  
    return 0;                 
}
//LCD&#207;&#212;ê&#190;±3&#190;°é&#171;
#define RED          0xf800
#define GREEN        0x07e0
#define BLUE         0x001f
#define WHITE        0xffff
#define BLACK        0x0000
#define YELLOW  0xFFE0
#define GRAY0   0xEF7D                           //&#187;òé&#171;0 3165 00110 001011 00101
#define GRAY1   0x8410              //&#187;òé&#171;1      00000 000000 00000
#define GRAY2   0x4208              //&#187;òé&#171;2  1111111111011111


char LCD_TEMP[8];  //&#206;&#194;&#182;èòo&#190;§&#187;o′&#230;
char LCD_HUMI[8];  //êa&#182;èòo&#190;§&#187;o′&#230;
void DHT11_get_data(void)  
{        
    u8 temp;  
    if(DHT11_start_sampling()){  
     
        U8RH_data_H_temp = DHT11_read_byte();  
        U8RH_data_L_temp = DHT11_read_byte();  
        U8T_data_H_temp  = DHT11_read_byte();  
        U8T_data_L_temp  = DHT11_read_byte();  
        U8checkdata_temp = DHT11_read_byte();  
  
        /* Data transmission finishes, pull the bus high */  
        DHT11_DataPin_Configure_Output();     
        DHT11_set_databit(TRUE);  
  
        temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);  
        if(temp==U8checkdata_temp)  
        {  
            U8RH_data_H=U8RH_data_H_temp;  
            U8RH_data_L=U8RH_data_L_temp;  
            U8T_data_H=U8T_data_H_temp;  
            U8T_data_L=U8T_data_L_temp;  
            U8checkdata=U8checkdata_temp;  
            LCD_TEMP[0] = U8T_data_H / 10 + 0x30;  
            LCD_TEMP[1] = U8T_data_H % 10 + 0x30;
                                          LCD_TEMP[2] = 'C';
                                       
            LCD_HUMI[0] = U8RH_data_H / 10 + 0x30;
            LCD_HUMI[1] = U8RH_data_H % 10 + 0x30;
                                    LCD_HUMI[2] = '%';       
                                                Gui_DrawFont_GBK24(10,20,GRAY0,BLUE,"Window Control");
                  Gui_DrawFont_GBK16(10,50,RED,BLUE,"Temp:"); //&#206;&#194;&#182;è
                                                Gui_DrawFont_GBK16(50,50,YELLOW,BLUE,&LCD_TEMP[0]);       
       
                  Gui_DrawFont_GBK16(10,70,RED,BLUE,"Humi:"); //êa&#182;è
                                                Gui_DrawFont_GBK16(50,70,YELLOW,BLUE,&LCD_HUMI[0]);         
       }else{  
       }   
    }else{  
    }  
}  
  
void DHT11_test()  
{  
        DHT11_get_data();  
}  






头文件
#ifndef _DHT11_H
#define _DHT11_H


#include "stm32f10x.h"
#include "misc.h"
#define         DHT11        rPA7                        //PA7


#define         DHT11_PORT                GPIO_Pin_7

#endif



电机运行程序
        if(U8RH_data_H > Hum_Thre)//êa&#182;è1y&#184;&#223;£&#172;&#207;&#194;óêá&#203; 1&#216;′°
        {
                if(!Window_Close_Flag)
                {
                Window_Open_Flag = 0;Window_Close_Flag = 1;
                Gui_DrawFont_GBK16(10,110,WHITE,BLUE,"wind close");                        Motor_Ctrl_Func(2,3,2000);
                }
        }

最佳答案

查看完整内容[请看2#楼]

可以了 是我的主程序的问题 以上程序是对的
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2020-5-9
在线时间
9 小时
 楼主| 发表于 2020-5-10 14:17:42 | 显示全部楼层
可以了  是我的主程序的问题   以上程序是对的
回复

使用道具 举报

0

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2020-5-6
在线时间
0 小时
发表于 2020-5-10 14:17:44 | 显示全部楼层
纯菜鸟,帮楼主顶一下。。
回复

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2020-5-9
在线时间
9 小时
 楼主| 发表于 2020-5-10 14:21:03 | 显示全部楼层
求大神帮忙看看是不是程序问题  接线应该都连对了1VCC  2PA7 3GND
回复

使用道具 举报

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2019-9-5
在线时间
27 小时
发表于 2020-5-10 17:26:59 | 显示全部楼层
本帖最后由 flashman8 于 2020-5-10 17:28 编辑

有条件买个逻辑分析仪看一下通信波形的时序,再对照DHT11的资料看看,入门逻辑分析模块也不贵,也就几十块钱,调试的时候一目了然。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-28 09:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表