原厂固件二次开发
原厂固件二次开发适合于保留现有 USB/SPI 转 CAN/RS485等功能,同时增加IIC/ADC/串口等传感器外设。
如果需要重新实现 CAN、RS485 或整个通信流程,请选择自定义固件开发。
选择开发工具
同一套 V47 二次开发框架提供两个版本:
开发工具 |
工程入口 |
|---|---|
STM32CubeIDE |
|
Keil 5 |
两种工程保留相同的 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 收到 PING、PING\r\n 或 PING\n 后返回:
PONG\r\n
USART3 默认参数为 115200-8-N-1。建议先完成 PING/PONG 测试,再增加自己的设备。
使用 STM32CubeIDE
安装 STM32CubeIDE。
选择
File > Import > Existing Projects into Workspace。导入
stm32f407V4_with_socketcan。选择
Release配置,执行 Clean 和 Build。使用 ST-LINK 下载并校验,然后重新启动开发板。
原厂通信库位于:
Libs/libloop_function_v4.a
使用 Keil 5
Keil 工程要求:
Keil MDK 5.43 或更高版本;
Arm Compiler 6.24;
Keil::STM32F4xx_DFP3.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 下载口分别烧录。
烧录时请选择下载并校验,不要执行全片擦除。应用程序应保持在 0x08000000~0x0801FFFF 范围内,避免覆盖保存通信参数和离线任务的数据。详细说明见固件更新。
不要使用 IOC 重新生成代码
这两套发布工程都不是 CubeMX 空白模板:
发布包不提供
.ioc和.mxproject;不要执行
Generate Code;不要替换 USB、SPI、CAN、RS485、FreeRTOS 和静态库;
不要重新分配原厂通信已经使用的引脚。
需要自由修改 IOC 和通信接口时,请使用自定义固件开发中的样例。
修改后的验收
每次修改后至少检查:
编译无错误和警告;
USB 串口发送
AT+VER\r\n返回V47\r\n;USART3 发送
PING\r\n返回PONG\r\n;USB 自定义协议和 SocketCAN 正常;
SPI 协议正常;
两路 CAN 和两路 RS485 均能收发;
新增的 UART、IIC、ADC 或传感器功能正常;
断电重启后,原有通信配置仍然保留。