# 原厂固件二次开发 原厂固件二次开发适合希望保留 V81 正式固件现有 USB、SPI、CAN/CAN FD、RS485、SocketCAN、管理口协议和离线批量指令功能,同时增加传感器、扩展串口或客户业务逻辑的用户。 如果需要自行接管 CAN、CAN FD、RS485 或整个通信流程,不需要保留 V81 原厂通信能力,请选择[自定义固件开发](custom_firmware_development)。 ## 下载开发框架 V81 二次开发框架提供 STM32CubeIDE 工程: [查看 V81 原厂固件二次开发框架逐步使用说明](https://gitcode.com/sanpo/robot/blob/main/products/spine/v8/firmware-examples/guides/framework-extension.md) 工程目录为: ```text sanpo_v8_g0b_hse_framework/ ``` 生产 MCU 为 STM32G0B1RCT6,使用外部 8 MHz 晶振。系统时钟和 FDCAN 内核时钟均为 60 MHz。开发框架已经使用 STM32CubeIDE 2.2.0 的 Release 配置完成编译验证,建议优先使用相同版本或经过验证的兼容版本。 ## 可以增加哪些功能 | 功能 | 引脚和外设 | 常见用途 | | --- | --- | --- | | 扩展串口 | USART3,PB10/TX、PB11/RX | 遥控器、无线模块、外部控制器和自定义指令 | | I²C | I2C1,PA9/SCL、PA10/SDA | 姿态、温度、压力等传感器 | | 模拟量 | PB0/ADC1 IN8、PB1/ADC1 IN9 | 电压、压力和其他模拟信号 | | 后台处理 | `CustomerApp_BackgroundTask()` | 状态检查、数据整理和客户业务逻辑 | USB、外部 SPI、板内 SPI、CAN/CAN FD、RS485 和原厂通信任务已经集成,通常不需要修改。完整引脚定义见[接口和引脚说明](board_schematic)。 ## 客户代码位置 客户功能集中在: ```text CustomerApp/ ``` 常用文件和入口如下: - `CustomerApp/Src/customer_protocol.c`:增加 USART3 指令、协议解析和客户业务处理; - `CustomerApp/Src/customer_app.c`:USART3、I2C1、ADC1 和后台任务的框架入口; - `CustomerApp/Inc/customer_app.h`:客户任务和 USART3 发送、统计接口; - `CustomerApp/Inc/customer_protocol.h`:客户协议层回调接口。 默认示例在 USART3 收到 `PING`、`PING\n` 或 `PING\r\n` 后返回: ```text PONG\r\n ``` USART3 默认参数为 `115200-8-N-1`。建议先完成 PING/PONG 测试,再接入客户设备和业务代码。 ## 使用 STM32CubeIDE 1. 安装 STM32CubeIDE,准备 ST-LINK。 2. 选择 `File > Import > Existing Projects into Workspace`。 3. 导入 `sanpo_v8_g0b_hse_framework`。 4. 选择 `Release` 配置,依次执行 Clean 和 Build。 5. 使用 ST-LINK 执行下载并校验,然后重新上电。 原厂通信库位于: ```text Libs/libloop_function_v8_g0.a ``` 该静态库与 V81 发布基线配套。不要替换 MCU 型号、ABI、HAL、FreeRTOS、USB 栈、静态库或链接脚本,也不要把其他版本的通信库复制到本工程。 ## 不要使用 IOC 重新生成代码 该发布工程不是 CubeMX 空白模板: - 发布包不提供 `.ioc`; - 不要执行 CubeMX `Generate Code`; - 不要重新分配原厂 USB、SPI、CAN/CAN FD、RS485 和 FreeRTOS 已使用的资源; - 不要覆盖原厂通信任务、USB 描述符或 HAL 回调链; - 客户功能应优先放在 `CustomerApp` 中。 需要自由修改 IOC、通信外设或启动流程时,请使用[自定义固件开发](custom_firmware_development)中的直接开发工程。 ## 两颗 MCU 和固件空间 开发板上的两颗 STM32G0B1RCT6 型号和引脚配置相同。需要两侧具备相同客户功能时,可以把同一个编译结果通过两个 SWD 接口分别烧录;每颗 MCU 分别管理本地两路 CAN/CAN FD 和两路 RS485。 工程链接脚本把应用程序 Flash 限制为 112 KB。不要扩大该区域或执行全片擦除,否则可能覆盖开发板保存的设备身份、授权信息、通信配置或离线批量任务。烧录要求见[固件更新](firmware_update)。 ## 修改后的验收 每次修改后至少检查: 1. Release 配置编译无错误; 2. 管理口发送 `AT+VER\r\n` 返回 `V81\r\n`; 3. USART3 发送 `PING\r\n` 返回 `PONG\r\n`; 4. USB 透传模式和协议模式均正常; 5. SocketCAN、外部 SPI 和管理口协议正常; 6. 本 MCU 的两路 CAN/CAN FD 和两路 RS485 均能收发; 7. 新增的 USART3、I2C1、ADC1 或传感器功能正常; 8. 两颗 MCU 分别烧录时接口对应正确; 9. 断电重启后原有通信配置仍然保留; 10. 长时间运行没有异常复位、通信中断或明显丢帧。