登录/注册

stm32f4 am2302

更多

在STM32F4系列微控制器上使用AM2302(DHT22)温湿度传感器时,需注意硬件连接、时序控制和数据解析。以下是实现步骤和关键点:


1. 硬件连接


2. GPIO配置


3. 通信时序

步骤1:主机发送起始信号

  1. 拉低DATA引脚至少1ms(AM2302的唤醒信号)。
  2. 释放总线(恢复高电平)20-40µs。
  3. 切换GPIO为输入模式,等待传感器响应。

步骤2:传感器响应

步骤3:数据读取


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. 注意事项

  1. 时序精度:使用定时器(如TIM2)实现微秒级延时,避免使用HAL_Delay(毫秒级不精确)。
  2. 电源稳定性:确保AM2302的电源无噪声干扰。
  3. 校验和:务必校验数据完整性。
  4. 重试机制:读取失败时加入重试逻辑(如最多3次尝试)。

6. 常见问题

通过以上步骤,即可在STM32F4上稳定读取AM2302的温湿度数据。

STM32项目实战:基于STM32F4的智能灯光控制系统(LVGL),附项目教程/源码

《智能灯光控制系统_STM32F4》项目完整文档、项目源码,私信小雯老师免费领取。STM32项目实战之“智能灯光控制系统”(基于STM32F4)

2024-10-17 16:16:30

STM32F4时钟配置的操作步骤

本文将介绍STM32F4时钟配置的操作步骤、并对比时钟配置前后LED外设闪烁的快慢以及对应代码的讲解。

2023-04-21 11:29:44

浅谈STM32F4的时钟系统

  本文将介绍STM32F4的时钟系统。

2023-04-20 11:47:40

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舵机控制代码资料免费下载。

资料下载 姚小熊27 2021-04-26 09:33:24

STM32F4的外部中断简介

目录一、STM32F4的外部中断1. STM32F4的外部中断个数2. STM32F4中供IO口使用的外部中断一、

2021-08-16 07:38:16

STM32F4外部中断简介

STM32F4外部中断简介STM32F4的IO口在第六章有详细介绍,而中断管理分组管理在前面也有详细的阐述。这里我们将介绍STM32F4外部IO

2021-08-13 07:33:31

STM32F4外部中断简介

STM32F4外部中断简介 STM32F4的IO口在第六章有详细介绍,而中断管理分组管理在前面也有详细的阐述。这里我们将介绍STM32F4外部I

2021-08-04 08:56:51

基于Cortex-M4STM32F4的复位序列

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

基于STM32F4和RT-Thread通用BootLoader使用经验

基于STM32F4、RT-Thread通用BootLoader使用经验

2020-02-27 17:23:06

7天热门专题 换一换
相关标签