dht11连接stm32f103zet6
时间: 2025-05-14 21:02:45 浏览: 19
### DHT11连接STM32F103ZET6硬件连接
对于DHT11温湿度传感器与STM32F103ZET6单片机之间的连接,主要涉及电源线、接地线以及数据信号线的对接。具体来说:
- **VCC**:此引脚应接到STM32板子上的3.3V供电端口[^3]。
- **GND**:该引脚需接入STM32的地线接口以形成回路。
- **DATA(数据传输引脚)**:通常建议将其连接至STM32的一个通用I/O口上,在某些实例中推荐使用PA1作为数据交换通道,并且应当配置成推挽输出模式来增强驱动能力。
为了确保稳定的数据读取性能,可以在DATA线上并联一个小电阻(比如4.7kΩ),起到上拉作用,帮助维持高电平状态下的电压水平,从而提高通信可靠性。
```c
// 初始化GPIOA Pin1为推挽输出模式
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
```
上述代码片段展示了初始化过程的一部分,其中`GPIO_InitStruct.Pin = GPIO_PIN_1;`指定了要操作的具体针脚;而`.Mode = GPIO_MODE_OUTPUT_PP;`则表明选择了推挽输出方式。
### 示例代码展示
下面给出一段简单的C语言程序用于演示如何从DHT11获取温度和湿度信息并通过串口打印出来:
```c
#include "main.h"
UART_HandleTypeDef huart1;
TIM_HandleTypeDef htim2;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);
static void MX_TIM2_Init(void);
uint8_t dht_data[5];
float humidity, temperature;
int main(void){
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART1_UART_Init();
MX_TIM2_Init();
while (true) {
if(read_dht11_data(dht_data)){
humidity=dht_data[0]+dht_data[1]*0.1;
temperature=dht_data[2]+dht_data[3]*0.1;
char buffer[50];
sprintf(buffer,"Humidity=%.1f%%\r\nTemperature=%.1f°C\r\n",humidity,temperature);
HAL_UART_Transmit(&huart1,(uint8_t*)buffer,strlen(buffer),HAL_MAX_DELAY);
}
HAL_Delay(2000); // 每隔两秒测量一次
}
}
bool read_dht11_data(uint8_t *data){
uint8_t i,j;
for(i=0;i<5;i++) data[i]=0;
// Start signal
HAL_GPIO_WritePin(DHT_PORT,DHT_PIN,RESET);
__HAL_TIM_SET_COUNTER(&htim2,0);
while(__HAL_TIM_GET_COUNTER(&htim2)<20){} // Wait more than 18ms
HAL_GPIO_WritePin(DHT_PORT,DHT_PIN,SET);
// Response from sensor
while(HAL_GPIO_ReadPin(DHT_PORT,DHT_PIN)==RESET);
while(HAL_GPIO_ReadPin(DHT_PORT,DHT_PIN)==SET);
for(j=0;j<40;j++){
while(HAL_GPIO_ReadPin(DHT_PORT,DHT_PIN)==RESET);
delay_us(30);
if(HAL_GPIO_ReadPin(DHT_PORT,DHT_PIN)) data[j/8]|=(1<<(j%8));
while(HAL_GPIO_ReadPin(DHT_PORT,DHT_PIN)==SET);
}
if(data[4]==((data[0]+data[1]+data[2]+data[3])&0xFF))
return true;
else
return false;
}
```
这段代码实现了基本的功能需求,即周期性地向用户终端发送由DHT11测得的环境参数值。注意这里的延时函数`delay_us()`需要根据实际情况定义实现方法[^2]。
阅读全文
相关推荐



















