Skip to content

Repository files navigation

🌤️ FreeRTOS Smart Weather Station (智能天气时钟)

License RTOS MCU

项目简介:本项目是一个基于 STM32 与 ESP32-C3 的高刷新率、异构解耦桌面天气终端。核心聚焦于 **RTOS 任务调度优化、异步 UI 引擎设计以及底层通信协议 (SPI/I2C/UART) 的非阻塞重构,旨在验证复杂嵌入式系统下的高并发数据同步与稳定性设计。

💻 硬件架构 (Hardware Architecture)

本系统采用主从异构架构,硬件选型与接口定义如下:

模块名称 核心器件 通信总线 核心功能
主控核心 STM32F4xx 内部总线 统筹 FreeRTOS 调度、UI 渲染引擎计算与数据解析
网络协同 ESP32-C3 UART (DMA) 负责 Wi-Fi 栈、HTTPS 请求 (心知天气) 与 SNTP 时钟同步
显示面板 ST7789 (1.54寸) 硬件 SPI 高刷 UI 呈现,支持全角/半角、UTF-8/GB2312 混排自适应识别
环境感知 AHT20 硬件 I2C 室内温湿度高精度采集

⚙️ 软件架构与核心技术锚点 (Technical Highlights)

本项目彻底摒弃了传统的“大循环+裸机延迟 (Delay)”开发模式,基于 FreeRTOS 实现了业务逻辑与底层驱动的深度解耦:

  1. 异步 UI 引擎与优先级翻转规避 (UI Decoupling) 痛点:多任务频繁抢占 ST7789 的 SPI 总线易导致互斥锁死锁及优先级翻转 (Priority Inversion)。 重构方案:设计极简 UI 引擎,利用 FreeRTOS 消息队列 (Queue),将所有多任务对屏幕的异步写操作,统一打包封装为 struct-union-struct 数据帧,转化为 UI 线程上的同步操作。

  2. 前后台任务分离 (Workqueue Mechanism)

  • 引入 Linux 风格的 workqueue 机制。
  • 前台任务:UI 刷新(如秒针高频更新)、按键中断响应,确保人机交互的绝对实时性 (Real-time)。
  • 后台任务:将 SNTP 请求、HTTPS 天气获取、I2C 传感器读取等高延迟/非实时操作委托给后台调度。利用软件定时器 (Software Timer) 作为发布者触发任务,大幅降低了应用层的栈内存 (Stack Size) 消耗。
  1. 高效 ESP-AT 串口模型 (Custom AT Parser) 弃用低效的轮询接收。自主封装发送、接收与解析闭环函数。 底层实现:采用 UART TX DMA 发送 + RX 空闲中断 (Idle Interrupt)。无需等待 DMA 传输完毕,直接通过信号量 (Semaphore) 阻塞等待解析完成,自带超时机制,极大提高了 CPU 的执行效率。

  2. 线程安全日志组件 (Thread-safe Logger)

  • 规避标准库 printf 的不可重入缺陷,引入并魔改 easylogger 组件。
  • 增加互斥量 (Mutex) 保护,集成时间戳 (Timestamp)、Tag、日志等级分色、文件名与行号追踪,极大提升了多任务环境下的 Bug 排查效率。

📂 工程目录说明 (Directory Structure)

text ├── STM32F4_ColorBlock/ # 核心驱动模块与业务逻辑 ├── STM32F4_SPI/ # SPI 驱动重构层 ├── STM32F4_AHT20/ # 温湿度传感器 I2C 驱动 ├── STM32F4_Inputc/ # 按键与输入中断处理 ├── USART_int/ # 串口 DMA 及中断底层封装 ├── ST_Interrupt_all/ # 全局中断向量表与统一管理 └── README.md # 项目工程说明文档 🛠️ 编译与烧录指南 (How to Build) 开发环境:推荐使用 Keil uVision5 (MDK-ARM)。

依赖库:项目基于 STM32F4xx 标准外设库 (Standard Peripheral Library V1.9.0)。

编译:打开 mdk/ 目录下的 .uvprojx 工程文件,全编译 (F7) 即可。

烧录:支持 ST-Link 或 J-Link,接线方式遵循标准 SWD 接口(GND, SWCLK, SWDIO, 3V3)。

About

STM32F4xx 天气时钟早期练习(LED/串口/定时器基础工程),已被 weather-clock-learning 取代,保留存档

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages