STM32 FreeRTOS 5层架构设计文档用户业务代码一、架构整体说明本架构仅包含用户业务代码不含CubeMX自动生成的底层代码Drivers、Middlewares严格遵循“从上到下、单向调用”原则禁止反向调用、跨层越级调用确保工程整洁、可维护、可复用。5层架构从上到下App 应用层 → Protocol 协议层 → Middleware 中间工具层 → BSP 板级封装层 → Driver 底层驱动层二、各层详细说明职责内容规则第一层App 应用层作用业务逻辑核心只关心“做什么”是整个系统的业务入口。内容设备运行流程、状态机管理、FreeRTOS任务创建与任务实体、业务逻辑控制如LED控制、OLED显示、4G/RS485业务交互等。规则不直接操作硬件、不处理协议底层细节仅调用下层Protocol、Middleware、BSP提供的接口完成业务逻辑。第二层Protocol 协议层作用负责通信协议的解析与封装只关心“怎么通讯”屏蔽协议底层差异。内容Modbus、自定义串口协议等的打包、解包、校验如CRC校验、寄存器映射、协议异常处理。规则不直接操作硬件仅调用BSP层硬件接口和Middleware层工具函数完成协议处理。第三层Middleware 中间工具层作用通用工具库与硬件、业务逻辑完全无关提供全局可复用的工具函数。内容FIFO缓冲区、日志打印、CRC校验、数据滤波、软件定时器、数据格式转换如进制转换、高低字节拆分等纯软件算法。规则纯软件实现无任何硬件依赖、无任何业务逻辑可跨工程复用。第四层BSP 板级封装层作用对底层硬件接口进行统一封装对上提供简洁、统一的API屏蔽不同硬件的底层差异。内容板级外设操作串口、LED、OLED、按键、继电器、4G、RS485等统一封装硬件操作接口。规则不写业务逻辑、不处理协议仅调用Driver层的底层驱动接口对外提供标准化API。第五层Driver 底层驱动层作用最底层硬件驱动直接操作芯片寄存器或HAL库是硬件操作的最终入口。内容GPIO、UART、SPI、ADC、定时器等外设的初始化、读写操作纯硬件底层驱动实现。规则仅做纯硬件操作无任何业务逻辑、无协议处理、无逻辑判断只对外提供最基础的硬件操作接口。三、main函数标准模板唯一规范cint main(void){// 1. 系统底层初始化CubeMX自动生成相关函数HAL_Init();SystemClock_Config();// 2. BSP板级硬件初始化调用BSP层统一初始化接口BSP_Init();// 3. 创建所有FreeRTOS任务顶层调用统一管理任务创建Task_CreateAll();// 4. 启动FreeRTOS调度器系统进入自动调度模式osKernelStart();while (1) {// 永远为空不写任何业务逻辑、不做任何硬件操作}}四、FreeRTOS任务管理说明核心逻辑FreeRTOS内核CubeMX自动生成负责任务调度用户仅需完成“任务创建”和“任务实体编写”。任务创建统一放在 App 层的 task_create.c 文件中通过 Task_CreateAll() 函数集中创建所有任务便于管理。任务实体每个任务的具体业务逻辑while(1)循环放在 App 层对应的心文件中如app_led.c、app_oled.c。任务调度由FreeRTOS内核自动完成无需用户编写调度代码仅需设置任务优先级即可。任务管理核心分工Task_CreateAll()负责创建所有FreeRTOS任务统一管理任务优先级、堆栈大小。User_App负责编写每个任务的业务逻辑任务实体不负责任务创建。FreeRTOS负责自动调度所有任务实现任务切换、延时、同步等功能。五、系统运行流程单向流转plain textmain函数启动↓系统初始化HAL 时钟↓BSP硬件初始化调用BSP_Init()↓创建所有FreeRTOS任务调用Task_CreateAll()↓启动FreeRTOS调度器osKernelStart()↓FreeRTOS自动调度任务↓App层任务实体运行执行业务逻辑↓Protocol层协议打包/解包 / Middleware层调用工具函数↓BSP层调用板级封装API↓Driver层调用底层硬件驱动↓HAL库 / 芯片寄存器↓硬件设备执行具体操作六、工程目录结构规范统一plain text// 用户业务代码自定义目录App // 应用层├─ app_task.c // 所有FreeRTOS任务创建Task_CreateAll()├─ app_led.c // LED任务实体业务逻辑├─ app_oled.c // OLED任务实体业务逻辑├─ app_rs485.c // RS485任务实体业务逻辑└─ app_4g.c // 4G任务实体业务逻辑Protocol // 协议层└─ modbus_rtu.c // Modbus协议打包、解包、校验Middleware // 中间工具层├─ crc.c // CRC校验函数└─ fifo.c // FIFO缓冲区操作BSP // 板级封装层├─ bsp_led.c // LED板级封装API├─ bsp_oled.c // OLED板级封装API├─ bsp_usart.c // 串口板级封装API└─ bsp_rs485.c // RS485板级封装APIDriver // 底层驱动层├─ drv_gpio.c // GPIO底层驱动初始化、读写├─ drv_uart.c // UART底层驱动初始化、收发└─ drv_spi.c // SPI底层驱动初始化、读写// CubeMX自动生成代码无需修改Drivers // HAL库 CMSIS内核相关文件Middlewares // FreeRTOS内核相关文件七、调用规则强制遵守1. 调用方向只能从上往下调用即 App → Protocol → Middleware → BSP → Driver禁止反向调用如下层调用上层。2. 禁止跨层禁止跳过中间层直接调用下层接口如App层直接调用Driver层、Protocol层直接调用Driver层。3. 职责边界各层严格遵守自身职责不越权处理其他层的内容如BSP层不写业务逻辑Driver层不处理协议。