1.一套可落地的 STM32 六层架构 —— 开篇

概述

上一篇《MCU 项目软件分层设计规范——以 MCU 项目为例》介绍了 MCU 软件分层的设计原则、各层职责以及模块依赖关系。

有了分层规范,接下来更重要的问题是:如何把这些原则真正落到一个可运行、可持续迭代的 STM32 工程中?

接下来我准备了一系列文章,介绍软件分层工程目录怎样创建,还将以 GPIO、UART、ADC、TIM、I2C、SPI 等常用外设为例,演示外设驱动如何在 BSP、Driver、Device、Service、Application 等层中完成封装与调用。

文章不会把外设拆成彼此独立的示例,而是让每个模块都在同一个工程中逐步演进。每完成一篇文章,工程都会增加一个可编译、可下载、可验证的功能模块。

最终,这些模块将组成一个具备设备监测、阈值告警、参数保存、历史记录和通信控制能力的小型 STM32 RT-Thread 工程项目。

通过本系列文章,你将学会:

  • 如何搭建一个基于 STM32 和 RT-Thread 的软件分层工程框架;
  • 如何建立 BSP、Driver、Device、Service、Application 等分层目录;
  • 如何明确各层模块的职责、接口与依赖关系;
  • 如何将 GPIO、UART、ADC、PWM、I2C、SPI、UDP 等外设纳入统一工程;
  • 如何完成 UART DMA 不定长接收、命令解析和日志输出;
  • 如何实现 ADC 数据采集、电压换算、滤波和阈值告警;
  • 如何使用 PWM 实现蜂鸣器告警和 LED 呼吸效果;
  • 如何通过 EEPROM 实现参数掉电保存与上电恢复;
  • 如何使用 SPI Flash 保存历史告警和运行日志;
  • 如何通过 UDP 实现设备状态上报和远程控制;
  • 如何让多个外设模块在同一个 STM32 工程中协同工作。

最终得到的不是一组零散的外设例程,而是一个可以运行、便于理解、能够继续扩展的 STM32 分层工程。


一、开发环境

项目内容
MCU / 开发板STM32F429 正点原子开发板
操作系统RT-Thread
开发工具Keil MDK、STM32CubeMax
底层驱动方式RT-Thread 设备框架为主,STM32 HAL 为辅

不同开发板的引脚、外设实例和 BSP 配置可能有所差异,但工程组织方式、模块边界和实现思路可以复用。


二、最终工程目标

最终工程将包含以下模块,每层职责明确:

层级职责不应做的事
app收敛业务变化,业务编排、状态机不直接调用下层硬件接口
service收敛通用能力,数据处理、策略、告警判断不直接操作 HAL 或寄存器
device收敛设备差异,具体设备接口抽象不决定系统工作模式
bsp收敛板级资源差异,引脚定义、外设实例配置不放业务逻辑
platform承接底层平台环境(RT-Thread 内核、HAL 驱动)不包含业务相关定制
component沉淀可复用能力(环形缓冲区、CRC、滤波算法等)不依赖具体业务或硬件实例

 GPIO  
 ├── LED 状态指示  
 └── 按键输入与模式控制  
 ​  
 Timer  
 ├── 软件定时器  
 └── 周期任务处理  
 ​  
 UART  
 ├── 日志输出  
 ├── FinSH / MSH 调试终端  
 ├── DMA 不定长接收  
 └── 串口命令处理  
 ​  
 ADC  
 ├── 模拟量采集  
 ├── 电压换算  
 ├── 数据滤波  
 └── 阈值告警  
 ​  
 PWM  
 ├── 蜂鸣器控制  
 ├── LED 呼吸效果  
 └── 声光告警策略  
 ​  
 I2C  
 └── AT24Cxx EEPROM 参数保存与上电恢复  
 ​  
 SPI  
 └── W25Q128 Flash 历史告警与运行记录存储  
 ​  
 UDP  
 ├── 设备状态上报  
 └── 外部控制命令接收

最终将形成如下业务闭环:

 ADC 检测到低电压  
     ↓  
 换算、滤波、阈值判断  
     ↓  
 生成低压告警  
     ├── LED 切换故障状态  
     ├── PWM 驱动蜂鸣器提示  
     ├── UART 输出告警日志  
     ├── UDP 上报告警信息  
     └── W25Q128 保存历史记录

系统阈值、工作模式等配置也支持掉电保存:

 按键 / UDP 修改参数  
     ↓  
 更新系统配置  
     ↓  
 AT24Cxx EEPROM 保存  
     ↓  
 下次上电自动恢复


三、文章路线

篇章主题版本重点内容
第 1 篇基础工程框架搭建v0.1分层目录[[]]、初始化流程、公共配置、FinSH、版本信息
第 2 篇GPIO:LED 与按键封装v0.2LED 控制、按键事件、输入输出封装
第 3 篇定时器与周期任务v0.3软件定时器、周期执行、状态更新
第 4 篇UART:日志、DMA 接收与命令处理v0.4DMA 接收、环形缓冲区、日志与命令解析
第 5 篇ADC:采集、滤波与阈值告警v0.5电压采样、数据滤波、告警事件
第 6 篇PWM:蜂鸣器与呼吸灯v0.6PWM 输出、声光告警效果
第 7 篇I2C:AT24Cxx EEPROM 参数存储v0.7页写处理、CRC、掉电保存与恢复
第 8 篇SPI:W25Q128 Flash 历史记录v0.9擦除、页编程、历史日志管理
第 9 篇UDP: 通信与状态上报v0.10lwIP 移植、UDP 通信、状态上报、远程命令
第 10 篇数据处理:指令解析与参数管理v0.11上位机指令解析、参数管理、状态上报
第 11 篇综合案例:设备监测系统v1.0多模块协作、完整业务闭环
第 12 篇工程复盘与扩展方向v1.1工程结构、模块关系、扩展思路

四、下一篇预告

下一篇将从 v0.1 开始,搭建基于 STM32F429 和 RT-Thread 的分层基础工程框架,完成:

  • STM32F429 BSP 正常启动
  • RT-Thread 基础运行环境配置
  • FinSH / MSH 串口终端可用
  • 建立 app、service、device、bsp、platform、component 分层目录
  • 配置公共头文件、项目配置与版本信息
  • 设计工程统一初始化入口
  • 输出工程启动日志
  • 为后续外设模块预留目录和接口位置

v0.1 开始,后续每增加一个模块,都会在同一个 STM32 工程中持续演进。

关注我,一起从零构建一个可运行、可维护、可持续迭代的 STM32 分层工程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值