一、引言
在嵌入式系统开发中,STM32 微控制器凭借其高性能、低功耗等特点被广泛应用。而传感器模块作为获取外界环境信息的重要部件,与 STM32 结合使用能实现众多有趣且实用的项目。本文将以常见的 DHT11 温湿度传感器和 HC - SR04 超声波测距传感器为例,介绍 STM32 对传感器模块的编程实践。
二、DHT11 温湿度传感器编程实践
2.1 DHT11 传感器简介
DHT11 是一款数字式温湿度传感器,它能同时测量环境的温度和湿度,并以单总线的方式与微控制器进行通信。其测量范围为湿度 20% - 90%RH,温度 0 - 50℃,精度分别为 ±5%RH 和 ±2℃。
2.2 硬件连接
将 DHT11 的 DATA 引脚连接到 STM32 的一个 GPIO 引脚,例如 PA0;VCC 接 3.3V 或 5V 电源;GND 接地。
2.3 代码实现
#include "stm32f10x.h"
#include <stdio.h>
#define DHT11_PIN GPIO_Pin_0
#define DHT11_PORT GPIOA
// 延时函数,单位为微秒
void delay_us(uint32_t us) {
uint32_t i;
for (i = 0; i < us * 72 / 5; i++);
}
// 主机发送起始信号
void DHT11_Start(void) {
GPIO_InitTypeDef GPIO_InitStructure;
// 配置为推挽输出
GPIO_InitStructure.GPIO_Pin = DHT11_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(DHT11_PORT, &GPIO_InitStructure);
GPIO_ResetBits(DHT11_PORT, DHT11_PIN);
delay_us(20000); // 拉低至少 18ms
GPIO_SetBits(DHT11_PORT, DHT11_PIN);
delay_us(30); // 拉高 20 - 40us
}
// 等待 DHT11 响应信号
uint8_t DHT11_Check_Response(void) {
uint8_t retry = 0;
GPIO_InitTypeDef GPIO_InitStructure;
// 配置为浮空输入
GPIO_InitStructure.GPIO_Pin = DHT11_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(DHT11_PORT, &GPIO_InitStructure);
while (GPIO_ReadInputDataBit(DHT11_PORT, DHT11_PIN) && retry < 100) {
r