diff --git a/LD/gd32e23x_flash.ld b/LD/gd32e23x_flash.ld index 405de65..f48d452 100644 --- a/LD/gd32e23x_flash.ld +++ b/LD/gd32e23x_flash.ld @@ -12,8 +12,8 @@ _Min_Stack_Size = 0x400; /* required amount of stack */ /* Memories definition */ MEMORY { - FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 16K - RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 4K + FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 64K + RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 8K } /* Sections */ diff --git a/README.md b/README.md index 1470ef5..9abd42b 100644 --- a/README.md +++ b/README.md @@ -1,396 +1,256 @@ -# GD32E23x 工程模板 +# LA-T8 推杆驱动控制固件 -本仓库为兆易创新 GD32E23x 系列 MCU 的 CMake + VSCode 工程模板,适合嵌入式开发快速上手和团队协作。 +本工程是 LA-T8-12-5-50/105-188 电动推杆的控制板驱动固件,基于 GD32E230F8(Cortex-M23)开发,使用 CMake + VSCode + ARM GCC 构建。 + +当前为调试工程:不配合 Bootloader,Flash 从 `0x08000000` 全量使用,链接脚本已放开为 F8 的完整 `64KB Flash / 8KB RAM`。 --- ## 目录 -- [适用范围](#适用范围) -- [默认配置](#默认配置) -- [快速开始](#快速开始) +- [推杆型号说明](#推杆型号说明) +- [硬件资源](#硬件资源) +- [控制原理](#控制原理) +- [串口协议](#串口协议) +- [命令表](#命令表) +- [工程配置](#工程配置) - [工程结构](#工程结构) -- [板级配置](#板级配置) -- [Flash 偏移配置(配合 Bootloader)](#flash-偏移配置配合-bootloader) -- [工具链准备](#工具链准备) -- [使用说明](#使用说明) -- [时钟配置说明](#时钟配置说明) -- [vcpkg 依赖管理(可选)](#vcpkg-依赖管理可选) +- [编译与烧录](#编译与烧录) +- [调试](#调试) +- [已知限制](#已知限制) --- -## 适用范围 +## 推杆型号说明 -- 适用于兆易创新 GD32E23x 系列 Cortex-M23 内核单片机 -- 支持标准外设库开发 -- 推荐开发环境:VSCode + CMake + ARM GCC 工具链 +型号:`LA-T8-12-5-50/105-188` + +| 型号片段 | 常见含义 | +|---|---| +| `LA-T8` | LA-T8 系列微型电动推杆 | +| `12` | 额定输入电压 12VDC | +| `5` | 空载速度约 5mm/s | +| `50` | 行程 50mm | +| `105` | 最小安装距约 105mm(该系列常见 Lmin ≈ 54.5mm + 行程) | +| `188` | 额定推/拉力约 188N | + +> 型号对应参数以推杆实物铭牌或厂家规格书为准。本固件只输出 PWM 与方向信号,不采集推杆位置、限位或电流反馈。 --- -## 默认配置 +## 硬件资源 -- MCU 主频:内部 RC 振荡器,系统时钟配置为 72MHz -- 调试串口:USART0(PA2 TX / PA3 RX),115200 波特率 -- I2C:默认硬件 I2C0(PF0 SDA / PF1 SCL),可通过 `board_config.h` 切换为软件 I2C +| 功能 | 引脚 / 外设 | 说明 | +|---|---|---| +| 主控 | GD32E230F8 | Cortex-M23,64KB Flash,8KB RAM | +| 系统时钟 | IRC8M + PLL | 72MHz | +| 推杆 CH1 | PA10 / TIMER0_CH2 + PF0 方向 | 通道 0 | +| 推杆 CH2 | PA9 / TIMER0_CH1 + PF1 方向 | 通道 1 | +| 通信口 | PA2 TX / PA3 RX | F8 自动选择 USART1,115200 8N1 | +| RS485 DE | PA1 | AF1,由 RS485 PHY 自动控制方向 | +| 状态 LED | PB1 | 低电平点亮 | +| 地址配置 | PA0 / PA4 / PA5 / PA6 | 当前已定义宏,暂未参与控制逻辑 | +| 调试通道 | SWD + SEGGER RTT | 不占用 UART 引脚 | --- -## 快速开始 +## 控制原理 -### 基于模板创建新项目 +推杆驱动使用 TIMER0 输出两路 PWM,占空比范围为 `0 ~ 1000`: -1. **克隆或复制本仓库** - ```bash - git clone https://gitea.hulk.wang/hulk/gd32e23x_template_cmake_vscode.git my-new-project - cd my-new-project - ``` +```text +Timer 时钟 = 72MHz / (prescaler 2 + 1) = 24MHz +PWM 频率 = 24MHz / (period 999 + 1) = 24kHz +``` -2. **修改项目配置** — 编辑 `cmake/project_config.cmake`: - ```cmake - set(PROJECT_NAME "MyProject") # 项目名称 - set(BOARD_TYPE_CODE 20) # 板卡类型码(协议帧中的标识) - set(VERSION_MAJOR 1) # 主版本号 - set(VERSION_MINOR 0) # 次版本号 - set(VERSION_PATCH 0) # 修订号 - set(BUILD_VARIANT "APP") # 编译变体 - ``` +当前实现: -3. **添加业务源文件** — 编辑 `CMakeLists.txt`,在 `TARGET_SRC` 中添加你的 `.c` 文件。 +| 命令 | 方向引脚 | PWM | +|---|---|---| +| M3 推出 | 低 | 占空比 = `duty` | +| M4 拉回 | 高 | 占空比 = `1000 - duty` | +| M5 停止 | 高 | 输出置为停止状态 | -4. **配置板级引脚** — 编辑 `Inc/board_config.h`,修改 I2C、UART、LED 等引脚定义。 +`duty` 越大表示电机获得的有效功率越大,实际推杆速度还受负载、电压和推杆本身特性影响。 -5. **编译** - ```bash - cmake --preset Debug - cmake --build build/Debug - ``` - 产物在 `build/Debug/` 下,包含 `.elf`、`.hex`、`.bin`、`.map`、`.list`。 +--- -### 分支说明 +## 串口协议 -| 分支 | 用途 | -|------|------| -| `template_pc` | **主模板**(推荐),用于桌面端 VSCode 开发 | -| `template_xl` | 小琅适配版 | -| `main` | 早期版本,不推荐使用 | +通信口为 RS485,默认 `115200, 8N1`。协议帧最大长度为 32 字节。 + +### 主机 -> 设备命令帧 + +```text +D5 01 LEN CMD... CRC +``` + +| 字节 | 含义 | +|---|---| +| `D5` | 包头 | +| `01` | 板卡类型标识(协议帧类型,与 M999 返回的工程代号不同) | +| `LEN` | `CMD` 区字节数 | +| `CMD` | 命令内容,如 `M3P0S500` | +| `CRC` | 从索引 1 到倒数第 2 字节的累加和,取低 8 位 | + +示例:`M3P0S500` 完整帧 + +```text +D5 01 08 4D 33 50 30 53 35 30 30 F1 +``` + +### 设备 -> 主机响应帧 + +```text +B5 TYPE LEN DATA... CRC +``` + +| TYPE | 含义 | +|---|---| +| `F0` | 成功 | +| `F1` | CRC 错误 | +| `F2` | 包头错误 | +| `F3` | 板卡类型错误 | +| `F4` | 长度错误 | +| `FD` | 参数错误 | +| `FE` | 命令错误 | +| `FF` | 通用错误 | + +--- + +## 命令表 + +| 命令 | 参数 | 说明 | +|---|---|---| +| `M3P{ch}S{duty}` | `ch=0/1`,`duty=0~1000` | 推杆推出 | +| `M4P{ch}S{duty}` | `ch=0/1`,`duty=0~1000` | 推杆拉回 | +| `M5P{ch}` | `ch=0/1` | 停止指定通道 | +| `M999` | 无 | 返回固件版本 | +| `M888` | 无 | 软件复位(当前已注释停用) | +| `M9999` | 无 | 进入 Bootloader(当前已注释停用) | + +命令示例: + +```text +M3P0S500 // CH1 推出,占空比 500 +M4P1S1000 // CH2 拉回,占空比 1000 +M5P0 // CH1 停止 +M999 // 返回版本信息 +``` + +`M999` 当前返回格式为 `v{工程代号}.{主版本}.{次版本}.{修订号}`,当前工程为 `v51.0.0.1`。 + +--- + +## 工程配置 + +### 项目元信息 + +配置文件:[cmake/project_config.cmake](E:/Hulk_Coding/actuator_ctrl/cmake/project_config.cmake) + +| 配置项 | 当前值 | +|---|---| +| `PROJECT_NAME` | `actuator` | +| `BOARD_TYPE_CODE` | `51` | +| `VERSION` | `V0.0.1` | +| `BUILD_VARIANT` | `APP` | + +### 功能开关 + +配置文件:[Inc/board_config.h](E:/Hulk_Coding/actuator_ctrl/Inc/board_config.h) + +| 宏 | 当前值 | 说明 | +|---|:---:|---| +| `RS485_MODE` | `ENABLE` | 使能 RS485 通信与 DE 引脚 | +| `SEGGER_RTT_DETECTION` | `ENABLE` | 使能 SEGGER RTT 调试输出 | +| `DEBUG_MODE` | `DISABLE` | 关闭 printf 串口调试 | +| `COM_DEBUG` | `DISABLE` | 关闭命令帧调试打印 | +| `DEBUG_VERBOSE` | `DISABLE` | 关闭详细调试信息 | +| `SOFTWARE_IIC` | `DISABLE` | I2C 未参与当前推杆控制逻辑 | + +### 链接脚本 + +配置文件:[LD/gd32e23x_flash.ld](E:/Hulk_Coding/actuator_ctrl/LD/gd32e23x_flash.ld) + +```text +FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 64K +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 8K +``` + +当前为独立调试固件,不从 Bootloader 偏移启动,向量表偏移保持 `0x00`。 --- ## 工程结构 -``` +```text . ├── CMakeLists.txt # 主构建文件 -├── CMakePresets.json # CMake 预设(Debug/Release) -├── cmake/ -│ ├── arm-none-eabi-gcc.cmake # ARM GCC 工具链配置 -│ ├── project.cmake # 编译选项(-Os/-O0, -mcpu=cortex-m23) -│ ├── project_config.cmake # 项目名/版本号/编译变体 -│ └── version.h.in # 自动生成固件版本头 -├── Inc/ # 头文件 -│ ├── board_config.h # 板级引脚定义 + 功能开关 +├── CMakePresets.json # Debug / Release 预设 +├── cmake/ # 工具链与版本配置 +├── Inc/ +│ ├── board_config.h # 引脚、外设与功能开关 +│ ├── actuator.h # 推杆驱动接口 │ ├── command.h # 串口命令协议 -│ ├── i2c.h / led.h / systick.h / uart.h -│ └── uart_ring_buffer.h / gd32e23x_it.h / gd32e23x_libopt.h -├── Src/ # 源码 -│ ├── main.c # 入口函数 -│ ├── command.c # 命令解析处理 -│ ├── board_config.c # MCU 型号自动检测 -│ ├── i2c.c / led.c / systick.c / uart.c / uart_ring_buffer.c -│ └── gd32e23x_it.c / system_gd32e23x.c / syscalls.c -├── SDK/ -│ ├── CMSIS/ # ARM CMSIS Core (Cortex-M23) + GD 启动文件 -│ └── GD32E23x_standard_peripheral/ # GD32 标准外设库 +│ └── ... +├── Src/ +│ ├── main.c # 主循环 +│ ├── actuator.c # PWM / 方向控制 +│ ├── command.c # 协议解析与命令处理 +│ ├── uart.c # RS485 / UART 初始化 +│ └── ... +├── SDK/ # CMSIS 与 GD32 标准外设库 ├── LD/gd32e23x_flash.ld # 链接脚本 -├── doc/ # 芯片数据手册 -└── .vscode/ # VSCode 调试/烧录配置 +├── doc/ # GD32E230 数据手册与技术文档 +└── .vscode/ # 编译、烧录、调试任务 ``` --- -## 板级配置(`Inc/board_config.h`) - -所有功能开关和引脚定义集中在 `Inc/board_config.h`。功能开关均为单行数值宏:将右侧的 `ENABLE` 或 `DISABLE` 改为另一值即可;其中 `ENABLE` 为 `1`,`DISABLE` 为 `0`。以下为完整的宏开关说明和推荐使用方式。 - -### 功能开关速查表 - -| 宏 | 作用 | 默认值 | Release 建议 | -|---|------|:---:|:---:| -| `SOFTWARE_IIC` | I2C 实现方式 | `DISABLE`(硬件) | `DISABLE` | -| `DEBUG_MODE` | printf 串口输出 | `DISABLE` | `DISABLE` | -| `COM_DEBUG` | 命令帧调试打印 | `DISABLE` | `DISABLE` | -| `DEBUG_VERBOSE` | 详细调试信息 | `DISABLE` | `DISABLE` | -| `SEGGER_RTT_DETECTION` | SEGGER RTT 支持 | `ENABLE` | `DISABLE` | - ---- - -### `SOFTWARE_IIC` — I2C 实现方式 - -选择 I2C 使用硬件外设还是软件 GPIO 模拟。 - -> 当前工程尚未实现 `SOFTWARE_IIC` 的条件编译驱动选择;该宏已迁移为数值配置,但改值不会在此版本切换 I2C 实现。 - -```c -#define SOFTWARE_IIC DISABLE // DISABLE: 硬件 I2C(默认);ENABLE: 软件 I2C(GPIO 模拟) -``` - -| 选项 | 优点 | 缺点 | -|------|------|------| -| 硬件 I2C | DMA 支持、CPU 占用低 | 仅限固定引脚、调试复杂 | -| 软件 I2C | 任意 GPIO、移植方便 | CPU 占用高、速率受限 | - -> 切换后需同步修改下方 I2C 引脚定义。 - ---- - -### `DEBUG_MODE` — 调试模式 - -开启后 USART0 输出 printf 调试信息。**Release 固件必须关闭。** - -```c -#define DEBUG_MODE DISABLE // DISABLE: 关闭(默认);ENABLE: 开启调试输出 -``` - -**影响范围:** -- 使能 `USART0` 初始化和 `printf` 重定向到串口 -- 会占用 PA2/PA3 引脚和 USART0 硬件资源 -- 增加 ROM 约 2~4KB(取决于 printf 调用量) - ---- - -### `COM_DEBUG` — 命令帧调试打印 - -开启后串口命令解析过程打印每帧的详细内容(地址、长度、数据、校验)。**仅调试通信协议时开启。** - -```c -#define COM_DEBUG DISABLE // DISABLE: 关闭(默认);ENABLE: 开启命令帧调试 -``` - -**依赖:** 需要先开启 `DEBUG_MODE`,否则输出无法外发。 - -**输出示例:** -```text -[CMD] ADDR=01 LEN=05 DATA: AA BB CC DD EE CHK=OK -``` - -> ⚠️ Release 必须关闭,否则大量串口输出会严重拖慢主循环。 - ---- - -### `DEBUG_VERBOSE` — 详细调试信息 - -在 `DEBUG_MODE` 基础上输出更底层的信息,如 I2C 总线扫描结果、MCU 型号识别等。 - -```c -#define DEBUG_VERBOSE DISABLE // DISABLE: 关闭(默认);ENABLE: 开启详细调试 -``` - -**额外输出:** -- 启动时打印 MCU Flash 容量检测结果 -- I2C 初始化时扫描总线上的设备地址 -- 其他诊断信息 - -> 依赖 `DEBUG_MODE`,开启后 ROM 进一步增加约 1~2KB。 - ---- - -### `SEGGER_RTT_DETECTION` — SEGGER RTT 支持 - -RTT(Real-Time Transfer)是 SEGGER 的调试通道技术,通过 SWD 接口传输数据,不占用串口引脚,速度远超 UART。 - -```c -#define SEGGER_RTT_DETECTION ENABLE // DISABLE: 禁用 RTT;ENABLE: 启用 RTT(默认) -``` - -**启用时:** -- 自动包含 `SEGGER_RTT.h`,提供 `RTT_printf` / `RTT_WriteString` / `RTT_PutChar` 宏 -- `SDK/SEGGER_RTT/` 模块参与编译和链接 -- 可用 J-Link RTT Viewer 或 VSCode + cortex-debug 查看实时日志 - -**禁用时:** -- 应用层 RTT 头文件引用与调用代码均在预处理阶段排除 -- RTT 宏展开为空操作;应用目标不生成 RTT 调用代码 -- 为保持现有 CMake SDK 加载方式,`SDK/SEGGER_RTT/` 仍会参与构建;静态库中未被引用的对象不会被链接器提取 - -> **Release 建议关闭** — RTT 依赖调试器连接,量产固件中无意义且占用 ROM。 - -**依赖关系总览:** -``` -COM_DEBUG ──── 依赖 ──→ DEBUG_MODE -DEBUG_VERBOSE ─ 依赖 ──→ DEBUG_MODE -SEGGER_RTT_DETECTION ─ 独立,与 DEBUG_MODE 并行 -``` - ---- - -### 引脚定义 - -所有引脚宏集中在 `board_config.h` 尾部,按需修改: - -```c -/* I2C */ -#define I2C_SCL_PORT GPIOF -#define I2C_SCL_PIN GPIO_PIN_1 -#define I2C_SDA_PORT GPIOF -#define I2C_SDA_PIN GPIO_PIN_0 - -/* LED */ -#define LED_RCU RCU_GPIOB -#define LED_PORT GPIOB -#define LED_PIN GPIO_PIN_1 - -/* UART */ -#define UART_GPIO_PORT GPIOA -#define UART_TX_PIN GPIO_PIN_2 -#define UART_RX_PIN GPIO_PIN_3 -#define UART_BAUDRATE 115200U -``` - -### MCU 型号自动检测 - -`board_config.c` 中的 `mcu_detect_and_config()` 上电自动识别 GD32E230 的 Flash 容量(F4=16K / F6=32K / F8=64K),结果存入全局变量 `g_mcu_flash_size`,并自动选择对应的 UART 外设(USART0 或 USART1)。 - ---- - -## Flash 偏移配置(配合 Bootloader) - -如果固件需要通过 Bootloader 启动(Bootloader 占用 Flash 前部区域),需修改两处: - -**1. 链接脚本** — `LD/gd32e23x_flash.ld` 第 15 行: -```c -// 默认:从 Flash 起始运行 -FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 16K - -// 配合 Bootloader:前 8KB 留给 Bootloader,App 从 0x08002000 开始 -FLASH (rx) : ORIGIN = 0x08002000, LENGTH = 8K -``` - -**2. 向量表偏移** — `Src/system_gd32e23x.c` 第 44 行: -```c -// 默认 -#define VECT_TAB_OFFSET (uint32_t)0x00 - -// 配合 Bootloader(值 = Flash 偏移量,不含 0x0800 前缀) -#define VECT_TAB_OFFSET (uint32_t)0x2000 -``` - -> ⚠️ 两个偏移值必须对应修改:`LD` 中的 `ORIGIN` 减去 `0x08000000` 应等于 `VECT_TAB_OFFSET`。 - ---- - -## 工具链准备 - -### 1. ARM GCC 工具链 - -- **版本**:xpack-arm-none-eabi-gcc-11.3.1-1.1 -- **建议解压路径**:工程根目录下 `Toolchain/xpack-arm-none-eabi-gcc-11.3.1-1.1` -- **官方下载地址**:https://github.com/xpack-dev-tools/arm-none-eabi-gcc-xpack/releases -- **路径自定义**: - 如需自定义工具链路径,修改 `cmake/arm-none-eabi-gcc.cmake` 中的 `_TOOLCHAIN_CANDIDATES` 列表,或通过 CMake 参数传入: - ```bash - cmake --preset Debug -DTOOLCHAIN_DIRECTORY=/your/path/bin - ``` - -### 2. OpenOCD(调试/烧录) - -- **版本**:xpack-openocd-0.11.0-3 -- **建议解压路径**:任意位置(在 `.vscode/launch.json` 中配置路径) -- **获取地址**:https://github.com/burakenez/gd32-tools-xpack-openocd/tree/v0.11.0-3 -- **说明**: - - 本版本提取自 Embedded Builder V1.4.1.23782。 - - ⚠️ 请勿随意更换版本,因 GD32 MCU 支持有限,推荐严格使用此版本。 -- **路径自定义**: - 修改 `.vscode/launch.json` 中 `miDebuggerPath` 和 `serverpath` 指向你的 OpenOCD 路径。 - ---- - -## 使用说明 +## 编译与烧录 ### 编译 -```bash -# Debug 构建(-O0, -g3) -cmake --preset Debug -cmake --build build/Debug - -# Release 构建(-Os, -g0) +```powershell cmake --preset Release -cmake --build build/Release +cmake --build --preset Release +``` + +Debug 版本将 `Release` 换成 `Debug`。构建产物位于 `Build/Release/Application/`: + +```text +Application.elf +Application.hex +Application.bin +Application.map +actuator_V0.0.1_APP_<日期>.hex +actuator_V0.0.1_APP_<日期>.bin ``` ### 烧录 -通过 VSCode 任务栏运行 `Flash MCU` 任务,或命令行: +使用 CMSIS-DAP + OpenOCD: -```bash -openocd -f interface/cmsis-dap.cfg -f target/gd32e23x.cfg -c "program build/Debug/Application.elf verify reset exit" +```powershell +& 'D:\toolchain\openocd\bin\openocd.exe' -s 'D:\toolchain\openocd\scripts' ` + -f 'interface/cmsis-dap.cfg' -f 'target/gd32e23x.cfg' ` + -c 'reset_config srst_only connect_assert_srst; init; reset halt; flash write_image erase Build/Release/Application/Application.elf; reset; exit' ``` -### 产物 - -编译输出位于 `build//`: - -| 文件 | 说明 | -|------|------| -| `Application.elf` | ELF 固件(调试用) | -| `{项目名}_{版本}_{编译条件}_{日期}.hex` | Hex 文件 | -| `{项目名}_{版本}_{编译条件}_{日期}.bin` | 二进制文件 | -| `{项目名}_{版本}_{编译条件}_{日期}.list` | 反汇编清单 | -| `{项目名}_{版本}_{编译条件}_{日期}.map` | 内存映射 | +也可以直接在 VSCode 中运行 `Flash MCU` 任务。 --- -## 时钟配置说明 +## 调试 -本工程默认系统时钟为内部 IRC8M 振荡器经 PLL 倍频后的 72MHz。 - -如需修改主频或时钟源,请编辑 `Src/system_gd32e23x.c` 文件: - -1. 查找如下宏定义区: - ```c - // #define __SYSTEM_CLOCK_8M_HXTAL (__HXTAL) - // #define __SYSTEM_CLOCK_8M_IRC8M (__IRC8M) - // #define __SYSTEM_CLOCK_72M_PLL_HXTAL (uint32_t)(72000000) - #define __SYSTEM_CLOCK_72M_PLL_IRC8M_DIV2 (uint32_t)(72000000) - ``` -2. 取消你需要的时钟方案的注释,并注释掉其它方案。 -3. 保存后重新编译工程即可生效。 - -详细时钟初始化流程可参考 `Src/system_gd32e23x.c` 文件中的 `system_clock_config` 及相关函数实现。 +- 使用 `.vscode/launch.json` 中的 `Debug with OpenOCD` 配置进行 SWD 调试。 +- `SEGGER_RTT_DETECTION` 开启时,可通过 RTT Viewer 或 cortex-debug 查看 `RTT_printf` 输出。 +- 当前固件 Release 也保留了 RTT,便于联调;量产固件可关闭该宏以减小 ROM。 --- -## vcpkg 依赖管理(可选) +## 已知限制 -本工程可选支持 vcpkg 作为 C/C++ 工具链和构建工具的自动化依赖管理方案。 - -- 自动下载和管理如 CMake、Ninja 等构建工具,简化环境配置。 -- 可扩展用于第三方 C/C++ 库的统一管理。 - -**启用方法**: -1. 在项目根目录创建 `vcpkg-configuration.json` 文件,内容如下: - - ```json - { - "registries": [ - { - "name": "microsoft", - "location": "https://aka.ms/vcpkg-ce-default", - "kind": "artifact" - }, - { - "name": "arm", - "location": "https://aka.ms/vcpkg-artifacts-arm", - "kind": "artifact" - } - ], - "requires": { - "arm:tools/ninja-build/ninja": "^1.12.0", - "arm:tools/kitware/cmake": "^3.28.4" - } - } - ``` - -2. 启动 VSCode 或命令行,vcpkg 会自动检测并安装所需工具。 - -如不需要 vcpkg,可忽略本文件。 +- 当前固件只控制推杆的 PWM 和方向,不读取推杆位置、限位开关或电流反馈。 +- `M888` 和 `M9999` 当前已在 `Src/command.c` 中注释停用,避免调试时误复位或误进入 Bootloader;需要时取消注释即可恢复。 +- 若后续要配合 Bootloader,需要把 `LD/gd32e23x_flash.ld` 的 Flash 起点改为 Bootloader 之后的地址,并同步修改 `Src/system_gd32e23x.c` 中的 `VECT_TAB_OFFSET`。 diff --git a/Src/command.c b/Src/command.c index e648f06..2329b97 100644 --- a/Src/command.c +++ b/Src/command.c @@ -507,16 +507,16 @@ void handle_command(const uint8_t *frame, uint8_t len) { /* ========================================== * M888 软件重启命令 * ========================================== */ - case 888u: - // 先发送确认响应 - send_response(RESP_TYPE_OK, s_report_status_ok, sizeof(s_report_status_ok)); + // case 888u: + // // 先发送确认响应 + // send_response(RESP_TYPE_OK, s_report_status_ok, sizeof(s_report_status_ok)); - // 短暂延时确保响应发送完成 - delay_ms(100); + // // 短暂延时确保响应发送完成 + // delay_ms(100); - // 执行软件重启 - system_software_reset(); - return; + // // 执行软件重启 + // system_software_reset(); + // return; /* ========================================== * M999 输出固件版本号命令 @@ -545,10 +545,10 @@ void handle_command(const uint8_t *frame, uint8_t len) { /* ========================================== * M9999 进入OTA模式 * ========================================== */ - case 9999u: //M9999: 进入OTA模式 - __disable_irq(); // 关中断,防止竞态条件 - NVIC_SystemReset(); // 触发系统复位,进入Bootloader - return; + // case 9999u: //M9999: 进入OTA模式 + // __disable_irq(); // 关中断,防止竞态条件 + // NVIC_SystemReset(); // 触发系统复位,进入Bootloader + // return; default: send_response(RESP_TYPE_CMD_ERR, s_report_status_err, sizeof(s_report_status_err)); diff --git a/cmake/project_config.cmake b/cmake/project_config.cmake index a63196f..e878abb 100644 --- a/cmake/project_config.cmake +++ b/cmake/project_config.cmake @@ -1,6 +1,6 @@ # Project basic info set(PROJECT_NAME "actuator") -set(BOARD_TYPE_CODE 99) +set(BOARD_TYPE_CODE 51) set(VERSION_MAJOR 0) set(VERSION_MINOR 0) set(VERSION_PATCH 1)