From 7825d2e38b2e79545f686e0bb1aaa2516da82f64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E4=BD=B3?= <13101321+jfen5577@user.noreply.gitee.com> Date: Thu, 29 Jan 2026 16:40:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E4=B8=8D=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E7=9A=84=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .trae/documents/STM32F407项目优化迭代计划.md | 163 ---------------- .../documents/STM32F407项目模块化改进计划.md | 175 ----------------- .trae/documents/plan_20260123_004252.md | 86 --------- .trae/documents/增强HAL通用性和改进BSP设计.md | 78 -------- .trae/documents/实现W25QXX Flash支持计划.md | 181 ------------------ .trae/documents/实现更方便的板级移植方案.md | 67 ------- .../将驱动部分实现为Rust的解耦化方案.md | 103 ---------- .trae/documents/添加LAN8720以太网驱动实现.md | 49 ----- 8 files changed, 902 deletions(-) delete mode 100644 .trae/documents/STM32F407项目优化迭代计划.md delete mode 100644 .trae/documents/STM32F407项目模块化改进计划.md delete mode 100644 .trae/documents/plan_20260123_004252.md delete mode 100644 .trae/documents/增强HAL通用性和改进BSP设计.md delete mode 100644 .trae/documents/实现W25QXX Flash支持计划.md delete mode 100644 .trae/documents/实现更方便的板级移植方案.md delete mode 100644 .trae/documents/将驱动部分实现为Rust的解耦化方案.md delete mode 100644 .trae/documents/添加LAN8720以太网驱动实现.md diff --git a/.trae/documents/STM32F407项目优化迭代计划.md b/.trae/documents/STM32F407项目优化迭代计划.md deleted file mode 100644 index 10fd61b..0000000 --- a/.trae/documents/STM32F407项目优化迭代计划.md +++ /dev/null @@ -1,163 +0,0 @@ -# STM32F407项目优化计划 - -## 1. 项目现状分析 - -通过对代码的深入分析,当前项目已经具备了基本的HAL(硬件抽象层)和BSP(板级支持包)分层设计,但在以下方面还有很大的优化空间: - -### 1.1 HAL层现状 -- 已实现GPIO、UART、SPI等基本外设的HAL驱动 -- 采用了架构分离的设计(通过HAL_TARGET_ARCH宏) -- 缺少统一的错误处理机制 -- 缺少统一的HAL模块管理机制 - -### 1.2 BSP层现状 -- 实现了基本的板级初始化 -- 采用了配置结构体的方式定义板级配置 -- 缺少基于配置文件的初始化机制 -- 模块化程度不够,外设驱动之间耦合度较高 - -## 2. 优化目标 - -### 2.1 HAL层优化目标 -- 完善架构抽象,提高通用性 -- 实现统一的错误处理机制 -- 增加HAL模块管理机制 -- 支持更多外设类型 - -### 2.2 BSP层优化目标 -- 实现基于配置文件的BSP初始化 -- 增加BSP层的模块化设计 -- 优化板级配置结构体 -- 支持动态扩展的外设配置 - -## 3. 具体实施步骤 - -### 3.1 HAL层优化 - -**3.1.1 完善HAL层架构抽象** - -1. **修改`hal.h`** - - 增加HAL模块管理机制 - - 定义统一的错误码枚举 - - 增加HAL层版本信息 - - 完善架构分离机制 - -2. **实现统一的HAL模块初始化** - - 创建`hal_module.h`,定义HAL模块管理接口 - - 实现HAL模块的注册、初始化和卸载功能 - - 支持模块的依赖管理 - -**3.1.2 优化HAL层错误处理** - -1. **定义统一的错误码** - ```c - typedef enum { - HAL_OK = 0, - HAL_ERROR, - HAL_BUSY, - HAL_TIMEOUT, - HAL_INVALID_PARAM, - HAL_NOT_SUPPORTED, - // 更多错误码... - } hal_status_t; - ``` - -2. **修改HAL函数签名** - - 将所有HAL函数改为返回`hal_status_t` - - 增加错误信息传递机制 - - 实现错误日志记录功能 - -3. **实现错误处理工具函数** - - 编写`hal_error.h`,提供错误码转换和处理工具 - - 支持错误信息的格式化输出 - -### 3.2 BSP层优化 - -**3.2.1 实现基于配置文件的BSP初始化** - -1. **设计配置文件格式** - - 采用JSON或二进制格式存储配置 - - 支持分层配置结构 - - 实现配置版本管理 - -2. **实现配置文件解析器** - - 创建`bsp_config_parser.c`,实现配置文件解析功能 - - 支持从Flash或文件系统加载配置 - - 实现配置的验证和默认值填充 - -3. **修改BSP初始化流程** - - 修改`bsp_init.c`,支持从配置文件加载配置 - - 实现配置的动态应用 - - 增加配置变更通知机制 - -**3.2.2 增加BSP层模块化设计** - -1. **实现外设驱动模块化** - - 为每个外设驱动创建独立的模块 - - 实现模块的注册和初始化机制 - - 支持模块的动态加载和卸载 - -2. **创建BSP模块管理机制** - - 编写`bsp_module.h`,定义BSP模块管理接口 - - 实现模块的依赖管理 - - 支持模块的优先级管理 - -3. **优化外设驱动之间的交互** - - 采用事件驱动机制,减少外设驱动之间的耦合 - - 实现外设驱动的异步操作支持 - - 增加外设驱动的状态管理 - -**3.2.3 优化板级配置结构体** - -1. **修改`bsp_board.h`** - - 增加配置结构体的版本字段 - - 支持配置的动态扩展 - - 实现配置的默认值机制 - -2. **设计灵活的配置扩展机制** - - 采用链表或数组方式存储扩展配置 - - 支持配置项的动态添加和删除 - - 实现配置的序列化和反序列化 - -3. **实现配置的校验机制** - - 增加配置项的合法性校验 - - 支持配置的完整性检查 - - 实现配置的自动修复功能 - -## 4. 预期成果 - -通过本次优化,项目将实现: - -- **更完善的HAL层**:具有统一的错误处理机制和模块管理,提高了通用性和可维护性 -- **更灵活的BSP层**:支持基于配置文件的初始化,模块化程度更高,外设驱动之间耦合度更低 -- **更优化的板级配置**:支持动态扩展和版本管理,配置更加灵活和可靠 -- **更好的可扩展性**:便于添加新的外设驱动和支持新的硬件平台 -- **更好的可维护性**:代码结构更清晰,错误处理更完善,便于调试和维护 - -## 5. 实施顺序 - -1. 首先优化HAL层的错误处理机制 -2. 然后完善HAL层的架构抽象 -3. 接着优化板级配置结构体 -4. 然后实现BSP层的模块化设计 -5. 最后实现基于配置文件的BSP初始化 - -## 6. 风险评估 - -- **风险1**:修改HAL函数签名可能导致现有代码无法编译 - - **应对措施**:采用渐进式修改,先添加错误码返回,保持向后兼容 - -- **风险2**:配置文件解析可能增加系统开销 - - **应对措施**:优化解析算法,采用高效的解析库,支持配置的缓存机制 - -- **风险3**:模块化设计可能增加代码复杂度 - - **应对措施**:保持模块接口的简洁性,提供详细的文档和示例代码 - -## 7. 测试计划 - -- 单元测试:测试每个HAL函数的错误处理功能 -- 集成测试:测试HAL模块管理机制 -- 系统测试:测试基于配置文件的BSP初始化 -- 回归测试:确保现有功能不受影响 - -通过以上优化,项目将在架构设计、代码质量和可维护性方面得到显著提升,为后续的功能扩展和平台移植奠定坚实的基础。 \ No newline at end of file diff --git a/.trae/documents/STM32F407项目模块化改进计划.md b/.trae/documents/STM32F407项目模块化改进计划.md deleted file mode 100644 index 50cb3d4..0000000 --- a/.trae/documents/STM32F407项目模块化改进计划.md +++ /dev/null @@ -1,175 +0,0 @@ -# STM32F407项目模块化改进计划 - -## 项目现状分析 - -**优点:** -- 使用CMake构建系统,便于跨平台开发和集成 -- 基于STM32CubeMX生成代码,硬件配置便捷 -- 代码结构清晰,分为核心代码和驱动代码 - -**缺点:** -- 应用代码直接与硬件交互,耦合度高 -- 缺少模块化设计,不利于后续功能扩展 -- 没有分层架构,业务逻辑与硬件操作混合 -- 缺少统一的API设计,不利于代码复用和维护 - -## 改进方案 - -### 1. 分层架构设计 - -| 层级 | 职责 | 示例模块 | -|------|------|----------| -| 应用层 | 实现业务逻辑 | main程序、任务管理 | -| 中间件层 | 提供通用功能组件 | 日志、状态管理、事件系统 | -| 驱动层 | 实现具体外设驱动 | LED、UART、SPI、I2C等 | -| 硬件抽象层 | 封装底层硬件操作 | 寄存器操作封装、中断处理 | - -### 2. 模块化设计 - -**创建模块化目录结构:** -``` -├── Core/ -│ ├── Inc/ -│ ├── Src/ -├── Drivers/ -│ ├── CMSIS/ -│ ├── STM32F4xx_HAL_Driver/ -├── Modules/ -│ ├── led/ -│ │ ├── inc/ -│ │ └── src/ -│ ├── uart/ -│ │ ├── inc/ -│ │ └── src/ -│ ├── delay/ -│ │ ├── inc/ -│ │ └── src/ -│ └── ... -├── Middlewares/ -│ ├── logging/ -│ ├── event/ -│ └── ... -└── cmake/ -``` - -**模块设计原则:** -- 每个模块独立封装,提供清晰的API接口 -- 模块间通过API通信,不直接访问对方内部实现 -- 模块支持初始化、配置、使用和销毁的完整生命周期 - -### 3. 核心模块实现 - -**LED模块示例:** -```c -// led.h -typedef struct { - GPIO_TypeDef *gpio_port; - uint16_t gpio_pin; -} led_config_t; - -typedef struct { - led_config_t config; - uint8_t state; -} led_t; - -void led_init(led_t *led, const led_config_t *config); -void led_on(led_t *led); -void led_off(led_t *led); -void led_toggle(led_t *led); - -// led.c -void led_init(led_t *led, const led_config_t *config) { - led->config = *config; - led->state = 0; -} - -void led_on(led_t *led) { - HAL_GPIO_WritePin(led->config.gpio_port, led->config.gpio_pin, GPIO_PIN_SET); - led->state = 1; -} - -// 其他函数实现... -``` - -### 4. 应用层重构 - -**重构main.c:** -```c -#include "main.h" -#include "modules/led/led.h" -#include "modules/delay/delay.h" - -// 定义LED配置 -static led_config_t led_config = { - .gpio_port = GPIOA, - .gpio_pin = GPIO_PIN_6 -}; - -// 定义LED实例 -static led_t led; - -int main(void) { - // 初始化HAL - HAL_Init(); - - // 配置系统时钟 - SystemClock_Config(); - - // 初始化外设 - MX_GPIO_Init(); - - // 初始化模块 - led_init(&led, &led_config); - delay_init(); - - // 主循环 - while (1) { - led_toggle(&led); - delay_ms(100); - } -} -``` - -### 5. CMake配置优化 - -**修改主CMakeLists.txt:** -- 添加模块目录到构建系统 -- 支持模块化编译和链接 -- 提供模块构建选项 - -**模块CMake配置示例:** -```cmake -# Modules/led/CMakeLists.txt -add_library(led STATIC) -target_sources(led PRIVATE src/led.c) -target_include_directories(led PUBLIC inc) -target_link_libraries(led PRIVATE stm32cubemx) -``` - -## 实施步骤 - -1. **创建模块化目录结构**:按照设计方案创建Modules和Middlewares目录 -2. **实现基础模块**:先实现LED、delay等简单模块,验证模块化设计可行性 -3. **重构应用代码**:将main.c中的直接硬件操作替换为模块API调用 -4. **优化CMake配置**:修改CMake文件,支持模块化编译 -5. **扩展更多模块**:根据需求实现UART、SPI、I2C等更多外设模块 -6. **引入中间件**:添加日志、事件系统等中间件组件 -7. **完善文档**:为每个模块编写API文档和使用示例 - -## 预期效果 - -- **降低耦合度**:模块间通过API通信,减少直接依赖 -- **提高可维护性**:每个模块独立封装,便于修改和测试 -- **增强可扩展性**:新增功能只需添加新模块,无需修改现有代码 -- **提高代码复用性**:模块化设计便于在不同项目中复用 -- **便于团队协作**:清晰的模块划分便于多人并行开发 - -## 后续维护建议 - -1. **建立模块开发规范**:统一模块API设计和代码风格 -2. **实施单元测试**:为每个模块编写单元测试,确保功能正确性 -3. **定期代码审查**:确保代码质量和模块化设计符合规范 -4. **完善文档管理**:及时更新模块文档,便于后续维护 -5. **版本控制**:使用Git进行版本管理,便于追溯和回滚 - -通过以上改进方案,将使STM32F407项目具备良好的模块化设计和分层架构,便于后续的维护拓展和功能扩展,同时降低代码耦合度,提高代码质量和可维护性。 \ No newline at end of file diff --git a/.trae/documents/plan_20260123_004252.md b/.trae/documents/plan_20260123_004252.md deleted file mode 100644 index c67dd62..0000000 --- a/.trae/documents/plan_20260123_004252.md +++ /dev/null @@ -1,86 +0,0 @@ -# 项目移植短板评估与改进建议 - -## 一、当前项目结构分析 - -项目采用CMake构建系统,结构清晰,分为以下主要模块: -- **BSP**:板级支持包,包含板级配置和初始化 -- **HAL**:硬件抽象层,封装了GPIO、UART等基本外设 -- **Modules**:用户模块,包含LED、Delay、UART、Logging等 -- **STM32CubeMX**:STM32CubeMX生成的代码 -- **Middlewares**:中间件 - -## 二、移植过程中可能出现的短板 - -### 1. 硬件抽象层(HAL)的局限性 -- **外设支持有限**:目前只封装了GPIO、UART等基本外设,复杂外设(SPI、I2C、CAN等)未封装 -- **MCU系列耦合**:HAL实现与STM32F4系列紧密耦合,移植到其他STM32系列时需要重写 -- **API设计不够通用**:未考虑不同MCU架构的差异,难以适应多样化硬件 - -### 2. 板级支持包(BSP)设计问题 -- **单板子支持**:目前只支持STM32F407VET6,没有板级抽象 -- **硬编码配置**:硬件资源配置直接写在头文件中,移植时需要修改源代码 -- **初始化流程固定**:板级初始化与特定硬件绑定,不具备灵活性 - -### 3. 工具链和构建配置限制 -- **工具链固定**:硬编码为arm-none-eabi-gcc,无法轻松切换到其他架构(如RISC-V) -- **MCU特定标志硬编码**:CMake工具链文件中的-mcpu=cortex-m4等标志固定,不支持动态配置 -- **链接脚本专用**:STM32F407XX_FLASH.ld只适用于特定MCU,移植时需要重写 - -### 4. STM32CubeMX依赖问题 -- **代码耦合**:CubeMX生成的代码与自定义代码紧密混合 -- **重构风险**:重新生成代码可能破坏自定义修改 -- **跨平台限制**:仅支持STM32系列,移植到其他厂商MCU时需要完全重写 - -### 5. 模块设计问题 -- **模块间耦合**:各模块可能与特定硬件紧密绑定 -- **缺少抽象接口**:模块直接调用底层硬件,没有统一抽象层 - -### 6. 系统初始化流程 -- **固定初始化顺序**:初始化流程与STM32F4系列绑定 -- **时钟配置硬编码**:时钟树配置特定于STM32F407 -- **中断向量表专用**:中断向量表配置不具备通用性 - -## 三、改进建议 - -### 1. 增强HAL层通用性 -- **扩展外设支持**:为SPI、I2C、CAN等常用外设提供HAL封装 -- **采用分层设计**:将HAL分为通用层和MCU特定层,通过接口隔离 -- **使用条件编译**:通过宏定义支持不同MCU架构和系列 - -### 2. 改进BSP设计 -- **实现板级抽象**:通过配置文件定义硬件资源,支持多板子配置 -- **采用配置驱动**:使用结构体或配置文件描述板级硬件,运行时初始化 -- **标准化BSP接口**:为不同板子提供统一的BSP API - -### 3. 优化构建系统 -- **灵活工具链配置**:支持多种编译器和架构,通过CMake变量动态配置 -- **模块化链接脚本**:设计可拼接的链接脚本,根据目标MCU自动生成 -- **参数化MCU标志**:将-mcpu、-mfpu等标志改为可配置项 - -### 4. 减少CubeMX依赖 -- **分离生成代码与自定义代码**:将CubeMX生成的代码放在独立目录,通过接口调用 -- **实现抽象初始化层**:封装系统初始化,减少对CubeMX代码的直接依赖 -- **支持手动配置**:允许不使用CubeMX,通过手动配置实现系统初始化 - -### 5. 改进模块设计 -- **增强模块独立性**:减少模块间耦合,每个模块只依赖HAL接口 -- **统一模块接口**:为所有模块设计一致的初始化、配置和使用接口 -- **支持动态配置**:允许模块在运行时重新配置,适应不同硬件 - -### 6. 优化系统初始化 -- **可配置初始化顺序**:支持自定义初始化顺序,适应不同硬件需求 -- **抽象时钟配置**:设计通用时钟配置接口,支持不同MCU的时钟树 -- **动态中断向量表**:实现可重定向的中断向量表,支持不同MCU架构 - -### 7. 完善文档和测试 -- **编写移植指南**:详细说明移植步骤和注意事项 -- **开发测试套件**:提供基础功能测试,验证移植后的代码正确性 -- **示例移植方案**:提供针对不同MCU的移植示例 - -## 四、优先级排序 - -1. **高优先级**:增强HAL通用性、改进BSP设计、优化构建系统 -2. **中优先级**:减少CubeMX依赖、改进模块设计 -3. **低优先级**:优化系统初始化、完善文档和测试 - -通过以上改进,可以显著提高项目的可移植性,降低移植到不同MCU和开发板时的工作量和风险。 \ No newline at end of file diff --git a/.trae/documents/增强HAL通用性和改进BSP设计.md b/.trae/documents/增强HAL通用性和改进BSP设计.md deleted file mode 100644 index 6e3273e..0000000 --- a/.trae/documents/增强HAL通用性和改进BSP设计.md +++ /dev/null @@ -1,78 +0,0 @@ -# 增强HAL通用性和改进BSP设计实现计划 - -## 一、增强HAL通用性 - -### 1. 完善分层目录结构 -- **现状**:已有基本分层(通用层+MCU特定层),但可进一步优化 -- **改进**: - - 统一架构特定代码的命名规范 - - 确保所有外设驱动都遵循相同的分层模式 - - 添加架构抽象层的接口定义 - -### 2. 增强条件编译支持 -- **现状**:仅支持STM32F4架构 -- **改进**: - - 在`hal.h`中添加更多架构定义(如STM32F1、STM32F7等) - - 实现更灵活的架构选择机制 - - 添加架构兼容性检查 - -### 3. 完善外设封装 -- **现状**:已封装GPIO、UART、Delay,接口基本统一 -- **改进**: - - 增强UART接口,添加多实例支持 - - 完善GPIO配置,添加模式、速度等参数 - - 确保所有外设接口的一致性和完整性 - -## 二、改进BSP设计 - -### 1. 增强通用板级配置结构体 -- **现状**:已有`bsp_board_config_t`,但配置项有限 -- **改进**: - - 扩展配置结构体,支持更多外设类型 - - 添加初始化函数指针,支持动态配置 - - 实现配置的验证机制 - -### 2. 完善抽象UART实例标识符 -- **现状**:已定义UART实例枚举,但实现中可能未完全使用 -- **改进**: - - 确保所有UART操作都通过实例标识符进行 - - 实现UART实例到硬件资源的映射机制 - - 添加实例数量的动态配置 - -### 3. 实现配置驱动方式 -- **现状**:主要使用宏定义进行配置 -- **改进**: - - 实现基于配置结构体的驱动方式 - - 支持多板子配置文件 - - 添加配置加载和切换机制 - -## 三、具体实现步骤 - -### 1. 优化HAL层结构 -- 修改`hal.h`,添加更多架构支持 -- 完善各外设通用接口,确保一致性 -- 增强架构抽象层的定义 - -### 2. 改进BSP配置机制 -- 扩展`bsp_board_config_t`结构体 -- 实现基于配置的初始化流程 -- 添加多板子配置支持 - -### 3. 完善外设驱动实现 -- 增强UART多实例支持 -- 完善GPIO配置选项 -- 确保所有驱动都遵循统一的接口规范 - -### 4. 测试和验证 -- 确保现有功能正常工作 -- 验证多架构支持的正确性 -- 测试配置驱动方式的灵活性 - -## 四、预期成果 - -1. **更通用的HAL层**:支持多种架构,接口统一,易于扩展 -2. **更灵活的BSP设计**:基于配置驱动,支持多板子,便于移植 -3. **更好的代码组织**:清晰的分层结构,统一的命名规范 -4. **更强的可扩展性**:便于添加新外设和支持新架构 - -通过以上改进,将使项目具有更好的可移植性、可扩展性和可维护性,能够更方便地适配不同的硬件平台和应用场景。 \ No newline at end of file diff --git a/.trae/documents/实现W25QXX Flash支持计划.md b/.trae/documents/实现W25QXX Flash支持计划.md deleted file mode 100644 index fdf4280..0000000 --- a/.trae/documents/实现W25QXX Flash支持计划.md +++ /dev/null @@ -1,181 +0,0 @@ -# 实现W25QXX Flash支持计划 - -## 1. 概述 - -本计划旨在为项目添加对W25QXX系列SPI Flash的支持。W25QXX是一款常用的SPI接口Flash芯片,支持多种容量(从4MB到128MB),具有高速读写、擦除功能。 - -## 2. 实现架构 - -按照项目现有的分层架构,实现将分为以下几个层次: - -- **HAL层**:实现SPI硬件抽象层,提供统一的SPI接口 -- **Module层**:实现W25QXX Flash的驱动逻辑 - -## 3. 实现步骤 - -### 3.1 实现SPI HAL抽象层 - -#### 3.1.1 创建SPI HAL头文件 - -创建`HAL/Inc/hal_spi.h`,定义SPI的统一接口: - -- SPI实例枚举 -- SPI配置结构体(模式、波特率、极性、相位等) -- SPI操作函数声明(初始化、发送、接收、传输等) - -#### 3.1.2 实现SPI HAL通用层 - -创建`HAL/Src/hal_spi.c`,实现通用的SPI接口,通过条件编译调用不同架构的具体实现。 - -#### 3.1.3 实现STM32F4的SPI特定实现 - -创建`HAL/Src/arch/stm32f4/hal_stm32f4_spi.c`和`HAL/Inc/arch/stm32f4/hal_stm32f4_spi.h`,实现STM32F4系列的SPI具体驱动。 - -### 3.2 实现W25QXX Flash驱动 - -#### 3.2.1 创建W25QXX头文件 - -创建`Modules/w25qxx/inc/w25qxx.h`,定义: - -- W25QXX配置结构体 -- W25QXX命令定义 -- W25QXX操作函数声明(初始化、读取ID、读写数据、擦除等) - -#### 3.2.2 实现W25QXX驱动 - -创建`Modules/w25qxx/src/w25qxx.c`,实现W25QXX的具体驱动逻辑: - -- 初始化函数 -- 读取设备ID -- 读取数据 -- 写入数据 -- 扇区擦除 -- 块擦除 -- 芯片擦除 -- 等待操作完成 - -### 3.3 更新CMake配置 - -- 更新`HAL/CMakeLists.txt`,添加SPI HAL的编译配置 -- 更新`Modules/CMakeLists.txt`,添加W25QXX模块的编译配置 - -## 4. 详细设计 - -### 4.1 SPI HAL接口设计 - -```c -// SPI实例枚举 -typedef enum { - HAL_SPI_INSTANCE_1 = 0, - HAL_SPI_INSTANCE_2, - HAL_SPI_INSTANCE_3, - HAL_SPI_INSTANCE_4, - HAL_SPI_INSTANCE_5, - HAL_SPI_INSTANCE_6, - HAL_SPI_INSTANCE_MAX -} hal_spi_instance_t; - -// SPI模式枚举 -typedef enum { - HAL_SPI_MODE_MASTER = 0, - HAL_SPI_MODE_SLAVE -} hal_spi_mode_t; - -// SPI时钟极性枚举 -typedef enum { - HAL_SPI_POLARITY_LOW = 0, - HAL_SPI_POLARITY_HIGH -} hal_spi_polarity_t; - -// SPI时钟相位枚举 -typedef enum { - HAL_SPI_PHASE_1EDGE = 0, - HAL_SPI_PHASE_2EDGE -} hal_spi_phase_t; - -// SPI数据大小枚举 -typedef enum { - HAL_SPI_DATABITS_8 = 0, - HAL_SPI_DATABITS_16 -} hal_spi_databits_t; - -// SPI配置结构体 -typedef struct { - hal_spi_instance_t instance; - hal_spi_mode_t mode; - uint32_t baudrate; - hal_spi_polarity_t polarity; - hal_spi_phase_t phase; - hal_spi_databits_t databits; -} hal_spi_config_t; - -// SPI操作函数 -typedef void (*hal_spi_init_func_t)(void); -typedef void (*hal_spi_config_func_t)(const hal_spi_config_t *config); -typedef void (*hal_spi_send_func_t)(hal_spi_instance_t instance, const uint8_t *data, size_t length); -typedef size_t (*hal_spi_receive_func_t)(hal_spi_instance_t instance, uint8_t *data, size_t length); -typedef void (*hal_spi_transmit_func_t)(hal_spi_instance_t instance, const uint8_t *tx_data, uint8_t *rx_data, size_t length); -``` - -### 4.2 W25QXX驱动接口设计 - -```c -// W25QXX设备ID结构体 -typedef struct { - uint8_t manufacturer_id; - uint8_t device_id; - uint32_t capacity; -} w25qxx_id_t; - -// W25QXX配置结构体 -typedef struct { - hal_spi_instance_t spi_instance; - hal_gpio_port_t cs_port; - hal_gpio_pin_t cs_pin; -} w25qxx_config_t; - -// W25QXX实例结构体 -typedef struct { - w25qxx_config_t config; - w25qxx_id_t id; - uint8_t initialized; -} w25qxx_t; - -// W25QXX操作函数 -void w25qxx_init(w25qxx_t *instance, const w25qxx_config_t *config); -void w25qxx_read_id(w25qxx_t *instance, w25qxx_id_t *id); -void w25qxx_read_data(w25qxx_t *instance, uint32_t addr, uint8_t *data, size_t length); -void w25qxx_write_data(w25qxx_t *instance, uint32_t addr, const uint8_t *data, size_t length); -void w25qxx_erase_sector(w25qxx_t *instance, uint32_t sector_addr); -void w25qxx_erase_block(w25qxx_t *instance, uint32_t block_addr); -void w25qxx_erase_chip(w25qxx_t *instance); -void w25qxx_wait_busy(w25qxx_t *instance); -``` - -## 5. 实现顺序 - -1. 实现SPI HAL抽象层(通用接口) -2. 实现STM32F4的SPI具体实现 -3. 实现W25QXX Flash驱动模块 -4. 更新CMake配置 -5. 编写测试代码验证功能 - -## 6. 预期成果 - -- 项目支持SPI接口的硬件抽象 -- 实现W25QXX Flash的完整驱动 -- 支持W25QXX的读写、擦除等功能 -- 提供易用的API接口,方便上层应用调用 - -## 7. 注意事项 - -- 确保SPI HAL接口与现有GPIO、UART接口风格保持一致 -- W25QXX驱动应支持不同容量的芯片自动检测 -- 实现应考虑错误处理和边界情况 -- 测试时应覆盖各种操作场景,确保稳定性 - -## 8. 资源需求 - -- 参考W25QXX的数据手册 -- 参考STM32F4的SPI硬件手册 -- 现有项目的GPIO、UART驱动代码作为参考 \ No newline at end of file diff --git a/.trae/documents/实现更方便的板级移植方案.md b/.trae/documents/实现更方便的板级移植方案.md deleted file mode 100644 index 55b06bd..0000000 --- a/.trae/documents/实现更方便的板级移植方案.md +++ /dev/null @@ -1,67 +0,0 @@ -# 实现更方便的板级移植方案 - -## 当前项目问题分析 -1. 驱动模块(如LED、Delay)直接依赖STM32 HAL库,移植到其他平台需要修改模块代码 -2. 硬件配置分散在各个文件中,移植时需要修改多处 -3. 没有统一的板级支持包(BSP)概念 -4. 驱动模块与硬件平台耦合度高 - -## 改进方案 - -### 1. 引入板级支持包(BSP)架构 -- 创建`BSP`目录,用于存放板级相关代码 -- 实现分层架构:应用层 -> 驱动层 -> 硬件抽象层 -> 硬件平台 -- 集中管理硬件资源配置 - -### 2. 实现硬件抽象层(HAL) -- 创建`HAL`目录,定义统一的硬件接口 -- 使驱动模块依赖于抽象HAL而非具体硬件平台 -- 支持不同硬件平台的适配 - -### 3. 统一硬件配置管理 -- 创建板级配置文件,集中管理硬件资源映射 -- 使用宏定义或配置结构体管理硬件参数 -- 支持编译时配置切换 - -### 4. 统一硬件初始化接口 -- 实现统一的硬件初始化函数 -- 支持模块化初始化 -- 简化移植时的初始化流程 - -## 实施步骤 - -### 步骤1:创建项目目录结构 -- 创建`BSP`目录及子目录 -- 创建`HAL`目录及子目录 -- 调整现有模块结构 - -### 步骤2:实现硬件抽象层 -- 定义统一的GPIO抽象接口 -- 定义统一的延时抽象接口 -- 实现STM32平台的HAL适配 - -### 步骤3:修改现有驱动模块 -- 修改LED模块,使其依赖抽象HAL -- 修改Delay模块,使其依赖抽象HAL -- 移除直接的STM32 HAL依赖 - -### 步骤4:创建板级配置文件 -- 创建`bsp_config.h`,集中管理硬件资源映射 -- 实现硬件资源的宏定义或结构体配置 -- 支持不同板型的配置切换 - -### 步骤5:实现板级初始化函数 -- 创建`bsp_init.c/h`,实现统一的硬件初始化 -- 支持模块化初始化 -- 简化应用层初始化流程 - -### 步骤6:更新构建系统 -- 修改CMakeLists.txt,添加BSP和HAL目录 -- 实现条件编译,支持不同平台 - -## 预期效果 -1. 驱动模块与硬件平台解耦,移植时只需修改HAL适配层 -2. 硬件配置集中管理,移植时只需修改板级配置文件 -3. 统一的初始化接口,简化移植流程 -4. 支持多平台编译,提高代码复用性 -5. 清晰的分层架构,便于维护和扩展 \ No newline at end of file diff --git a/.trae/documents/将驱动部分实现为Rust的解耦化方案.md b/.trae/documents/将驱动部分实现为Rust的解耦化方案.md deleted file mode 100644 index 87a2508..0000000 --- a/.trae/documents/将驱动部分实现为Rust的解耦化方案.md +++ /dev/null @@ -1,103 +0,0 @@ -# 将驱动部分实现为Rust的解耦化方案 - -## 项目分析 - -当前项目使用C语言实现了一个基于STM32F407VET6的嵌入式系统,包含以下结构: -- **APP/**: 应用层代码,包含main.c -- **BSP/**: 板级支持包,包含各种驱动实现 -- **Core/**: 核心系统代码,包含HAL配置 -- **Drivers/**: 底层驱动,包含CMSIS等 - -驱动实现特点: -- 模块化的BSP系统,通过bsp_module.h定义了模块类型和操作 -- 统一的驱动初始化接口bsp_init() -- 使用HAL层作为底层硬件抽象 - -## 实现目标 - -将驱动部分实现为Rust,保持与现有C代码的兼容性,实现: -- 底层C代码 → Rust驱动层 → 上层C代码的架构 -- 解耦化使用,使驱动可独立编译和测试 -- 利用Rust的内存安全特性提高系统稳定性 - -## 实现步骤 - -### 1. 创建Rust项目结构 - -1. **创建Rust库项目** - - 在项目根目录创建`rust-drivers`目录 - - 初始化Rust库:`cargo init --lib rust-drivers` - -2. **配置Cargo.toml** - - 添加必要的依赖 - - 配置为静态库输出 - - 设置目标架构为ARM Cortex-M4 - -### 2. 实现Rust驱动核心 - -1. **定义C兼容接口** - - 使用`#[no_mangle]`和`extern "C"`定义C可调用的函数 - - 保持与现有BSP接口一致 - -2. **实现驱动模块** - - LED驱动 - - 按键驱动 - - W25QXX Flash驱动 - - 以太网驱动 - - 其他必要的驱动 - -3. **封装HAL层** - - 创建Rust绑定到现有的C HAL接口 - - 提供类型安全的Rust API - -### 3. 构建系统集成 - -1. **修改CMake配置** - - 添加Rust编译步骤 - - 链接Rust生成的静态库 - -2. **创建构建脚本** - - 自动处理Rust依赖和编译 - - 确保与现有C构建流程兼容 - -### 4. 测试与验证 - -1. **单元测试** - - 为Rust驱动编写单元测试 - - 验证基本功能 - -2. **集成测试** - - 确保与现有C代码的兼容性 - - 验证完整系统功能 - -### 5. 优化与改进 - -1. **性能优化** - - 减少FFI调用开销 - - 优化Rust代码性能 - -2. **安全性改进** - - 利用Rust的所有权系统确保内存安全 - - 防止常见的嵌入式系统错误 - -## 技术要点 - -- **FFI使用**:正确处理Rust与C之间的数据转换 -- **内存管理**:确保Rust和C代码之间的内存安全 -- **中断处理**:正确处理嵌入式系统中的中断 -- **构建系统**:确保Rust和C代码能够无缝集成 - -## 预期成果 - -- 保持现有C代码的完整性和兼容性 -- 提供类型安全、内存安全的Rust驱动实现 -- 实现驱动的解耦化,便于独立开发和测试 -- 提高系统的整体稳定性和可靠性 - -## 风险评估 - -- **构建复杂性**:需要同时管理C和Rust的构建流程 -- **性能开销**:FFI调用可能带来一定的性能开销 -- **学习曲线**:需要熟悉Rust和嵌入式开发的结合 - -通过合理的设计和实现,可以将这些风险降到最低,同时充分利用Rust的优势来提高系统质量。 \ No newline at end of file diff --git a/.trae/documents/添加LAN8720以太网驱动实现.md b/.trae/documents/添加LAN8720以太网驱动实现.md deleted file mode 100644 index 3b857d2..0000000 --- a/.trae/documents/添加LAN8720以太网驱动实现.md +++ /dev/null @@ -1,49 +0,0 @@ -# 添加LAN8720以太网驱动实现计划 - -## 1. 项目分析 -- 项目使用模块化BSP结构和HAL抽象层 -- 已有的BSP配置中包含以太网功能标志(BSP_BOARD_FEATURE_ETH) -- STM32F4xx_HAL_Driver中已包含以太网驱动源码 -- 需要添加LAN8720 PHY芯片的支持 - -## 2. 实现步骤 - -### 2.1 HAL层扩展 -- 在`HAL/Inc`目录添加`hal_eth.h`头文件,定义以太网接口 -- 在`HAL/Src`目录添加`hal_eth.c`实现文件 -- 在`HAL/Inc/arch/stm32f4`目录添加`hal_stm32f4_eth.h` -- 在`HAL/Src/arch/stm32f4`目录添加`hal_stm32f4_eth.c`实现 - -### 2.2 BSP层扩展 -- 在`bsp_board.h`中添加以太网配置结构 -- 在`bsp_board.h`的初始化函数结构中添加以太网初始化函数指针 -- 在`stm32f407vet6_board.c`中添加以太网硬件配置 - -### 2.3 LAN8720驱动实现 -- 在`BSP/Inc`目录添加`bsp_eth.h`头文件 -- 在`BSP/Src`目录添加`bsp_eth.c`实现文件 -- 实现LAN8720 PHY芯片的初始化和配置 -- 实现以太网接口的基本操作函数 - -### 2.4 系统配置修改 -- 修改`stm32f4xx_hal_conf.h`,启用以太网模块 -- 修改系统时钟配置,确保以太网时钟正确设置 -- 在`bsp_init.c`中添加以太网初始化调用 - -### 2.5 主程序集成 -- 在`main.c`中添加以太网初始化代码 -- 实现基本的以太网功能测试(如MAC地址获取、链路状态检测) -- 添加以太网相关的日志输出 - -## 3. 技术要点 -- LAN8720 PHY芯片使用RMII接口 -- 需要正确配置以太网相关的GPIO引脚 -- 实现PHY芯片的复位和初始化流程 -- 配置以太网MAC控制器和PHY芯片的通信 -- 集成到现有的BSP和HAL架构中 - -## 4. 预期成果 -- 成功初始化LAN8720以太网模块 -- 能够检测以太网链路状态 -- 能够获取和设置MAC地址 -- 为后续的TCP/IP协议栈集成做好准备 \ No newline at end of file