新手上路
积分 26
金钱 26
注册时间 2018-5-30
在线时间 2 小时
2 金钱
本帖最后由 三尺飒沓 于 2018-6-20 14:59 编辑
..\OBJ\Template.axf: Error: L6218E: Undefined symbol DHT22_Read_Data (referred from main.o).
..\OBJ\Template.axf: Error: L6218E: Undefined symbol DHT22_Read_Bit (referred from dht22.o).
..\OBJ\Template.axf: Error: L6218E: Undefined symbol DHT22_Read_Byte (referred from dht22.o).
用的dht22温湿度传感器与dht11原理相同,参照dht11的实验结构写的,这几个函数都定义了,也包含头文件了,还是提示这个错误
main.c文件如下
#include "usart.h"
#include "led.h"
#include "delay.h"
#include "dht22.h"
#include "sys.h"
int main(void)
{
u8 t=0;
u8 temperature1,temperature2;
u8 humidity1,humidity2;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
uart_init(115200);
delay_init();
led_Init();
while(DHT22_Init()) {}
while(1)
{
if(t%10==0)
{
DHT22_Read_Data(&temperature1,&temperature2,&humidity1,&humidity2);
printf("温度:%d.%d\r\n",temperature1,temperature2);
printf("湿度:%d.%d\r\n",humidity1,humidity2);
}
delay_ms(10);
t++;
if(t==20)
{
t=0;
led0=!led0;
}
}
}
dht22.h文件如下
#ifndef _dht22_H
#define _dht22_H
#include "sys.h"
#define DHT22_IO_IN() {GPIOG->CRH&=0xFFFF0FFF;GPIOG->CRH|=8<<12;}
#define DHT22_IO_OUT() {GPIOG->CRH&=0xFFFF0FFF;GPIOG->CRH|=3<<12;}
#define DHT22_DQ_IN PGin(11)
#define DHT22_DQ_OUT PGout(11)
u8 DHT22_Init(void);
u8 DHT22_Read_Data(u8 *temp1,u8 *temp2,u8 *humi1,u8 *humi2);
u8 DHT22_Read_Byte(void);
u8 DHT22_Read_Bit(void);
u8 DHT22_Check(void);
void DHT22_Rst(void);
#endif
dht22.c文件如下
#include "dht22.h"
#include "delay.h"
void DHT22_Rst(void)
{
DHT22_IO_OUT();
DHT22_DQ_OUT=0;
delay_us(700);
DHT22_DQ_OUT=1;
delay_us(30);
}
u8 DHT22_Check(void)
{
u8 retry=0;
DHT22_IO_IN();
while(DHT22_DQ_IN&&retry<90)
{
retry++;
delay_us(1);
}
if(retry>=90)return 1;
else retry=0;
while(!DHT22_DQ_IN&&retry<90)
{
retry++;
delay_us(1);
}
if(retry>=90)return 1;
return 0;
}
u8 DHT22_ReadBit(void)
{
u8 retry=0;
while(DHT22_DQ_IN&&retry<100)
{
retry++;
delay_us(1);
}
retry=0;
while(!DHT22_DQ_IN&&retry<100)
{
retry++;
delay_us(1);
}
delay_us(40);
if(DHT22_DQ_IN)return 1;
else return 0;
}
u8 DHT22_ReadByte(void)
{
u8 i,dat;
dat=0;
for (i=0;i<8;i++)
{
dat<<=1;
dat|=DHT22_Read_Bit();
}
return dat;
}
u8 DHT22_ReadData(u8 *temp1,u8 *temp2,u8 *humi1,u8 *humi2)
{
u8 buf[5];
u8 i;
DHT22_Rst();
if(DHT22_Check()==0)
{
for(i=0;i<5;i++)
{
buf=DHT22_Read_Byte();
}
if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
{
*humi1=buf[0];
*humi2=buf[1];
*temp1=buf[2];
*temp2=buf[3];
}
}else return 1;
return 0;
}
u8 DHT22_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOG, &GPIO_InitStructure);
GPIO_SetBits(GPIOG,GPIO_Pin_11);
DHT22_Rst();
return DHT22_Check();
}
我来回答