stm32f4 am2302
在STM32F4系列微控制器上使用AM2302(DHT22)温湿度传感器时,需注意硬件连接、时序控制和数据解析。以下是实现步骤和关键点:
1. 硬件连接
-
AM2302引脚:
- VCC:接3.3V或5V电源(注意逻辑电平兼容性)。
- GND:接地。
- DATA:接STM32的GPIO引脚(如PA0),需外接4.7kΩ上拉电阻。
STM32F4 AM2302 GPIO (PA0) ---> DATA 3.3V ---> VCC GND ---> GND
2. GPIO配置
- 模式:配置为开漏输出(Open-Drain),使能内部/外部上拉电阻。
- 初始状态:默认输出高电平。
- 通信协议:单总线(1-Wire)协议,需手动控制时序。
3. 通信时序
步骤1:主机发送起始信号
- 拉低DATA引脚至少1ms(AM2302的唤醒信号)。
- 释放总线(恢复高电平)20-40µs。
- 切换GPIO为输入模式,等待传感器响应。
步骤2:传感器响应
- AM2302会拉低总线80µs,然后拉高80µs,表示准备发送数据。
步骤3:数据读取
- 传感器发送40位数据(16位湿度 + 16位温度 + 8位校验和)。
- 每一位数据通过低电平后的高电平持续时间区分:
- 0:26-28µs高电平。
- 1:70µs高电平。
- 使用微秒级延时函数或定时器捕获边沿时间。
4. 代码示例(HAL库)
#include "stm32f4xx_hal.h"
#define AM2302_PIN GPIO_PIN_0
#define AM2302_PORT GPIOA
void delay_us(uint16_t us) {
__HAL_TIM_SET_COUNTER(&htim2, 0);
while (__HAL_TIM_GET_COUNTER(&htim2) < us);
}
uint8_t AM2302_Read(float *temperature, float *humidity) {
uint8_t data[5] = {0};
GPIO_InitTypeDef GPIO_InitStruct = {0};
// 配置GPIO为输出模式(开漏)
GPIO_InitStruct.Pin = AM2302_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(AM2302_PORT, &GPIO_InitStruct);
// 发送起始信号
HAL_GPIO_WritePin(AM2302_PORT, AM2302_PIN, GPIO_PIN_RESET);
HAL_Delay(1); // 拉低至少1ms
HAL_GPIO_WritePin(AM2302_PORT, AM2302_PIN, GPIO_PIN_SET);
delay_us(30); // 释放总线30µs
// 切换为输入模式
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
HAL_GPIO_Init(AM2302_PORT, &GPIO_InitStruct);
// 等待传感器响应(80µs低 + 80µs高)
if (HAL_GPIO_ReadPin(AM2302_PORT, AM2302_PIN) == GPIO_PIN_SET) return 1;
delay_us(80);
if (HAL_GPIO_ReadPin(AM2302_PORT, AM2302_PIN) == GPIO_PIN_RESET) return 1;
delay_us(80);
// 读取40位数据
for (int i = 0; i < 40; i++) {
while (HAL_GPIO_ReadPin(AM2302_PORT, AM2302_PIN) == GPIO_PIN_RESET); // 等待高电平
delay_us(40);
if (HAL_GPIO_ReadPin(AM2302_PORT, AM2302_PIN) == GPIO_PIN_SET) {
data[i/8] |= (1 << (7 - (i%8))); // 记录为1
while (HAL_GPIO_ReadPin(AM2302_PORT, AM2302_PIN) == GPIO_PIN_SET); // 等待低电平
}
}
// 校验和验证
if (data[4] != (data[0] + data[1] + data[2] + data[3])) return 2;
// 计算温湿度
*humidity = (data[0] << 8 | data[1]) / 10.0;
*temperature = (data[2] << 8 | data[3]) / 10.0;
return 0;
}
5. 注意事项
- 时序精度:使用定时器(如TIM2)实现微秒级延时,避免使用
HAL_Delay(毫秒级不精确)。 - 电源稳定性:确保AM2302的电源无噪声干扰。
- 校验和:务必校验数据完整性。
- 重试机制:读取失败时加入重试逻辑(如最多3次尝试)。
6. 常见问题
- 无响应:检查接线、上拉电阻和起始信号时序。
- 数据错误:校验和失败时重新读取。
- 逻辑电平:若使用5V供电,确保STM32的GPIO耐压(部分STM32引脚兼容5V)。
通过以上步骤,即可在STM32F4上稳定读取AM2302的温湿度数据。
STM32项目实战:基于STM32F4的智能灯光控制系统(LVGL),附项目教程/源码
《智能灯光控制系统_STM32F4》项目完整文档、项目源码,私信小雯老师免费领取。STM32项目实战之“智能灯光控制系统”(基于STM32F4)
2024-10-17 16:16:30
STM32F4 DAC数模转换实验例程
STM32F4 DAC数模转换实验例程(现代电源技术试卷西建大)-STM32F4 DAC数模转换实验例程,有需要的可以参考!
资料下载
佚名
2021-09-16 10:18:15
STM32F4 PWM-DAC实验例程
STM32F4 PWM-DAC实验例程(电源技术是sci吗)-STM32F4 PWM-DAC实验例程,有需要的可以参考!
资料下载
佚名
2021-09-16 10:14:07
STM32F4 SPI-FLASH实验例程
STM32F4 SPI-FLASH实验例程(java的哪个版本用于嵌入式开发)-STM32F4 SPI-FLASH实验例程,有需要的可以参考!
资料下载
手托初梦
2021-07-30 16:01:23
STM32F4内部Flash实验例程
STM32F4内部Flash实验例程(嵌入式开发版哪个好)-STM32F4内部Flash实验例程,有需要的可以参考!
资料下载
无人岛
2021-07-30 15:58:01
STM32F4外部中断简介
STM32F4外部中断简介STM32F4的IO口在第六章有详细介绍,而中断管理分组管理在前面也有详细的阐述。这里我们将介绍STM32F4外部IO
STM32F4外部中断简介
STM32F4外部中断简介 STM32F4的IO口在第六章有详细介绍,而中断管理分组管理在前面也有详细的阐述。这里我们将介绍STM32F4外部I
基于Cortex-M4的STM32F4的复位序列
7是基于Cortex-M7内核,而Cortex-M7和Cortex-M3/M4的复位序列有些不一样。本文中,将针对这个问题做详细讲解。 STM32F4的复位序列
2021-02-16 06:14:00
STM32F4开发板STM32F4如何驱动外部SRAM芯片
国产存储芯片的底层技术攻关和相关科研工作,从而推动国家存储芯片设计前端产业变革和更进一步的发展。接下来星忆代理商英尚微电子介绍STM32F4开发板STM32F4如何驱动外部SRAM芯片。XM8A51216。
2020-07-01 15:07:09
基于STM32F4系列芯片和STM32CubeF4 HAL库组织和添加用户代码
常有人想使用STM32 DMA的双缓冲模式,但又觉得实现起来似乎有点困难,也不太容易找到现存的例程。我这里就基于STM32F4芯片及Cube库简单地演示下实现过程。
2020-06-10 08:38:44
换一换
- 如何分清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功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机
- 元宇宙概念龙头股一览