STM32H743是一款基于ARM Cortex-M7内核的高性能微控制器,主频可达480MHz,具备丰富的外设资源,适合需要高速处理和复杂控制的应用。在本项目中,我们将利用STM32H743搭建一个温湿度监控系统,实现传感器数据采集和实时显示。
系统功能- 温湿度数据采集:通过DHT22传感器读取温湿度数据。
- OLED显示:实时在OLED屏幕上显示当前温湿度数据。
- 串口通信:将数据通过串口发送给上位机,便于数据记录和分析。
- 异常报警:温湿度超出阈值时触发蜂鸣器报警。
硬件设计- MCU:STM32H743
- 传感器:DHT22
- 显示模块:0.96寸I2C OLED屏
- 蜂鸣器:用于报警提示
- USB供电:通过USB接口为系统供电
代码实现#include "stm32h7xx.h"
#include "dht22.h"
#include "ssd1306.h"
#include "usart.h"
void SystemClock_Config(void) {
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 1;
RCC_OscInitStruct.PLL.PLLN = 400;
RCC_OscInitStruct.PLL.PLLP = 2;
RCC_OscInitStruct.PLL.PLLQ = 8;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4);
}
void GPIO_Config(void) {
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
int main(void) {
HAL_Init();
SystemClock_Config();
GPIO_Config();
DHT22_Init();
SSD1306_Init();
USART_Init();
float temperature = 0.0, humidity = 0.0;
char buffer[64];
while (1) {
if (DHT22_Read(&temperature, &humidity) == 0) {
snprintf(buffer, sizeof(buffer), "Temp: %.2fC, Hum: %.2f%%", temperature, humidity);
SSD1306_Clear();
SSD1306_GotoXY(0, 0);
SSD1306_Puts(buffer, &Font_7x10, 1);
SSD1306_UpdateScreen();
USART_Transmit((uint8_t*)buffer, strlen(buffer));
if (temperature > 30.0 || humidity > 70.0) {
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // 打开蜂鸣器
} else {
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // 关闭蜂鸣器
}
}
HAL_Delay(2000);
}
}
系统设计要点- 温湿度数据采集
使用DHT22传感器,通过数据线读取温度和湿度值,并在每次采集后延时2秒,避免频繁读取导致数据错误。
- OLED显示模块
使用I2C协议驱动0.96寸OLED屏幕,显示当前温湿度信息。字体库采用7x10像素的字模,清晰易读。
- 串口通信
数据通过USART发送给上位机,便于在电脑端进行数据监控和分析。
- 蜂鸣器报警功能
当温度超过30℃或湿度超过70%时,蜂鸣器将发出报警,提示用户注意环境变化。
项目扩展方向- 数据存储:添加SD卡模块,实现历史数据的存储。
- 网络监控:集成Wi-Fi模块,将数据上传到云平台,实现远程监控。
- 移动端控制:开发手机APP,实现对系统的远程控制和数据查询。
结论基于STM32H743的温湿度监控系统展示了高性能MCU在嵌入式环境监控中的实际应用。通过简单的硬件设计和丰富的功能扩展,这款系统能够满足多种场景的需求,并为用户提供稳定可靠的数据监控服务。
|