返回

Proteus仿真STM32实现DHT11温湿度检测指南

后端

在 Proteus 中仿真 STM32,读取 DHT11 温湿度

简介

本指南将指导您如何使用 Proteus 仿真 STM32 微控制器并使用 DHT11 传感器读取温湿度。我们将涵盖所需的准备工作、Proteus 仿真步骤、STM32CubeIDE 代码编写以及如何运行仿真。

准备工作

在开始之前,确保您的计算机已安装以下软件:

  • Proteus 8 Professional(或更高版本)
  • STM32CubeIDE
  • DHT11 库

Proteus 仿真 STM32

步骤 1:新建项目

  • 打开 Proteus 8 Professional 并创建一个新项目。

步骤 2:放置元件

  • 从库中找到 STM32F103C8T6 微控制器并将其拖入仿真电路。
  • 从库中找到 DHT11 传感器并将其拖入仿真电路。
  • 将 DHT11 传感器的 Data 引脚连接到 STM32F103C8T6 的 GPIOA0 引脚,将 Clock 引脚连接到 GPIOA1 引脚。
  • 将 STM32F103C8T6 的串口引脚连接到计算机的串口。

STM32CubeIDE 工程代码

步骤 3:新建项目

  • 打开 STM32CubeIDE 并创建一个新项目。
  • 选择 STM32F103C8T6 芯片,配置时钟和外设。
  • 添加 DHT11 库。

步骤 4:编写代码

  • 在 main.c 文件中编写代码,实现 DHT11 温湿度检测和串口打印功能。

代码示例:

#include "stm32f103x6.h"
#include "dht11.h"

DHT11 dht11;

int main(void) {
    // 配置时钟和外设
    RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;  // 使能 GPIOA 时钟
    RCC->APB2ENR |= RCC_APB2ENR_USART1EN;  // 使能 USART1 时钟

    // 配置 GPIOA 引脚
    GPIOA->CRH &= ~GPIO_CRH_MODE10;  // 清除 PA10 的模式位
    GPIOA->CRH |= GPIO_CRH_MODE10_1;  // 设置 PA10 为复用推挽输出
    GPIOA->CRH &= ~GPIO_CRH_CNF10;  // 清除 PA10 的配置位
    GPIOA->CRH |= GPIO_CRH_CNF10_1;  // 设置 PA10 为复用输出

    GPIOA->CRH &= ~GPIO_CRH_MODE9;  // 清除 PA9 的模式位
    GPIOA->CRH |= GPIO_CRH_MODE9_1;  // 设置 PA9 为复用推挽输出
    GPIOA->CRH &= ~GPIO_CRH_CNF9;  // 清除 PA9 的配置位
    GPIOA->CRH |= GPIO_CRH_CNF9_0;  // 设置 PA9 为推挽输出

    // 配置 USART1
    USART1->BRR = 0x0683;  // 设置波特率为 9600bps
    USART1->CR1 |= USART_CR1_TE;  // 使能发送器
    USART1->CR1 |= USART_CR1_RE;  // 使能接收器

    // 初始化 DHT11 传感器
    dht11.pin = GPIOA;  // DHT11 传感器引脚
    dht11.pin_number = GPIO_Pin_10;  // DHT11 传感器引脚编号

    while (1) {
        // 读取温湿度数据
        float temperature = dht11.readTemperature();  // 读取温度
        float humidity = dht11.readHumidity();  // 读取湿度

        // 格式化并打印数据
        char buffer[50];  // 缓冲区
        sprintf(buffer, "温度:%.1f℃,湿度:%.1f%%", temperature, humidity);  // 格式化输出数据

        // 通过串口发送数据
        for (int i = 0; i < strlen(buffer); i++) {
            while (!(USART1->SR & USART_SR_TXE));  // 等待发送缓冲区为空
            USART1->DR = buffer[i];  // 发送数据
        }

        // 延时
        HAL_Delay(1000);  // 延时 1 秒
    }

    return 0;
}

运行仿真

步骤 5:Proteus 仿真

  • 在 Proteus 中,单击“运行”按钮。

步骤 6:STM32CubeIDE 调试

  • 在 STM32CubeIDE 中,单击“调试”按钮。

步骤 7:串口监视

  • 在串口监视器中,您将看到 STM32F103C8T6 打印的温湿度数据。

结论

通过本指南,您已成功在 Proteus 中仿真了 STM32,并使用 DHT11 传感器读取了温湿度。这使您能够开发和测试基于 STM32 的嵌入式系统,并在实际硬件上部署之前验证其功能。

常见问题解答

1. DHT11 传感器与 STM32 的连接引脚是什么?
答:Data 引脚连接到 GPIOA0,Clock 引脚连接到 GPIOA1。

2. 如何在 STM32CubeIDE 中添加 DHT11 库?
答:在“工程”菜单中,选择“管理嵌入式软件包”。搜索“DHT11”并安装库。

3. 仿真中串口波特率是多少?
答:9600bps。

4. 数据是如何格式化的?
答:温度和湿度值以以下格式打印:“温度:xx.x℃,湿度:xx.x%”。

5. 如何在 Proteus 中配置 USART1?
答:在“模拟器”菜单中,选择“通信设置”。将波特率设置为 9600bps,启用发送器和接收器。