dht11温湿度传感器stm32f103RCT5
时间: 2025-05-15 17:26:18 浏览: 31
### 使用DHT11温湿度传感器与STM32F103RCT6进行开发
#### 配置方法
为了实现DHT11温湿度传感器的数据采集并将其通过串口发送至PC端,在配置过程中需完成以下几个方面的设置:
1. **硬件连接**
将DHT11模块的VCC引脚接至STM32F103RCT6的3.3V电源,GND接地,DATA数据引脚连接到STM32的一个GPIO引脚。通常推荐使用PA9或PB7作为UART通信接口的一部分[^2]。
2. **软件环境搭建**
在MDK5环境中创建一个新的工程文件,并导入必要的库函数支持。如果采用标准外设库,则需要初始化RCC时钟树、GPIO模式以及USART波特率等参数;如果是HAL库则更简化一些操作流程[^3]。
3. **驱动程序编写**
编写针对DHT11的具体读取逻辑代码片段如下所示:
```c
#include "stm32f1xx_hal.h"
#define DHT11_PIN GPIO_PIN_4
#define DHT11_GPIO_PORT GPIOA
void delay_us(uint32_t us);
uint8_t dht11_read(void);
int main(void){
HAL_Init();
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct = {0};
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(DHT11_GPIO_PORT,&GPIO_InitStruct);
while(1){
uint8_t humidity_integer,humidity_decimal,
temperature_integer,temperature_decimal;
if(dht11_read()==0){ //成功接收数据
humidity_integer=dht_data[0];
humidity_decimal=dht_data[1];
temperature_integer=dht_data[2];
temperature_decimal=dht_data[3];
printf("Humidity:%d.%d%%\r\n",humidity_integer,humidity_decimal);
printf("Temperature:%d.%d°C\r\n",temperature_integer,temperature_decimal);
}
else{
printf("Error reading sensor.\n");
}
HAL_Delay(2000);
}
}
//其他辅助功能省略...
```
上述代码展示了如何利用定时器产生微秒级延时来满足DHT11协议需求,并实现了基础的数据解析过程[^1]。
#### 示例代码说明
该示例主要完成了以下几项工作:
- 初始化了用于控制DHT11信号线状态变化所需的GPIO资源;
- 定义了一个`delay_us()`函数用来处理微妙级别的等待时间;
- 实现了核心算法部分即从设备获取原始字节数组并通过简单的算术运算得出最终结果[^4]。
---
阅读全文
相关推荐



















