原厂固件二次开发

原厂固件二次开发适合于保留现有 USB/SPI 转 CAN/RS485等功能,同时增加IIC/ADC/串口等传感器外设。

如果需要重新实现 CAN、RS485 或整个通信流程,请选择自定义固件开发

选择开发工具

同一套 V47 二次开发框架提供两个版本:

开发工具

工程入口

STM32CubeIDE

stm32f407V4_with_socketcan

Keil 5

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 已经集成,通常不需要修改。

客户代码位置

客户功能集中在:

CustomerApp/

常用文件:

  • CustomerApp/Src/customer_protocol.c:增加自己的串口指令和协议解析;

  • CustomerApp/Src/customer_app.c:接入 UART3、IIC、ADC 和后台处理;

  • CustomerApp/Inc/:增加客户功能接口。

默认示例在 USART3 收到 PINGPING\r\nPING\n 后返回:

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 下载并校验,然后重新启动开发板。

原厂通信库位于:

Libs/libloop_function_v4.a

使用 Keil 5

Keil 工程要求:

  • Keil MDK 5.43 或更高版本;

  • Arm Compiler 6.24;

  • Keil::STM32F4xx_DFP 3.1.1;

  • ST-LINK 调试器。

打开:

stm32f407V4_with_socketcan_keil/MDK-ARM/spine_v4_v47_keil.uvprojx

选择 V47 Release,按 F7 编译。正常结果应为 0 Error(s), 0 Warning(s)

Keil 原厂通信库位于:

Libs/libloop_function_v4_keil.lib

不要把 Keil 工程切换到 Arm Compiler 5,也不要与 STM32CubeIDE 工程的 GCC 静态库混用。

烧录和保存数据

开发板上的两颗 STM32 使用相同的客户工程和引脚配置。两侧需要相同功能时,可以把同一个编译结果通过两个 SWD 下载口分别烧录。

烧录时请选择下载并校验,不要执行全片擦除。应用程序应保持在 0x080000000x0801FFFF 范围内,避免覆盖保存通信参数和离线任务的数据。详细说明见固件更新

不要使用 IOC 重新生成代码

这两套发布工程都不是 CubeMX 空白模板:

  • 发布包不提供 .ioc.mxproject

  • 不要执行 Generate Code

  • 不要替换 USB、SPI、CAN、RS485、FreeRTOS 和静态库;

  • 不要重新分配原厂通信已经使用的引脚。

需要自由修改 IOC 和通信接口时,请使用自定义固件开发中的样例。

修改后的验收

每次修改后至少检查:

  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. 断电重启后,原有通信配置仍然保留。