From 02a62e8b08b587262738b1b269e319cb49791122 Mon Sep 17 00:00:00 2001 From: Lizongdi <1210855344@qq.com> Date: Thu, 11 Jun 2026 11:04:56 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=B7=B1=E7=94=BB=E4=BA=86=E5=87=A0?= =?UTF-8?q?=E5=BC=A0=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 142 ++++++++---------------------------------------------- 1 file changed, 19 insertions(+), 123 deletions(-) diff --git a/README.md b/README.md index 1329b1c..48ca578 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# 32G431 嵌入式工程 — 代码架构与构建系统汇报 +# 嵌入式工程 — 代码架构与构建系统汇报 -> **芯片平台**: STM32G431 (ARM Cortex-M4, 170MHz, FPU) +> **芯片平台**: STM32H743 (ARM Cortex-M7, 400MHz, FPU) > **构建系统**: CMake + Ninja + GCC ARM 工具链 > **代码来源**: STM32CubeMX 生成框架 + 自研业务模块 (git submodule) @@ -9,26 +9,26 @@ ## 一、工程总体架构 ``` -32g431/ ← 工程根目录 +robot_h743/ ← 工程根目录 ├── CMakeLists.txt ← 顶层构建入口 ├── CMakePresets.json ← 预设构建配置(一键切换产品型号) ├── gcc-arm-none-eabi.cmake ← 交叉编译工具链定义 -├── STM32G431XX_FLASH.ld ← 链接脚本(Flash 布局) -├── startup_stm32g431xx.s ← 启动文件 -├── 32g431.ioc ← CubeMX 配置文件(可视化管脚/时钟配置) +├── STM32H743XG_FLASH.ld ← 链接脚本(Flash 布局) +├── startup_stm32h743xx.s ← 启动文件 +├── robot_h743.ioc ← CubeMX 配置文件(可视化管脚/时钟配置) │ ├── Core/ ← 【CubeMX 生成层】MCU 基础初始化 │ ├── Src/ │ │ ├── main.c ← 硬件入口:时钟 / 外设初始化 → 跳转业务代码 │ │ ├── gpio.c / dma.c / usart.c / fdcan.c / tim.c / iwdg.c -│ │ ├── stm32g4xx_hal_msp.c ← HAL MSP 回调实现 -│ │ ├── stm32g4xx_it.c ← 中断服务函数 -│ │ └── syscalls.c / sysmem.c / system_stm32g4xx.c -│ └── Inc/ ← 对应头文件 + stm32g4xx_hal_conf.h +│ │ ├── stm32h7xx_hal_msp.c ← HAL MSP 回调实现 +│ │ ├── stm32h7xx_it.c ← 中断服务函数 +│ │ └── syscalls.c / sysmem.c / system_stm32h7xx.c +│ └── Inc/ ← 对应头文件 + stm32h7xx_hal_conf.h │ ├── Drivers/ ← 【芯片原厂层】ST 官方驱动 │ ├── CMSIS/ ← ARM 标准 CMSIS 头文件 -│ └── STM32G4xx_HAL_Driver/ ← HAL + LL 驱动库(源码 + 头文件) +│ └── STM32H7xx_HAL_Driver/ ← HAL + LL 驱动库(源码 + 头文件) │ ├── robot/ ← 【自研业务层】⭐ 核心应用代码 (git submodule) │ ├── main/ ← 程序入口(支持编译为可执行文件或静态库) @@ -54,73 +54,21 @@ ### 2.1 分层关系图 -``` -┌─────────────────────────────────────────────────────────────────┐ -│ 应用层 (App Layer) │ -│ ┌──────────────┐ ┌──────────────┐ ┌───────────────────────┐ │ -│ │ Spoolend │ │ RBcore │ │ optional │ │ -│ │ 卷筒末端控制 │ │ 机器人核心 │ │ MK32 / TI5 电机驱动 │ │ -│ └──────┬───────┘ └──────┬───────┘ └───────────┬───────────┘ │ -└─────────┼──────────────────┼──────────────────────┼─────────────┘ - │ │ │ -┌─────────▼──────────────────▼──────────────────────▼─────────────┐ -│ BSP 层 (板级支持包) │ -│ ┌──────────────────────────────────────────────────────────┐ │ -│ │ bspMCU │ │ -│ │ bsp_uart / bsp_CAN / bsp_i2c / bsp_pin / bsp_cap / │ │ -│ │ bsp_usb / l_uart / l_can / stmflash / My_freeRTOS / │ │ -│ │ My_Lwip / My_print │ │ -│ └──────────────────────────────────────────────────────────┘ │ -└────────────────────────────────┬────────────────────────────────┘ - │ -┌────────────────────────────────▼────────────────────────────────┐ -│ 中间件层 (Middleware Layer) │ -│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────────────┐ │ -│ │ lua │ │ log │ │ list │ │ ringbuffer │ │ -│ │ 脚本引擎 │ │日志框架 │ │数据结构 │ │ 环形缓冲区 │ │ -│ └──────────┘ └──────────┘ └──────────┘ └────────────────┘ │ -│ ┌──────────────────────────────────────────────────────────┐ │ -│ │ common │ │ -│ │ 内存池 / 标准IO重定向 / 线程封装 / 时间工具 │ │ -│ └──────────────────────────────────────────────────────────┘ │ -│ ┌──────────────────────────────────────────────────────────┐ │ -│ │ peripheral │ │ -│ │ ATParser / button / led / com (通信协议) │ │ -│ └──────────────────────────────────────────────────────────┘ │ -└────────────────────────────────┬────────────────────────────────┘ - │ -┌────────────────────────────────▼────────────────────────────────┐ -│ HAL 层 (硬件抽象层) │ -│ ┌──────────────────────────────────────────────────────────┐ │ -│ │ STM32G4xx HAL Driver + LL Driver │ │ -│ │ GPIO / UART / FDCAN / TIM / DMA / IWDG / RCC / PWR ... │ │ -│ └──────────────────────────────────────────────────────────┘ │ -└────────────────────────────────┬────────────────────────────────┘ - │ -┌────────────────────────────────▼────────────────────────────────┐ -│ CMSIS 层 (ARM 标准层) │ -│ core_cm4.h / cmsis_gcc.h / mpu_armv7.h │ -└────────────────────────────────┬────────────────────────────────┘ - │ -┌────────────────────────────────▼────────────────────────────────┐ -│ 硬件 (STM32G431RB) │ -│ Cortex-M4 · 170MHz · 128KB Flash · 32KB SRAM │ -└─────────────────────────────────────────────────────────────────┘ -``` +![架构图](D:\image\typora\架构图.png) ### 2.2 各层职责说明 | 层级 | 目录 | 职责 | 关键文件 | |------|------|------|----------| -| **硬件层** | — | STM32G431 芯片 | — | -| **CMSIS 层** | `Drivers/CMSIS/` | ARM Cortex-M4 核心寄存器定义、中断向量、MPU 配置 | `core_cm4.h` | -| **HAL 层** | `Drivers/STM32G4xx_HAL_Driver/` | ST 官方外设驱动库,屏蔽寄存器差异 | `stm32g4xx_hal_*.c/h` | +| **硬件层** | — | STM32H743 芯片 | — | +| **CMSIS 层** | `Drivers/CMSIS/` | ARM Cortex-M7 核心寄存器定义、中断向量、MPU 配置 | `core_cm7.h` | +| **HAL 层** | `Drivers/STM32H7xx_HAL_Driver/` | ST 官方外设驱动库,屏蔽寄存器差异 | `stm32h7xx_hal_*.c/h` | | **CubeMX 生成层** | `Core/Src/` & `Core/Inc/` | 由 STM32CubeMX 可视化工具自动生成,负责时钟树、GPIO、DMA、中断等基础初始化 | `main.c`, `gpio.c`, `usart.c`, `fdcan.c` | | **中间件层** | `robot/library/` | 通用基础组件,与硬件无关,可跨平台复用 | `common/`, `log/`, `list/`, `ringbuffer/` | | **中间件层** | `robot/peripheral/` | 外部传感器/模块驱动,通信协议封装 | `ATParser.c`, `com.c`, `button.c`, `led.c` | | **中间件层** | `robot/lua/` | Lua 5.x 脚本引擎,支持运行时动态配置控制逻辑 | `lua.c`, `lvm.c`, `lapi.c` 等 | | **BSP 层** | `robot/bspMCU/` | 板级支持包:CAN/UART/I2C/USB/CAP 驱动 + FreeRTOS/LwIP 集成 + Lua 绑定 | `bsp_CAN.c`, `bsp_uart.c`, `My_freeRTOS.c`, `l_can.c` | -| **应用层** | `robot/Spoolend/` | **卷筒末端控制**业务逻辑:Modbus 通信、Flash 参数存储 | `Spoolend.c`, `modbus.c`, `flash_operation.c` | +| **应用层** | `robot/Spoolend/` | **线轴端控制**业务逻辑:Modbus 通信、Flash 参数存储 | `Spoolend.c`, `modbus.c`, `flash_operation.c` | | **应用层** | `robot/RBcore/` | **机器人核心控制**:运动算法、驱动接口 | `BHBF_robot.c`, `drv_interface.c` | | **应用层** | `robot/optional/` | 可选电机组件:MK32 电机 / TI5 电机驱动 | `msp_MK32.c`, `msp_TI5MOTOR.c` | @@ -130,34 +78,7 @@ ### 3.1 构建流程图 -``` -CMakePresets.json gcc-arm-none-eabi.cmake - │ │ - │ 选择预设 (Spool-end / robot) │ 定义交叉编译工具链 - ▼ ▼ -┌────────────────────────────────────────────────────────────┐ -│ CMake Configure │ -│ cmake --preset Spool-end │ -│ │ -│ ① 读取预设 → 设置 BUILD_LUA=ON, BUILD_BSPMCU=ON ... │ -│ ② 加载 toolchain → arm-none-eabi-gcc / -mcpu=cortex-m4 │ -│ ③ 扫描 robot/ 子模块 → 按 option 启用对应模块 │ -│ ④ 生成编译宏 (BUILD_BSPMCU, BUILD_SPOOLEND ...) │ -│ ⑤ 生成链接依赖树 │ -└──────────────────────────┬─────────────────────────────────┘ - │ - ▼ -┌────────────────────────────────────────────────────────────┐ -│ Build (Ninja) │ -│ │ -│ 各模块编译为 .a 静态库: │ -│ libcommon.a libperipheral.a libbspMCU.a │ -│ liblua.a libSpoolend.a liblog.a │ -│ liblist.a libringbuffer.a libRBcore.a │ -│ │ -│ 最终链接 → 32g431.elf → 32g431.bin / 32g431.hex │ -└────────────────────────────────────────────────────────────┘ -``` +![构建流程](D:\image\typora\构建流程-17811428883881.png) ### 3.2 模块化构建机制 @@ -191,7 +112,7 @@ add_module(optional optional OFF OFF) | 预设名称 | 用途 | 启用模块 | |----------|------|----------| -| **Spool-end** | 卷筒末端产品 | common + peripheral + lua + bspMCU + Spoolend + log + ringbuffer + list | +| **Spool-end** | 线轴端控制器产品 | common + peripheral + lua + bspMCU + Spoolend + log + ringbuffer + list | | **robot** | 继承 Spool-end + 额外 | 再加 RBcore + optional + FreeRTOS + LwIP + TALNET | ### 3.4 CMake 构建系统的核心优势 @@ -289,32 +210,7 @@ robot/Spoolend/ ## 六、从 CubeMX 到 CMake 的工作流 -``` -┌─────────────────────┐ -│ STM32CubeMX (.ioc) │ ← 可视化配置管脚、时钟、外设、中断 -└──────────┬──────────┘ - │ 生成代码 - ▼ -┌─────────────────────┐ ┌──────────────────────┐ -│ Core/Src & Inc │ │ robot/ (submodule) │ -│ (CubeMX 生成) │ │ (手写业务代码) │ -└──────────┬──────────┘ └──────────┬───────────┘ - │ │ - │ ┌─────────────────┘ - ▼ ▼ -┌──────────────────────────────────────┐ -│ CMakeLists.txt │ -│ add_subdirectory(cmake/stm32cubemx)│ -│ add_subdirectory(robot) │ -│ target_link_libraries(...) │ -└──────────────────┬───────────────────┘ - │ - ▼ -┌──────────────────────────────────────┐ -│ 32g431.elf → .bin / .hex │ -│ 烧录到 STM32G431 │ -└──────────────────────────────────────┘ -``` +![工作流](D:\image\typora\工作流.png) > **CubeMX 负责硬件配置,CMake 负责构建编排,robot 子模块负责业务逻辑**——三者职责清晰,互不干扰。