基于stm32温湿度传感器实验
基于stm32温湿度传感器实验
更多
以下是基于STM32的温湿度传感器实验的详细步骤和代码示例(以 DHT11 传感器为例),使用 HAL库 开发,适合初学者快速上手:
实验器材
- STM32开发板(如STM32F103C8T6)
- DHT11温湿度传感器
- 杜邦线若干
- USB转TTL模块(用于串口通信)
- Keil MDK-ARM开发环境
硬件连接
| DHT11引脚 | STM32引脚 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| DATA | PB9(或其他GPIO) |
注意:DATA引脚需接 4.7KΩ上拉电阻 到VCC。
代码实现
1. 配置GPIO和串口(用于调试输出)
// main.c
#include "stm32f1xx_hal.h"
#include "dht11.h" // 自定义DHT11驱动头文件
UART_HandleTypeDef huart1;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART1_UART_Init();
DHT11_Data dht11;
char msg[50];
while (1) {
if (DHT11_Read(&dht11) == DHT11_OK) {
sprintf(msg, "Temp: %d°C, Humi: %d%%\r\n", dht11.temperature, dht11.humidity);
HAL_UART_Transmit(&huart1, (uint8_t*)msg, strlen(msg), HAL_MAX_DELAY);
} else {
HAL_UART_Transmit(&huart1, (uint8_t*)"Error!\r\n", 8, HAL_MAX_DELAY);
}
HAL_Delay(2000); // 每2秒读取一次
}
}
2. DHT11驱动 (dht11.c 和 dht11.h)
// dht11.h
typedef struct {
uint8_t humidity;
uint8_t temperature;
} DHT11_Data;
typedef enum {
DHT11_OK,
DHT11_ERROR
} DHT11_Status;
DHT11_Status DHT11_Read(DHT11_Data *data);
// dht11.c
#include "dht11.h"
#include "stm32f1xx_hal.h"
#define DHT11_PORT GPIOB
#define DHT11_PIN GPIO_PIN_9
static void DHT11_Delay(uint16_t time_us) {
__HAL_TIM_SET_COUNTER(&htim1, 0);
while (__HAL_TIM_GET_COUNTER(&htim1) < time_us);
}
DHT11_Status DHT11_Read(DHT11_Data *data) {
uint8_t bytes[5] = {0};
uint8_t cnt = 7, idx = 0;
// 主机发送开始信号(拉低18ms)
HAL_GPIO_WritePin(DHT11_PORT, DHT11_PIN, GPIO_PIN_RESET);
HAL_Delay(18);
HAL_GPIO_WritePin(DHT11_PORT, DHT11_PIN, GPIO_PIN_SET);
DHT11_Delay(30); // 等待20-40us
// 切换为输入模式等待响应
GPIO_InitTypeDef gpio = {0};
gpio.Pin = DHT11_PIN;
gpio.Mode = GPIO_MODE_INPUT;
gpio.Pull = GPIO_PULLUP;
HAL_GPIO_Init(DHT11_PORT, &gpio);
// 检查传感器响应(低电平80us + 高电平80us)
if (HAL_GPIO_ReadPin(DHT11_PORT, DHT11_PIN)) return DHT11_ERROR;
while (!HAL_GPIO_ReadPin(DHT11_PORT, DHT11_PIN));
while (HAL_GPIO_ReadPin(DHT11_PORT, DHT11_PIN));
// 接收40位数据(湿度整数+小数+温度整数+小数+校验和)
for (int i = 0; i < 40; i++) {
while (!HAL_GPIO_ReadPin(DHT11_PORT, DHT11_PIN)); // 等待高电平开始
DHT11_Delay(40); // 跳过50us低电平
if (HAL_GPIO_ReadPin(DHT11_PORT, DHT11_PIN)) { // 高电平>30us表示"1"
bytes[idx] |= (1 << cnt);
while (HAL_GPIO_ReadPin(DHT11_PORT, DHT11_PIN));
}
if (cnt-- == 0) { cnt = 7; idx++; } // 下一个字节
}
// 校验数据(前4字节和 = 第5字节)
if (bytes[4] != (bytes[0] + bytes[1] + bytes[2] + bytes[3]))
return DHT11_ERROR;
data->humidity = bytes[0];
data->temperature = bytes[2];
return DHT11_OK;
}
关键步骤说明
- 初始化定时器:用于精确延时(在
dht11.c中需配置一个基本定时器,如TIM1)。 - 发送开始信号:主机拉低DATA线至少18ms后释放。
- 传感器响应:DHT11拉低80us,再拉高80us表示准备发送数据。
- 数据解析:
- 每个数据位以50us低电平开始。
- 高电平26~28us表示“0”,70us表示“1”。
- 校验和:确保数据正确性。
常见问题排查
- 无响应:
- 检查接线(VCC、GND、DATA)。
- DATA引脚必须接上拉电阻。
- 确保GPIO配置正确(开始时为输出,读取时为输入)。
- 数据错误:
- 调整延时函数精度(不同主频需修改
DHT11_Delay)。 - 检查传感器供电电压(DHT11工作范围3~5.5V)。
- 调整延时函数精度(不同主频需修改
- 时序不稳定:
- 关闭全局中断(
__disable_irq())确保时序严格。
- 关闭全局中断(
实验结果
通过串口调试助手(如PuTTY)查看输出:
Temp: 25°C, Humi: 50%
Temp: 26°C, Humi: 48%
...
提示:实际项目中可加入LCD显示、蓝牙传输或MQTT上传云端功能扩展。
想要准确地测量环境温湿度?温湿度传感器是关键!
温湿度是生产生活中最重要的环境指标之一,不仅人需要在适宜的温湿度条件下保持良好的精神状态和敏捷的思维,食品、药品、各种仪器设备等都对环境温湿度
2024-07-04 08:48:07
stm32温湿度传感器报告_「正点原子NANO STM32开发板资料连载」第二十八章 DHT11 数字温湿度传感器实验...
数字温湿度传感器实验上一章,我们介绍了数字温度传感器 DS18B20
资料下载
打马过草原
2021-12-05 16:36:07
电压温湿度传感器产品手册
STH系列温湿度变送器选用数字温湿度传感器和低功耗单片机技术制作,产品具有响应时间短, 精度高,长期稳定性好等特点,广泛应用于暖通空调、电信基站
资料下载
姚小熊27
2021-03-19 14:52:00
温湿度变送器or温湿度传感器,我们应该如何选择
在我们需要检测一项数据时,往往需要传感器的帮助。比如需要测量温度、湿度、压力、光照、气体等,便会需要传感器的支持。在这些
2022-05-13 17:10:06
7天热门专题
换一换
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- dtmb信号覆盖城市查询
- EDA是什么?有什么作用?
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- amoled屏幕和oled区别
- 单片机和嵌入式的区别是什么
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机
- 元宇宙概念龙头股一览