1、实验内容:
使用STM32F103完成基于I2C协议的AHT20温湿度传感器的数据采集,并将采集的温度-湿度值通过串口输出。实现每隔2秒钟采集一次温湿度数据,并通过串口发送到上位机。
2、CUBEMX软件来配置
1、配置RCC
2、配置SYS
3、配置I2C
4、配置时钟树
5、配置USART
6、配置NVIC
7、创建项目,并打开
2、编译代码
1、添加AHT代码文件
AHT20-21_DEMO_V1_3.c
/*******************************************/
/*@°æÈ¨ËùÓУº¹ãÖݰÂËɵç×ÓÓÐÏÞ¹«Ë¾ */
/*@×÷ÕߣºÎÂʪ¶È´«¸ÐÆ÷ÊÂÒµ²¿ */
/*@°æ±¾£ºV1.2 */
/*******************************************/
#include "stm32f10x.h"
#include "AHT20-21_DEMO_V1_3.h"
void Delay_N10us(uint32_t t)//ÑÓʱº¯Êý
{
uint32_t k;
while(t--)
{
for (k = 0; k < 2; k++);//110
}
}
void SensorDelay_us(uint32_t t)//ÑÓʱº¯Êý
{
for(t = t-2; t>0; t--)
{
Delay_N10us(1);
}
}
void Delay_4us(void) //ÑÓʱº¯Êý
{
Delay_N10us(1);
Delay_N10us(1);
Delay_N10us(1);
Delay_N10us(1);
}
void Delay_5us(void) //ÑÓʱº¯Êý
{
Delay_N10us(1);
Delay_N10us(1);
Delay_N10us(1);
Delay_N10us(1);
Delay_N10us(1);
}
void Delay_1ms(uint32_t t) //ÑÓʱº¯Êý
{
while(t--)
{
SensorDelay_us(1000);//////ÑÓʱ1ms
}
}
void AHT20_Clock_Init(void) //ÑÓʱº¯Êý
{
RCC_APB2PeriphClockCmd(CC_APB2Periph_GPIOB,ENABLE);
}
void SDA_Pin_Output_High(void) //½«PB15ÅäÖÃΪÊä³ö £¬ ²¢ÉèÖÃΪ¸ßµçƽ£¬ PB15×÷ΪI2CµÄSDA
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;//ÍÆÍìÊä³ö
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,& GPIO_InitStruct);
GPIO_SetBits(GPIOB,GPIO_Pin_15);
}
void SDA_Pin_Output_Low(void) //½«P15ÅäÖÃΪÊä³ö ²¢ÉèÖÃΪµÍµçƽ
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;//ÍÆÍìÊä³ö
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,& GPIO_InitStruct);
GPIO_ResetBits(GPIOB,GPIO_Pin_15);
}
void SDA_Pin_IN_FLOATING(void) //SDAÅäÖÃΪ¸¡¿ÕÊäÈë
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;//
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init( GPIOB,&GPIO_InitStruct);
}
void SCL_Pin_Output_High(void) //SCLÊä³ö¸ßµçƽ£¬P14×÷ΪI2CµÄSCL
{
GPIO_SetBits(GPIOB,GPIO_Pin_14);
}
void SCL_Pin_Output_Low(void) //SCLÊä³öµÍµçƽ
{
GPIO_ResetBits(GPIOB,GPIO_Pin_14);
}
void Init_I2C_Sensor_Port(void) //³õʼ»¯I2C½Ó¿Ú,Êä³öΪ¸ßµçƽ
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;//ÍÆÍìÊä³ö
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,& GPIO_InitStruct);
GPIO_SetBits(GPIOB,GPIO_Pin_15);//Êä³ö¸ßµçƽ
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;//ÍÆÍìÊä³ö
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_14;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,& GPIO_InitStruct);
GPIO_SetBits(GPIOB,GPIO_Pin_15);//Êä³ö¸ßµçƽ
}
void I2C_Start(void) //I2CÖ÷»ú·¢ËÍSTARTÐźÅ
{
SDA_Pin_Output_High();
SensorDelay_us(8);
SCL_Pin_Output_High();
SensorDelay_us(8);
SDA_Pin_Output_Low();
SensorDelay_us(8);
SCL_Pin_Output_Low();
SensorDelay_us(8);
}
void AHT20_WR_Byte(uint8_t Byte) //ÍùAHT20дһ¸ö×Ö½Ú
{
uint8_t Data,N,i;
Data=Byte;
i = 0x80;
for(N=0;N<8;N++)
{
SCL_Pin_Output_Low();
Delay_4us();
if(i&Data)
{
SDA_Pin_Output_High();
}
else
{
SDA_Pin_Output_Low();
}
SCL_Pin_Output_High();
Delay_4us();
Data <<= 1;
}
SCL_Pin_Output_Low();
SensorDelay_us(8);
SDA_Pin_IN_FLOATING();
SensorDelay_us(8);
}
uint8_t AHT20_RD_Byte(void)//´ÓAHT20¶Áȡһ¸ö×Ö½Ú
{
uint8_t Byte,i,a;
Byte = 0;
SCL_Pin_Output_Low();
SDA_Pin_IN_FLOATING();
SensorDelay_us(8);
for(i=0;i<8;i++)
{
SCL_Pin_Output_High();
Delay_5us();
a=0;
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)) a=1;
Byte = (Byte<<1)|a;
SCL_Pin_Output_Low();
Delay_5us();
}
SDA_Pin_IN_FLOATING();
SensorDelay_us(8);
return Byte;
}
uint8_t Receive_ACK(void) //¿´AHT20ÊÇ·ñÓлظ´ACK
{
uint16_t CNT;
CNT = 0;
SCL_Pin_Output_Low();
SDA_Pin_IN_FLOATING();
SensorDelay_us(8);
SCL_Pin_Output_High();
SensorDelay_us(8);
while((GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)) && CNT < 100)
CNT++;
if(CNT == 100)
{
return 0;
}
SCL_Pin_Output_Low();
SensorDelay_us(8);
return 1;
}
void Send_ACK(void) //Ö÷»ú»Ø¸´ACKÐźÅ
{
SCL_Pin_Output_Low();
SensorDelay_us(8);
SDA_Pin_Output_Low();
SensorDelay_us(8);
SCL_Pin_Output_High();
SensorDelay_us(8);
SCL_Pin_Output_Low();
SensorDelay_us(8);
SDA_Pin_IN_FLOATING();
SensorDelay_us(8);
}
void Send_NOT_ACK(void) //Ö÷»ú²»»Ø¸´ACK
{
SCL_Pin_Output_Low();
SensorDelay_us(8);
SDA_Pin_Output_High();
SensorDelay_us(8);
SCL_Pin_Output_High();
SensorDelay_us(8);
SCL_Pin_Output_Low();
SensorDelay_us(8);
SDA_Pin_Output_Low();
SensorDelay_us(8);
}
void Stop_I2C(void) //Ò»ÌõÐÒé½áÊø
{
SDA_Pin_Output_Low();
SensorDelay_us(8);
SCL_Pin_Output_High();
SensorDelay_us(8);
SDA_Pin_Output_High();
SensorDelay_us(8);
}
uint8_t AHT20_Read_Status(void)//¶ÁÈ¡AHT20µÄ״̬¼Ä´æÆ÷
{
uint8_t Byte_first;
I2C_Start();
AHT20_WR_Byte(0x71);
Receive_ACK();
Byte_first = AHT20_RD_Byte();
Send_NOT_ACK();
Stop_I2C();
return Byte_first;
}
uint8_t AHT20_Read_Cal_Enable(void) //²éѯcal enableλÓÐûÓÐʹÄÜ
{
uint8_t val = 0;//ret = 0,
val = AHT20_Read_Status();
if((val & 0x68)==0x08)
return 1;
else return 0;
}
void AHT20_SendAC(void) //ÏòAHT20·¢ËÍACÃüÁî
{
I2C_Start();
AHT20_WR_Byte(0x70);
Receive_ACK();
AHT20_WR_Byte(0xac);//0xAC²É¼¯ÃüÁî
Receive_ACK();
AHT20_WR_Byte(0x33);
Receive_ACK();
AHT20_WR_Byte(0x00);
Receive_ACK();
Stop_I2C();
}
//CRCУÑéÀàÐÍ£ºCRC8/MAXIM
//¶àÏîʽ£ºX8+X5+X4+1
//Poly£º0011 0001 0x31
//¸ßλ·Åµ½ºóÃæ¾Í±ä³É 1000 1100 0x8c
//CÏÖʵ´úÂ룺
uint8_t Calc_CRC8(uint8_t *message,uint8_t Num)
{
uint8_t i;
uint8_t byte;
uint8_t crc=0xFF;
for(byte=0; byte<Num; byte++)
{
crc^=(message[byte]);
for(i=8;i>0;--i)
{
if(crc&0x80) crc=(crc<<1)^0x31;
else crc=(crc<<1);
}
}
return crc;
}
void AHT20_Read_CTdata(uint32_t *ct) //ûÓÐCRCУÑ飬ֱ½Ó¶ÁÈ¡AHT20µÄζȺÍʪ¶ÈÊý¾Ý
{
volatile uint8_t Byte_1th=0;
volatile uint8_t Byte_2th=0;
volatile uint8_t Byte_3th=0;
volatile uint8_t Byte_4th=0;
volatile uint8_t Byte_5th=0;
volatile uint8_t Byte_6th=0;
uint32_t RetuData = 0;
uint16_t cnt = 0;
AHT20_SendAC();//ÏòAHT10·¢ËÍACÃüÁî
Delay_1ms(80);//ÑÓʱ80ms×óÓÒ
cnt = 0;
while(((AHT20_Read_Status()&0x80)==0x80))//Ö±µ½×´Ì¬bit[7]Ϊ0£¬±íʾΪ¿ÕÏÐ״̬£¬ÈôΪ1£¬±íʾæ״̬
{
SensorDelay_us(1508);
if(cnt++>=100)
{
break;
}
}
I2C_Start();
AHT20_WR_Byte(0x71);
Receive_ACK();
Byte_1th = AHT20_RD_Byte();//״̬×Ö£¬²éѯµ½×´Ì¬Îª0x98,±íʾΪæ״̬£¬bit[7]Ϊ1£»×´Ì¬Îª0x1C£¬»òÕß0x0C£¬»òÕß0x08±íʾΪ¿ÕÏÐ״̬£¬bit[7]Ϊ0
Send_ACK();
Byte_2th = AHT20_RD_Byte();//ʪ¶È
Send_ACK();
Byte_3th = AHT20_RD_Byte();//ʪ¶È
Send_ACK();
Byte_4th = AHT20_RD_Byte();//ʪ¶È/ζÈ
Send_ACK();
Byte_5th = AHT20_RD_Byte();//ζÈ
Send_ACK();
Byte_6th = AHT20_RD_Byte();//ζÈ
Send_NOT_ACK();
Stop_I2C();
RetuData = (RetuData|Byte_2th)<<8;
RetuData = (RetuData|Byte_3th)<<8;
RetuData = (RetuData|Byte_4th);
RetuData =RetuData >>4;
ct[0] = RetuData;//ʪ¶È
RetuData = 0;
RetuData = (RetuData|Byte_4th)<<8;
RetuData = (RetuData|Byte_5th)<<8;
RetuData = (RetuData|Byte_6th);
RetuData = RetuData&0xfffff;
ct[1] =RetuData; //ζÈ
}
void AHT20_Read_CTdata_crc(uint32_t *ct) //CRCУÑéºó£¬¶ÁÈ¡AHT20µÄζȺÍʪ¶ÈÊý¾Ý
{
volatile uint8_t Byte_1th=0;
volatile uint8_t Byte_2th=0;
volatile uint8_t Byte_3th=0;
volatile uint8_t Byte_4th=0;
volatile uint8_t Byte_5th=0;
volatile uint8_t Byte_6th=0;
volatile uint8_t Byte_7th=0;
uint32_t RetuData = 0;
uint16_t cnt = 0;
// uint8_t CRCDATA=0;
uint8_t CTDATA[6]={0};//ÓÃÓÚCRC´«µÝÊý×é
AHT20_SendAC();//ÏòAHT10·¢ËÍACÃüÁî
Delay_1ms(80);//ÑÓʱ80ms×óÓÒ
cnt = 0;
while(((AHT20_Read_Status()&0x80)==0x80))//Ö±µ½×´Ì¬bit[7]Ϊ0£¬±íʾΪ¿ÕÏÐ״̬£¬ÈôΪ1£¬±íʾæ״̬
{
SensorDelay_us(1508);
if(cnt++>=100)
{
break;
}
}
I2C_Start();
AHT20_WR_Byte(0x71);
Receive_ACK();
CTDATA[0]=Byte_1th = AHT20_RD_Byte();//״̬×Ö£¬²éѯµ½×´Ì¬Îª0x98,±íʾΪæ״̬£¬bit[7]Ϊ1£»×´Ì¬Îª0x1C£¬»òÕß0x0C£¬»òÕß0x08±íʾΪ¿ÕÏÐ״̬£¬bit[7]Ϊ0
Send_ACK();
CTDATA[1]=Byte_2th = AHT20_RD_Byte();//ʪ¶È
Send_ACK();
CTDATA[2]=Byte_3th = AHT20_RD_Byte();//ʪ¶È
Send_ACK();
CTDATA[3]=Byte_4th = AHT20_RD_Byte();//ʪ¶È/ζÈ
Send_ACK();
CTDATA[4]=Byte_5th = AHT20_RD_Byte();//ζÈ
Send_ACK();
CTDATA[5]=Byte_6th = AHT20_RD_Byte();//ζÈ
Send_ACK();
Byte_7th = AHT20_RD_Byte();//CRCÊý¾Ý
Send_NOT_ACK(); //×¢Òâ: ×îºóÊÇ·¢ËÍNAK
Stop_I2C();
if(Calc_CRC8(CTDATA,6)==Byte_7th)
{
RetuData = (RetuData|Byte_2th)<<8;
RetuData = (RetuData|Byte_3th)<<8;
RetuData = (RetuData|Byte_4th);
RetuData =RetuData >>4;
ct[0] = RetuData;//ʪ¶È
RetuData = 0;
RetuData = (RetuData|Byte_4th)<<8;
RetuData = (RetuData|Byte_5th)<<8;
RetuData = (RetuData|Byte_6th);
RetuData = RetuData&0xfffff;
ct[1] =RetuData; //ζÈ
}
else
{
ct[0]=0x00;
ct[1]=0x00;//УÑé´íÎó·µ»ØÖµ£¬¿Í»§¿ÉÒÔ¸ù¾Ý×Ô¼ºÐèÒª¸ü¸Ä
}//CRCÊý¾Ý
}
void AHT20_Init(void) //³õʼ»¯AHT20
{
Init_I2C_Sensor_Port();
I2C_Start();
AHT20_WR_Byte(0x70);
Receive_ACK();
AHT20_WR_Byte(0xa8);//0xA8½øÈëNOR¹¤×÷ģʽ
Receive_ACK();
AHT20_WR_Byte(0x00);
Receive_ACK();
AHT20_WR_Byte(0x00);
Receive_ACK();
Stop_I2C();
Delay_1ms(10);//ÑÓʱ10ms×óÓÒ
I2C_Start();
AHT20_WR_Byte(0x70);
Receive_ACK();
AHT20_WR_Byte(0xbe);//0xBE³õʼ»¯ÃüÁAHT20µÄ³õʼ»¯ÃüÁîÊÇ0xBE, AHT10µÄ³õʼ»¯ÃüÁîÊÇ0xE1
Receive_ACK();
AHT20_WR_Byte(0x08);//Ïà¹Ø¼Ä´æÆ÷bit[3]ÖÃ1£¬ÎªÐ£×¼Êä³ö
Receive_ACK();
AHT20_WR_Byte(0x00);
Receive_ACK();
Stop_I2C();
Delay_1ms(10);//ÑÓʱ10ms×óÓÒ
}
void JH_Reset_REG(uint8_t addr)
{
uint8_t Byte_first,Byte_second,Byte_third,Byte_fourth;
I2C_Start();
AHT20_WR_Byte(0x70);//ÔÀ´ÊÇ0x70
Receive_ACK();
AHT20_WR_Byte(addr);
Receive_ACK();
AHT20_WR_Byte(0x00);
Receive_ACK();
AHT20_WR_Byte(0x00);
Receive_ACK();
Stop_I2C();
Delay_1ms(5);//ÑÓʱ5ms×óÓÒ
I2C_Start();
AHT20_WR_Byte(0x71);//
Receive_ACK();
Byte_first = AHT20_RD_Byte();
Send_ACK();
Byte_second = AHT20_RD_Byte();
Send_ACK();
Byte_third = AHT20_RD_Byte();
Send_NOT_ACK();
Stop_I2C();
Delay_1ms(10);//ÑÓʱ10ms×óÓÒ
I2C_Start();
AHT20_WR_Byte(0x70);///
Receive_ACK();
AHT20_WR_Byte(0xB0|addr);////¼Ä´æÆ÷ÃüÁî
Receive_ACK();
AHT20_WR_Byte(Byte_second);
Receive_ACK();
AHT20_WR_Byte(Byte_third);
Receive_ACK();
Stop_I2C();
Byte_second=0x00;
Byte_third =0x00;
}
void AHT20_Start_Init(void)
{
JH_Reset_REG(0x1b);
JH_Reset_REG(0x1c);
JH_Reset_REG(0x1e);
}
int32_t main(void)
{
uint32_t CT_data[2];
volatile int c1,t1;
/***********************************************************************************/
/**///¢Ù¸ÕÉϵ磬²úƷоƬÄÚ²¿¾ÍÐ÷ÐèҪʱ¼ä£¬ÑÓʱ100~500ms,½¨Òé500ms
/***********************************************************************************/
Delay_1ms(500);
/***********************************************************************************/
/**///¢ÚÉϵçµÚÒ»´Î·¢0x71¶Áȡ״̬×Ö£¬ÅжÏ״̬×ÖÊÇ·ñΪ0x18,Èç¹û²»ÊÇ0x18,½øÐмĴæÆ÷³õʼ»¯
/***********************************************************************************/
if((AHT20_Read_Status()&0x18)!=0x18)
{
AHT20_Start_Init(); //ÖØÐ³õʼ»¯¼Ä´æÆ÷
Delay_1ms(10);
}
/***********************************************************************************/
/**///¢Û¸ù¾Ý¿Í»§×Ô¼ºÐèÇó·¢²âÁ¿ÃüÁî¶ÁÈ¡ÎÂʪ¶ÈÊý¾Ý£¬µ±Ç°while£¨1£©Ñ»··¢²âÁ¿ÃüÁî¶ÁÈ¡ÎÂʪ¶ÈÊý¾Ý£¬½ö¹©²Î¿¼
/***********************************************************************************/
while(1)
{
AHT20_Read_CTdata(CT_data); //²»¾¹ýCRCУÑ飬ֱ½Ó¶ÁÈ¡AHT20µÄζȺÍʪ¶ÈÊý¾Ý ÍÆ¼öÿ¸ô´óÓÚ1S¶ÁÒ»´Î
//AHT20_Read_CTdata_crc(CT_data); //crcУÑéºó£¬¶ÁÈ¡AHT20µÄζȺÍʪ¶ÈÊý¾Ý
c1 = CT_data[0]*100*10/1024/1024; //¼ÆËãµÃµ½Êª¶ÈÖµc1£¨·Å´óÁË10±¶£©
t1 = CT_data[1]*200*10/1024/1024-500;//¼ÆËãµÃµ½Î¶ÈÖµt1£¨·Å´óÁË10±¶£©
////ÏÂÒ»²½¿Í»§´¦ÀíÏÔʾÊý¾Ý£¬
}
}
AHT20-21_DEMO_V1_3.h 文件
#ifndef _AHT20_DEMO_
#define _AHT20_DEMO_
#include "stm32f10x.h"
void Delay_N10us(uint32_t t);//ÑÓʱº¯Êý
void SensorDelay_us(uint32_t t);//ÑÓʱº¯Êý
void Delay_4us(void); //ÑÓʱº¯Êý
void Delay_5us(void); //ÑÓʱº¯Êý
void Delay_1ms(uint32_t t);
void AHT20_Clock_Init(void); //ÑÓʱº¯Êý
void SDA_Pin_Output_High(void) ; //½«PB15ÅäÖÃΪÊä³ö £¬ ²¢ÉèÖÃΪ¸ßµçƽ£¬ PB15×÷ΪI2CµÄSDA
void SDA_Pin_Output_Low(void); //½«P15ÅäÖÃΪÊä³ö ²¢ÉèÖÃΪµÍµçƽ
void SDA_Pin_IN_FLOATING(void); //SDAÅäÖÃΪ¸¡¿ÕÊäÈë
void SCL_Pin_Output_High(void); //SCLÊä³ö¸ßµçƽ£¬P14×÷ΪI2CµÄSCL
void SCL_Pin_Output_Low(void); //SCLÊä³öµÍµçƽ
void Init_I2C_Sensor_Port(void); //³õʼ»¯I2C½Ó¿Ú,Êä³öΪ¸ßµçƽ
void I2C_Start(void); //I2CÖ÷»ú·¢ËÍSTARTÐźÅ
void AHT20_WR_Byte(uint8_t Byte); //ÍùAHT20дһ¸ö×Ö½Ú
uint8_t AHT20_RD_Byte(void);//´ÓAHT20¶Áȡһ¸ö×Ö½Ú
uint8_t Receive_ACK(void); //¿´AHT20ÊÇ·ñÓлظ´ACK
void Send_ACK(void) ; //Ö÷»ú»Ø¸´ACKÐźÅ
void Send_NOT_ACK(void); //Ö÷»ú²»»Ø¸´ACK
void Stop_I2C(void); //Ò»ÌõÐÒé½áÊø
uint8_t AHT20_Read_Status(void);//¶ÁÈ¡AHT20µÄ״̬¼Ä´æÆ÷
uint8_t AHT20_Read_Cal_Enable(void); //²éѯcal enableλÓÐûÓÐʹÄÜ
void AHT20_SendAC(void); //ÏòAHT20·¢ËÍACÃüÁî
uint8_t Calc_CRC8(uint8_t *message,uint8_t Num);
void AHT20_Read_CTdata(uint32_t *ct); //ûÓÐCRCУÑ飬ֱ½Ó¶ÁÈ¡AHT20µÄζȺÍʪ¶ÈÊý¾Ý
void AHT20_Read_CTdata_crc(uint32_t *ct); //CRCУÑéºó£¬¶ÁÈ¡AHT20µÄζȺÍʪ¶ÈÊý¾Ý
void AHT20_Init(void); //³õʼ»¯AHT20
void JH_Reset_REG(uint8_t addr);///ÖØÖüĴæÆ÷
void AHT20_Start_Init(void);///Éϵç³õʼ»¯½øÈëÕý³£²âÁ¿×´Ì¬
3、实验结果
4、实验总结
了解学习了I2C协议,这次试验既是对I2C有了清晰的认识,也对C8T6有了更多的学习。该实验没有太多的操作流程,按照参考的资料和博客理论上就可以大概完成了,值得注意的是,在连接奥松AHT20传感器一定要注意引脚的接法,接错可能会导致其损坏,说明图可见前面的图片,详细的可查看资料AHT20产品手册a2.pdf。