# 原厂固件二次开发 原厂固件二次开发适合于保留现有 USB/SPI 转 CAN/RS485等功能,同时增加IIC/ADC/串口等传感器外设。 如果需要重新实现 CAN、RS485 或整个通信流程,请选择[自定义固件开发](custom_firmware_development)。 ## 选择开发工具 同一套 V47 二次开发框架提供两个版本: | 开发工具 | 工程入口 | | --- | --- | | STM32CubeIDE | [stm32f407V4_with_socketcan](https://gitcode.com/sanpo/robot/tree/main/products/spine/v4/f407/sdk/stm32f407V4_with_socketcan) | | Keil 5 | [stm32f407V4_with_socketcan_keil](https://gitcode.com/sanpo/robot/tree/main/products/spine/v4/f407/sdk/stm32f407V4_with_socketcan_keil) | 两种工程保留相同的 V47 通信能力,客户扩展入口也保持一致。请选择一种工具开发,不要在两个工程之间混用静态库或工程配置。 ## 可以增加哪些功能 | 功能 | 引脚和外设 | 常见用途 | | --- | --- | --- | | 扩展串口 | USART3,PD8/TX、PD9/RX | 遥控器、无线模块、外部控制器和自定义指令 | | IIC(I²C) | I2C2,PB10/SCL、PB11/SDA | 姿态、温度、压力等传感器 | | 模拟量 | PB0/ADC1 IN8、PB1/ADC2 IN9 | 电压、压力和其他模拟信号 | | 后台处理 | 客户任务入口 | 状态检查、数据整理和简单控制逻辑 | USB、SocketCAN、对外 SPI、CAN 和 RS485 已经集成,通常不需要修改。 ## 客户代码位置 客户功能集中在: ```text CustomerApp/ ``` 常用文件: - `CustomerApp/Src/customer_protocol.c`:增加自己的串口指令和协议解析; - `CustomerApp/Src/customer_app.c`:接入 UART3、IIC、ADC 和后台处理; - `CustomerApp/Inc/`:增加客户功能接口。 默认示例在 USART3 收到 `PING`、`PING\r\n` 或 `PING\n` 后返回: ```text PONG\r\n ``` USART3 默认参数为 `115200-8-N-1`。建议先完成 PING/PONG 测试,再增加自己的设备。 ## 使用 STM32CubeIDE 1. 安装 STM32CubeIDE。 2. 选择 `File > Import > Existing Projects into Workspace`。 3. 导入 `stm32f407V4_with_socketcan`。 4. 选择 `Release` 配置,执行 Clean 和 Build。 5. 使用 ST-LINK 下载并校验,然后重新启动开发板。 原厂通信库位于: ```text Libs/libloop_function_v4.a ``` ## 使用 Keil 5 Keil 工程要求: - Keil MDK 5.43 或更高版本; - Arm Compiler 6.24; - `Keil::STM32F4xx_DFP` 3.1.1; - ST-LINK 调试器。 打开: ```text stm32f407V4_with_socketcan_keil/MDK-ARM/spine_v4_v47_keil.uvprojx ``` 选择 `V47 Release`,按 `F7` 编译。正常结果应为 `0 Error(s), 0 Warning(s)`。 Keil 原厂通信库位于: ```text Libs/libloop_function_v4_keil.lib ``` 不要把 Keil 工程切换到 Arm Compiler 5,也不要与 STM32CubeIDE 工程的 GCC 静态库混用。 ## 烧录和保存数据 开发板上的两颗 STM32 使用相同的客户工程和引脚配置。两侧需要相同功能时,可以把同一个编译结果通过两个 SWD 下载口分别烧录。 烧录时请选择下载并校验,不要执行全片擦除。应用程序应保持在 `0x08000000`~`0x0801FFFF` 范围内,避免覆盖保存通信参数和离线任务的数据。详细说明见[固件更新](firmware_update)。 ## 不要使用 IOC 重新生成代码 这两套发布工程都不是 CubeMX 空白模板: - 发布包不提供 `.ioc` 和 `.mxproject`; - 不要执行 `Generate Code`; - 不要替换 USB、SPI、CAN、RS485、FreeRTOS 和静态库; - 不要重新分配原厂通信已经使用的引脚。 需要自由修改 IOC 和通信接口时,请使用[自定义固件开发](custom_firmware_development)中的样例。 ## 修改后的验收 每次修改后至少检查: 1. 编译无错误和警告; 2. USB 串口发送 `AT+VER\r\n` 返回 `V47\r\n`; 3. USART3 发送 `PING\r\n` 返回 `PONG\r\n`; 4. USB 自定义协议和 SocketCAN 正常; 5. SPI 协议正常; 6. 两路 CAN 和两路 RS485 均能收发; 7. 新增的 UART、IIC、ADC 或传感器功能正常; 8. 断电重启后,原有通信配置仍然保留。