本帖最后由 jinglixixi 于 2020-8-29 09:01 编辑
芯片复制DHT22是一种单总线的数字式温湿度传感器,它共有3个引脚,只需占用一个GPIO口接口工作。 通过这条总线既靠它发出指令,也靠它接收数据。此外,为了进行信号的识别,还需相应的时序配合。有了前面的I2C接口的基础,就可以探索一下DHT22的驱动及温湿度检测。
1. DHT22温湿度检测 DHT22与MCU的连接关系为: DAT——PC12 其余两个引脚则接3.3V工作电源
芯片复制定义GPIO口读取电位及输出高低电平的语句为: #define DHT22_D0_H HT_GPIOC->SRR = GPIO_PIN_12 #define DHT22_D0_L HT_GPIOC->RR = GPIO_PIN_12 #define DHT22_D0_R GPIO_ReadInBit(HT_GPIOC, GPIO_PIN_12)
设置GPIO为输入、输出的函数为: - void DHT22_IO_IN(void)
- {
- AFIO_GPxConfig(GPIO_PC, GPIO_PIN_12, 0);
- GPIO_PullResistorConfig(HT_GPIOC, GPIO_PIN_12, GPIO_PR_DOWN);
- GPIO_DirectionConfig(HT_GPIOC, GPIO_PIN_12, GPIO_DIR_IN);
- GPIO_InputConfig(HT_GPIOC, GPIO_PIN_12, ENABLE);
- }
- void DHT22_IO_OUT(void)
- {
- GPIO_PullResistorConfig(HT_GPIOC, GPIO_PIN_12, GPIO_PR_DISABLE);
- GPIO_DriveConfig(HT_GPIOC, GPIO_PIN_12, GPIO_DV_8MA);
- GPIO_DirectionConfig(HT_GPIOC, GPIO_PIN_12, GPIO_DIR_OUT);
- GPIO_InputConfig(HT_GPIOC, GPIO_PIN_12, ENABLE);
- }
复制代码DHT22读取数据的函数为: - u8 DHT22_Read_Data(u16 *temp,u16 *humi)
- {
- u8 buf[5];
- u8 i;
- DHT22_Rst();
- if(DHT22_Check()==0)
- {
- for(i=0;i<5;i++)
- {
- buf[i]=DHT22_Read_Byte();
- }
- if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
- {
- *humi=(buf[0]*256+buf[1]);
- *temp=(buf[2]*256+buf[3]);
- }
- } else return 1;
- return 0;
- }
|