自定义固件开发
自定义固件开发适合希望自己编写 CAN、RS485 和设备控制逻辑的用户。样例已经配置好 STM32F407、开发板引脚和基础外设,可以直接用 Keil 5 打开并修改。
这些样例不包含 V47 原厂固件的 USB/SPI 转 CAN/RS485、SocketCAN 和离线执行功能。如果需要保留这些功能,只增加 IIC、ADC、串口设备或自己的业务代码,请选择原厂固件二次开发。
选择合适的样例
开发需求 |
推荐工程 |
|---|---|
自定义固件控制 CAN 标准帧设备 |
|
自定义固件控制 CAN 扩展帧设备 |
|
自定义固件控制 RS485 设备 |
|
保留 SANPO 原厂USB/SPI转CAN/RS485控制功能,只增加外设 |
样例下载入口:F407 自定义固件样例

两颗 MCU 使用同一套固件
开发板上的两颗 STM32F407 型号和引脚配置相同,CAN 和 RS485 样例都只需要一套工程。同一个编译结果可以烧录到任意一颗 MCU,也可以分别烧录到两颗 MCU。
下载接口 |
工程中的接口 |
开发板接口 |
|---|---|---|
MCU(1)的 SWD |
CAN1/CAN2、RS485-A/RS485-B |
CAN-1/CAN-2、RS485-1/RS485-2 |
MCU(2)的 SWD |
CAN1/CAN2、RS485-A/RS485-B |
CAN-3/CAN-4、RS485-3/RS485-4 |
Keil 开发环境
三个样例使用相同的开发环境:
Keil MDK 5;
Arm Compiler 5.06 update 7;
Keil::STM32F4xx_DFP3.1.1;ST-LINK 调试器。
打开样例中的 .uvprojx 文件,按 F7 编译。烧录时选择 ST-LINK(SWD)下载口,不要执行全片擦除,以免删除开发板出厂信息和原厂固件保存的数据。
每个样例都包含 .ioc。可以使用 STM32CubeMX 调整基础外设,但生成代码前应先备份工程;生成后要重新核对 CAN/RS485 参数、方向控制、用户代码和 Keil 工程设置。
CAN 标准帧控制样例
下载:CAN 标准帧控制样例
该工程默认以 1 Mbit/s 从本 MCU 对应的两路 CAN 每秒发送一条标准帧:
ID = 0x141
Data = 9A 00 00 00 00 00 00 00
调试串口 USART3 使用 115200-8-N-1,会显示发送和接收到的 CAN ID、数据长度和内容。
默认数据只用于演示发送方法,不保证适用于所连接的设备。接入电机或执行器前,应先按照设备协议修改 CAN ID 和数据。具体修改位置和 Keil 操作步骤见样例目录中的 README。
CAN 扩展帧控制样例
下载:CAN 扩展帧控制样例
该工程演示 Cybergear 扩展帧控制。默认参数如下:
项目 |
默认值 |
|---|---|
CAN 波特率 |
1 Mbit/s |
Motor ID |
12 |
往复幅度 |
0.2 rad |
往复频率 |
0.2 Hz |
发送周期 |
10 ms |
Kp / Kd |
10.0 / 0.5 |
烧录后程序会自动设置模式、使能电机并开始往复运动。首次测试必须架空输出轴、清空运动范围,并准备随时断开电机电源。程序默认把指令发送到本 MCU 的两路 CAN;只测试一路时,建议只连接目标电机或修改发送函数。
具体参数位置、调试串口输出和 Keil 操作步骤见样例目录中的 README。
RS485 控制样例
下载:RS485 控制样例
该工程演示宇树 GO-M8010 类电机的 17 字节控制指令和 16 字节反馈,默认使用:
项目 |
默认值 |
|---|---|
RS485 参数 |
4 Mbit/s、8-N-1 |
两路 Motor ID |
1 |
每次目标位置增量 |
0.2 rad |
Kp / Kd |
2.5 / 0.12 |
调试串口 |
USART3,115200-8-N-1 |
烧录后两路 RS485 都可能驱动电机运动。首次测试必须固定电机、架空输出轴并检查 A/B 接线和供电。USART3 返回的是 16 字节二进制反馈,需要使用十六进制方式查看。
该样例使用等待式发送和接收,便于阅读和修改,不适合直接用于高频实时控制。正式产品应根据控制周期改用中断或 DMA,并完成连续运行和丢帧测试。
开发完成后的检查
至少完成以下检查:
Keil 编译为
0 Error(s);CAN 波特率或 RS485 参数与设备一致;
两颗 MCU 分别烧录时,接口对应关系正确;
设备能够发送指令并收到合法反馈;
电机控制范围和保护参数安全;
长时间运行没有异常复位、通信中断或明显丢帧。