DHT11是一款集温度和湿度测量于一体的数字传感器,采用单总线通信协议,具有体积小、功耗低、性价比高等特点。以下是其主要特性:
DHT11模块
DHT11的连接方式
这里我们使用的时PB1引脚。
这里使用的是定时器3实现的定时功能
- RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_TMR3);
-
- TMR_TimeBase_T baseConfig;
- baseConfig.div = 72-1;
- baseConfig.period = 0xFFFF;
- baseConfig.clockDivision = TMR_CKD_DIV1;
- baseConfig.counterMode = TMR_COUNTER_MODE_UP;
- TMR_ConfigTimeBase(TMR3, &baseConfig);
- TMR_EnableAUTOReload(TMR3);
- TMR_Enable(TMR3);
1us定时的实现
- TMR3->CNT=0;
- TMR_Enable(TMR3);
- while(TMR3->CNT < nus);//计数频率6MHz,6次即为1us
- TMR_Disable(TMR3);
DHT11的读写代码
dht11.c
dht11.h
- #ifndef __DHT11_H
- #define __DHT11_H
- #include "APM32E030_gpio.h"
- #include "APM32E030_rcm.h"
- #define DHT11_RCC RCM_AHB_PERIPH_GPIOB //开启引脚RCC,根据具体情况修改
- #define DHT11_PORT GPIOB //定义端口,根据具体情况修改
- #define DHT11_IO GPIO_PIN_1 //定义IO口,根据具体情况修改
- //设置驱动IO端口
- #define DHT11_DQ_OUT_1 GPIO_SetBit(DHT11_PORT, DHT11_IO )
- #define DHT11_DQ_OUT_0 GPIO_ClearBit(DHT11_PORT, DHT11_IO )
- #define DHT11_DQ_IN GPIO_ReadInputBit(DHT11_PORT,DHT11_IO)
- void DHT11_IO_OUT (void); //设置IO口为输出模式
- void DHT11_IO_IN (void); //设置IO口为输入模式
- void DHT11_RST (void); //复位DHT11
- uint8_t DHT11_Check (void); //检查DHT11是否正常
- uint8_t DHT11_Read_Bit (void); //读取一位数据
- uint8_t DHT11_Read_Byte (void); //读取一个字节
- uint8_t DHT11_Init (void); //DHT11初始化
- uint8_t DHT11_Read_Data (uint8_t *temp, uint8_t *humi); // DHT11读取数据
- #endif
main函数
- DHT11_Read_Data(&temperature,&humidity); //读取温湿度值
- sprintf(s_temp,"温度:%02d'C ",temperature );
- OLED_ShowStringCN(0,16,(unsigned char*)s_temp,1);// 显示温度
- sprintf(s_temp,"湿度:%02d%% ",humidity );
- OLED_ShowStringCN(0,32,(unsigned char*)s_temp,1);// 显示湿度
- OLED_Refresh();
最终实现的效果
|