初级会员

- 积分
- 139
- 金钱
- 139
- 注册时间
- 2017-10-26
- 在线时间
- 25 小时
|
10金钱
如题,配置完后湿度有显示数据,温度总是不对,大神们帮忙看看是哪里出问题了
串口打印温湿度度
main代码:
int main(void)
{
uint8_t temperature;
uint8_t humidity;
uint8_t t=0;
uint8_t buf[5];
HAL_Init( );
SystemClock_Config( );
HW_Init( );
DHT11_Init( );
while(1)
{
if(t%10==0)
{
DHT11_Read_Data(&temperature,&humidity);
PRINTF("the temperature1 is %dC\n",buf[2]);
DelayMs(100);
PRINTF("the temperature2 is %dC\n",buf[3]);
DelayMs(100);
PRINTF("the humidity1 is %dRH\n",buf[0]);
DelayMs(100);
PRINTF("the humidity2 is %dRH\n",buf[1]);
DelayMs(100);
PRINTF("the toal is %dC\n",buf[4]);
DelayMs(100);
}
DelayMs(50);
t++;
if(t==20)
{
t=0;
LED_Toggle( LED_RED1 );
}
}
}
dht11.c代码
void DHT11_IO_IN(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
dht11_GPIO_CLK_ENABLE();
GPIO_InitStruct.Pin = dht11_PIN; //配置dht11 PB8
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
void DHT11_IO_OUT(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
dht11_GPIO_CLK_ENABLE();
GPIO_InitStruct.Pin = dht11_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
void DHT11_Rst(void)
{
DHT11_IO_OUT();
DHT11_DQ_Low;
DelayMs(20);
DHT11_DQ_High;
Delayus(30);
}
uint8_t DHT11_Check(void)
{
uint8_t retry=0;
DHT11_IO_IN();//SET INPUT
while ((HAL_GPIO_ReadPin(dht11_GPIO_PORT,dht11_PIN)==GPIO_PIN_SET)&&retry<100)
{
retry++;
Delayus(1);
};
if(retry>=100)return 1;
else retry=0;
while ((HAL_GPIO_ReadPin(dht11_GPIO_PORT,dht11_PIN)==GPIO_PIN_RESET)&&retry<100)
{
retry++;
Delayus(1);
};
if(retry>=100)return 1;
return 0;
}
uint8_t DHT11_Read_Bit(void)
{
uint8_t retry=0;
while((HAL_GPIO_ReadPin(dht11_GPIO_PORT,dht11_PIN)==GPIO_PIN_SET)&&retry<100)
{
retry++;
Delayus(1);
}
retry=0;
while((HAL_GPIO_ReadPin(dht11_GPIO_PORT,dht11_PIN)==GPIO_PIN_RESET)&&retry<100)
{
retry++;
Delayus(1);
}
Delayus(40);
if(HAL_GPIO_ReadPin(dht11_GPIO_PORT,dht11_PIN)==GPIO_PIN_SET)
return 1;
else
return 0;
}
uint8_t DHT11_Read_Byte(void)
{
uint8_t i,dat;
dat=0;
for (i=0;i<8;i++)
{
dat<<=1;
dat|=DHT11_Read_Bit();
}
return dat;
}
uint8_t DHT11_Read_Data(uint8_t *temp,uint8_t *humi)
{
uint8_t buf[5];
uint8_t i;
DHT11_Rst();
if(DHT11_Check()==0)
{
for(i=0;i<5;i++)
{
buf=DHT11_Read_Byte();
}
if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
{
*humi=buf[0];
*temp=buf[2];
}
}else return 1;
return 0;
}
uint8_t DHT11_Init(void)
{
DHT11_Rst();
return DHT11_Check();
}
dht11.h代码
#ifndef __DHT11_H
#define __DHT11_H
#include "stm32l0xx_hal.h"
#include "hw.h"
#define dht11_PIN GPIO_PIN_8
#define dht11_GPIO_PORT GPIOB
#define dht11_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define dht11_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
#define DHT11_DQ_High HAL_GPIO_WritePin(dht11_GPIO_PORT, dht11_PIN, GPIO_PIN_SET);
#define DHT11_DQ_Low HAL_GPIO_WritePin(dht11_GPIO_PORT, dht11_PIN, GPIO_PIN_RESET);
void DHT11_IO_OUT(void);
void DHT11_IO_IN(void);
uint8_t DHT11_Init(void);
uint8_t DHT11_Read_Data(uint8_t *temp,uint8_t *humi) ;
uint8_t DHT11_Read_Byte(void);
uint8_t DHT11_Read_Bit(void);
uint8_t DHT11_Check(void);
void DHT11_Rst(void);
#endif
|
|