stm32f103c8t6 DHT11
时间: 2025-04-19 16:55:51 浏览: 35
### STM32F103C8T6 使用 DHT11 温湿度传感器教程
#### 硬件连接
为了使STM32F103C8T6能够读取来自DHT11温湿度传感器的数据,硬件连接至关重要。通常情况下,DHT11有三个引脚:VCC、GND以及DATA。其中,VCC应接至3.3V或5V电源;GND接地;而DATA则需连到STM32的一个GPIO口上,并加上一个约4.7kΩ的上拉电阻以确保信号稳定[^1]。
#### 初始化配置
在软件层面初始化时,需要设置好用于通信的GPIO端口模式。对于DHT11来说,它采用的是单总线协议,这意味着同一个IO管脚既负责发送也接收数据。因此,在编程初期要对该IO进行输入输出方向切换的操作处理[^2]。
#### 数据获取流程
当一切准备就绪之后,就可以按照如下方式来获得环境中的温度和相对湿度信息:
- 向DHT11发出启动信号;
- 接收由设备返回的状态字节;
- 如果状态正常,则继续等待后续四个代表湿度整数值、湿度小数值、温度整数值及温度小数值的数据包传输过来;
- 最后还有一个用来验证前面所收到全部内容正确性的校验码会被传回给主机侧。
#### 示例代码实现
下面给出一段简单的C语言程序片段,演示了上述过程的具体操作方法:
```c
#include "stm32f1xx_hal.h"
#define DHT11_PIN GPIO_PIN_0
#define DHT11_PORT GPIOA
void delay_us(uint32_t us);
uint8_t dht11_read_data(void);
int main(void){
HAL_Init();
__HAL_RCC_GPIOA_CLK_ENABLE();
// 配置PA0为推挽输出模式
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_PORT, &GPIO_InitStruct);
while (1){
uint8_t data[5];
if(dht11_read_data() == 0){ // 成功读取数据
printf("Humidity=%d.%d%% Temperature=%d.%d°C\n",
data[0],data[1],
data[2],data[3]);
}
HAL_Delay(2000); // 每隔两秒测量一次
}
}
// 发送开始脉冲并尝试读取响应帧函数定义省略...
```
请注意这只是一个简化版的例子,实际应用中还需要考虑更多细节比如错误重试机制等。完整的源文件可以从开源平台下载得到[^3]。
阅读全文
相关推荐


















