模块2 STM32程序开发-项目2 STM32 基础应用-任务2 采集温湿度

📅 2026/8/27 12:13:36
模块2 STM32程序开发-项目2 STM32 基础应用-任务2 采集温湿度
基于STM32的物联网环境监测与远程控制系统实训套件-淘宝网任务2 采集温湿度一、任务描述本任务基于STM32F103C8T6最小系统板使用DHT11数字温湿度传感器采集环境温度与湿度数据。通过 GPIO 单总线通信协议读取数据在Keil中编写、编译、下载程序将采集到的温湿度值通过串口printf打印输出掌握STM32 GPIO输入输出、单总线通信、传感器驱动的基本开发方法。二、任务目标1. 知识目标1理解DHT11 温湿度传感器的工作原理、单总线通信时序。2掌握 STM32GPIO 输入模式、输出模式切换的配置方法。3熟悉微秒级延时、电平读取、数据位解析等传感器驱动知识。2. 能力目标1能够完成 DHT11 硬件接线正确连接VCC、GND、DATA引脚。2能够编写 DHT11 初始化、起始信号、响应信号、数据读取驱动函数。3能够实现温度、湿度数据采集、校验、解析。4能够通过串口打印温湿度数据完成传感器采集功能调试。3. 素质目标1培养时序严格、逻辑严谨的传感器驱动编程习惯。2提升硬件时序分析、软件调试、问题定位的综合能力。3养成嵌入式开发先驱动、后采集、再校验的工程流程。三、任务重难点1. 任务重点1DHT11 单总线时序起始信号、响应信号、40 位数据传输。2GPIO 模式输出→输入切换、微秒级延时实现。3DHT11 数据读取、校验和判断、温湿度解析。2. 任务难点1严格实现DHT11 时序延时过短 / 过长均会采集失败。2GPIO 输入输出模式动态切换配置。340 位数据按位读取、字节拼接、校验。4解决传感器无数据、数据错误、乱码等问题。四、知识准备1.DHT11 温湿度传感器介绍DHT11是最常见的入门级数字温湿度传感器如图1所示。它最大的优势就是价格低廉、使用简单只需一个I/O口就能读取温度和湿度数据非常适合用来快速搭建环境监测的各类原型项目。图1DHT11 温湿度传感器模块1DHT11 是单总线数字温湿度传感器只需 1 根数据线通信。2供电3.3V~5V3精度温度 0~50℃±2℃湿度 20%~90% RH±5% RH4通信方式单总线协议半双工由 STM32 发起通信。2. DHT11 单总线通信时序1主机发送起始信号拉低电平≥18ms再拉高 20~40us。2DHT11 发送响应信号拉低 80us再拉高 80us。3数据传输共 40 位高位先行。位 0低电平 50us 高电平 26~28us位 1低电平 50us 高电平 70us4校验4 字节相加 第 5 字节数据才有效。3. STM32 GPIO 输入模式1输入模式浮空输入 / 上拉输入本任务使用上拉输入GPIO_PULLUP2读取电平函数HAL_GPIO_ReadPin(GPIOx, GPIO_Pin);返回值GPIO_PIN_SET / GPIO_PIN_RESET五、硬件连接DHT11温湿度传感器模块与主控STM32F103C8T6的引脚连接如表1所示。表1DHT11温湿度传感器模块与主控STM32F103C8T6的引脚连接编号DHT11温湿度传感器模块主控STM32F103C8T61VCC3V32GNDGND3DATAPA1硬件连接电路图如图2所示。图2硬件连接电路图六、任务实现任务 2.1 添加 DHT11 驱动1.将delay.c和dht11.c文件放到 hardware/src 文件夹中。2.将delay.h和dht11.h文件放到hardware/inc 文件夹中。3.在项目中添加delay.c和dht11.c文件与头文件路径方法见上一个任务。任务 2.3 修改 main.c1.包含头文件//温湿度传感器驱动#include dht11.h2.定义温湿度变量/* USER CODE BEGIN 0 */uint8_t temp0,humi0;/* USER CODE END 0 */3.主函数代码/* USER CODE BEGIN 2 */Led_Init();//LED初始化printf(任务2 采集温湿度\r\n);Led_Set(LED_ON);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */uint32_t dht_timer 0;while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */// 1. 温湿度2秒一次if(HAL_GetTick() - dht_timer 2000){dht_timer HAL_GetTick();if(DHT11_Read_Data(temp, humi) 0) // 0成功{printf(读取成功: 湿度%d%%, 温度%d℃\r\n, humi, temp);}}}/* USER CODE END 3 */任务 2.4 编译、下载、查看结果1.点击编译按钮编译程序。2.点击下载按钮下载程序。3.打开串口调试助手按stm32f103c8t6主控板上的复位键在串口调试助手中输出打印信息如图3所示。图3 输出打印信息