野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10768|回复: 4

求大神看一下我的DHT11的代码找了几天都不知道错哪里

[复制链接]
发表于 2018-4-26 17:39:27 | 显示全部楼层 |阅读模式
#include <stm32f4xx.h>
#include <stdio.h>

unsigned int utime=0;
void SysTick_Handler()
{
  if(utime)
  utime--;
}
void Delays(unsigned int n)
{
  utime=1*n;
  while(utime);

}
void usart()
{

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
  GPIO_InitTypeDef gpio;
  gpio.GPIO_Mode=GPIO_Mode_AF;
  gpio.GPIO_OType=GPIO_OType_PP;
  gpio.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10;
  gpio.GPIO_PuPd= GPIO_PuPd_NOPULL;
  gpio.GPIO_Speed= GPIO_Low_Speed;
  GPIO_Init(GPIOA,&gpio);
  GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
  GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 ,ENABLE);
  USART_InitTypeDef usart;
  usart.USART_BaudRate=9600;
  usart.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
  usart.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
  usart.USART_Parity=USART_Parity_No ;
  usart.USART_StopBits=1;
  usart.USART_WordLength=8;
  USART_Cmd(USART1,ENABLE);
  USART_Init(USART1,&usart);

}

int fputc(int ch,FILE*fp)
{
  USART_SendData( USART1, ch );
  while( USART_GetFlagStatus( USART1, USART_FLAG_TXE ) == RESET );
  return ch;

}

char Temper_H;//&#206;&#194;&#213;&#251;
char Temper_L;//&#206;&#194;D&#161;               
char Humid_H;//êa&#213;&#251;               
char Humid_L;//êaD&#161;               



void GL5516_Input()
{
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
  GPIO_InitTypeDef gpio;
  gpio.GPIO_Mode=GPIO_Mode_IN;
  gpio.GPIO_OType=GPIO_OType_PP;
  gpio.GPIO_Pin=GPIO_Pin_4;
  gpio.GPIO_PuPd= GPIO_PuPd_NOPULL;
  gpio.GPIO_Speed=GPIO_Fast_Speed ;
  GPIO_Init(GPIOA,&gpio);
}

void DHT11_Out()
{
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
  GPIO_InitTypeDef gpio;
  gpio.GPIO_Mode=GPIO_Mode_OUT;
  gpio.GPIO_OType=GPIO_OType_PP;
  gpio.GPIO_Pin=GPIO_Pin_2;
  gpio.GPIO_PuPd= GPIO_PuPd_NOPULL;
  gpio.GPIO_Speed=GPIO_Fast_Speed ;
  GPIO_Init(GPIOE,&gpio);
}
void DHT11_Input()
{
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
  GPIO_InitTypeDef gpio;
  gpio.GPIO_Mode=GPIO_Mode_IN;
  gpio.GPIO_OType=GPIO_OType_PP;
  gpio.GPIO_Pin=GPIO_Pin_2;
  gpio.GPIO_PuPd= GPIO_PuPd_NOPULL;
  gpio.GPIO_Speed=GPIO_Fast_Speed ;
  GPIO_Init(GPIOE,&gpio);


}
void DHT11_Init()
{
  DHT11_Out();
  Temper_H=0;
  Temper_L=0;
  Humid_H=0;
  Humid_L=0;
}

int DHT11_Readbyte()
{

  int data=0;
        int i;
        int cout;
for(i=0;i<8;i++)
{
  cout=1;
  printf("111");
  while((!GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2))&&cout);
  Delays(40);
  printf("222");
  data=data<<1;
  if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2)==1)
  {
    data=data|1;
  }
  cout=1;
  while(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2)&&cout);
}
        return data;
  printf("%d\n",data);
}  

int  DHT11_Readdata()
{

  unsigned int cout = 1;
        unsigned int T_a, T_b, H_a, H_b, jy;
  DHT11_Out();
  GPIO_SetBits(GPIOE,GPIO_Pin_2);       
  GPIO_ResetBits(GPIOE,GPIO_Pin_2);
        //*(unsigned int *)(0x40021000 + 0x14 )  &= ~(1<<2);
  Delays(30000);
  GPIO_SetBits(GPIOE,GPIO_Pin_2);               
  // *(unsigned int *)(0x40021000 + 0x14 )  |= 1<<2;
  Delays(40);
  DHT11_Input();
if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2)==0)
{
  cout=1;

  while((!GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2))&&cout++);
  printf("444");
  cout=1;
  while(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2)&&cout++);
  printf("555");
  T_a=DHT11_Readbyte();
  T_b=DHT11_Readbyte();               
  H_a=DHT11_Readbyte();               
  H_b=DHT11_Readbyte();               
  printf("%d\n",T_a);
  jy=DHT11_Readbyte();
  GPIO_SetBits(GPIOE,GPIO_Pin_2);
  if(jy==T_a+T_b+H_a+H_b)
    {
        Temper_H=T_a;
        Temper_L=T_b;
        Humid_H=H_a;
        Humid_L=H_b;
        return 1;
    }
  else{
      return 0 ;
      }

}
  return  0;
}
unsigned char get_humidity()  
{  
  return Humid_H << 8 | Humid_L;
}  

unsigned char get_temperature()  
{  
  return Temper_H << 8 | Temper_L;
}  

int main()
{
SysTick_Config(180);
usart();

while(1)
{
  DHT11_Init();
  if(DHT11_Readdata())
    {
      char temper=get_temperature();
      char humid=get_humidity();
      printf("&#206;&#194;&#182;è :%d.%d êa&#182;è: %d.%d \n", \
      temper/256, temper%256,        \
      humid/256, humid%256);
    }
    Delays(100000);
}


}

回复

使用道具 举报

发表于 2018-4-27 08:58:03 | 显示全部楼层
这个要结合实验现象来调试
回复 支持 反对

使用道具 举报

发表于 2018-4-27 09:20:03 | 显示全部楼层
  1. void DHT11_Input()
  2. {
  3.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
  4.   GPIO_InitTypeDef gpio;
  5.   gpio.GPIO_Mode=GPIO_Mode_IN;
  6.   gpio.GPIO_OType=GPIO_OType_PP;
  7.   gpio.GPIO_Pin=GPIO_Pin_2;
  8.   gpio.GPIO_PuPd= GPIO_PuPd_NOPULL;
  9.   gpio.GPIO_Speed=GPIO_Fast_Speed ;
  10.   GPIO_Init(GPIOE,&gpio);
复制代码


你这输入模式怎么也用推挽输出?推挽拉高后dht11没办法拉低的吧。。。开漏emmm可以试试 最好是浮空输入咯
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-27 10:16:36 | 显示全部楼层
非谢家之宝树 发表于 2018-4-27 09:20
你这输入模式怎么也用推挽输出?推挽拉高后dht11没办法拉低的吧。。。开漏emmm可以试试 最好是浮空输入 ...

stm32f4的浮空输入怎么配置啊
回复 支持 反对

使用道具 举报

发表于 2018-4-27 11:21:22 | 显示全部楼层
zhuxing 发表于 2018-4-27 10:16
stm32f4的浮空输入怎么配置啊

可以参考429教程的按键输入那里
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 12:01 , Processed in 0.029632 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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