返回
Proteus仿真STM32实现DHT11温湿度检测指南
后端
2022-12-24 21:39:28
在 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,启用发送器和接收器。