自定义固件开发
自定义固件开发适合希望直接使用 STM32G0B1RCT6 编写 CAN、CAN FD、RS485 和设备控制逻辑的用户。样例已经配置好 V8 开发板的 MCU、外部 8 MHz 晶振、引脚和基础外设,可以直接导入 STM32CubeIDE 修改。
这些样例不会保留 V81 正式固件的 USB/SPI 转换、SocketCAN、管理口协议、透传模式和离线批量指令功能。如果需要保留这些能力,只增加 I2C、ADC、USART3、传感器或自己的业务代码,请选择原厂固件二次开发。
选择合适的样例
开发需求 |
推荐工程 |
|---|---|
自定义经典 CAN、11 位标准 ID |
|
自定义经典 CAN、29 位扩展 ID |
|
自定义 CAN FD、11 位标准 ID |
|
自定义 CAN FD、29 位扩展 ID |
|
自定义 RS485 设备控制 |
|
保留 V81 原厂通信功能,只增加外设或业务逻辑 |
使用入口:V8 自定义固件逐项使用说明
两颗 MCU 使用同一套工程
开发板上的两颗 STM32G0B1RCT6 型号和引脚配置相同,同一个编译结果可以烧录到任意一颗 MCU,也可以分别烧录到两颗 MCU。
下载接口 |
工程中的接口 |
开发板接口 |
|---|---|---|
MCU(1)的 SWD |
FDCAN1/FDCAN2、RS485-A/RS485-B |
CAN/CAN FD-1、CAN/CAN FD-2、RS485-1、RS485-2 |
MCU(2)的 SWD |
FDCAN1/FDCAN2、RS485-A/RS485-B |
CAN/CAN FD-3、CAN/CAN FD-4、RS485-3、RS485-4 |
完整引脚定义见接口和引脚说明。
STM32CubeIDE 开发环境
五个样例使用相同的开发环境:
STM32CubeIDE,样例已使用 2.2.0 完成编译验证;
STM32G0B1RCT6;
外部 8 MHz 晶振,系统时钟和 FDCAN 内核时钟 60 MHz;
ST-LINK 调试器。
使用 File > Import > Existing Projects into Workspace 导入所选工程,然后选择 Release 或 Debug 配置构建。烧录时使用目标 MCU 对应的 SWD 接口,不要执行全片擦除,以免删除开发板保存的数据。
每个直接开发工程都包含 .ioc,可以使用 STM32CubeMX 调整外设。生成代码前应先备份工程,生成后必须重新核对时钟、V8 引脚、CAN/CAN FD 位时序、RS485 方向控制以及 Core/Src/main.c 中的客户逻辑。
CAN 标准帧直接开发工程
逐步说明:CAN 标准帧工程
该工程把本 MCU 的两路 FDCAN 外设配置为 1 Mbit/s 经典 CAN。默认只接收标准帧和扩展帧并拒绝远程帧,不会自动发送数据。接收计数和最近一帧保存在:
g_can1_rx_count / g_can1_last_header / g_can1_last_data
g_can2_rx_count / g_can2_last_header / g_can2_last_data
Core/Src/main.c 中的 DirectCan_SendStandard() 提供 11 位标准 ID、8 字节数据帧发送入口。接入设备前,应按设备协议确认 CAN ID、数据内容和波特率,再显式调用该函数。
CAN 扩展帧直接开发工程
逐步说明:CAN 扩展帧工程
该工程把两路 FDCAN 外设配置为 1 Mbit/s 经典 CAN,默认仅接收。DirectCan_SendExtended() 提供 29 位扩展 ID、8 字节数据帧发送入口。
工程不会自动发送 Cybergear 或其他电机控制指令。使用扩展帧设备前,应先按设备协议实现 ID 编码、数据缩放、状态机和安全保护。
CAN FD 标准帧直接开发工程
逐步说明:CAN FD 标准帧工程
默认参数如下:
项目 |
默认值 |
|---|---|
仲裁段波特率 |
1 Mbit/s |
数据段波特率 |
5 Mbit/s |
BRS |
开启 |
发送格式 |
11 位标准 ID、16 字节 CAN FD 数据帧 |
默认行为 |
两路仅接收,不自动发送 |
DirectCanFd_SendStandard16() 提供发送入口。修改数据长度时,应同时使用合法的 CAN FD DLC,并保证发送缓存和接收缓存足够大。
CAN FD 扩展帧直接开发工程
逐步说明:CAN FD 扩展帧工程
该工程同样使用 1 Mbit/s 仲裁段、5 Mbit/s 数据段和 BRS,DirectCanFd_SendExtended16() 提供 29 位扩展 ID、16 字节 CAN FD 数据帧发送入口。主循环默认仅接收,不会自动发送。
加入设备协议前,应确认目标设备同时支持 CAN FD、BRS、29 位扩展 ID 和当前位时序。
RS485 直接开发工程
逐步说明:RS485 工程
该工程直接控制本 MCU 的两路半双工 RS485:
项目 |
RS485-A |
RS485-B |
|---|---|---|
UART |
USART1 |
USART2 |
引脚 |
TX=PC4、RX=PB7、RE=PD2 |
TX=PD5、RX=PD6、RE=PC9 |
默认参数 |
4 Mbit/s、8-N-1 |
4 Mbit/s、8-N-1 |
默认行为 |
仅接收 |
仅接收 |
接收数据保存在两个 256 字节循环缓冲区中。DirectRs485_Transmit() 会切换收发方向并执行阻塞发送,但主循环不会自动调用。正式项目应根据设备协议补充报文边界、校验、超时、错误恢复,并根据实时性需求评估中断或 DMA 方案。
USB 和原厂协议说明
直接开发工程中的 USB 初始化代码只是基础工程资源,不是 V81 管理口、SocketCAN、USB 转 CAN/CAN FD 或 USB 转 RS485 接口。客户如需这些功能,必须自行实现完整的 USB 描述符、协议、缓存、流控和主机端支持,或者直接选择原厂固件二次开发。
开发完成后的检查
至少完成以下检查:
Release 配置编译无错误;
MCU、外部晶振、系统时钟和引脚配置与 V8 硬件一致;
CAN/CAN FD 仲裁段、数据段、BRS 和 ID 类型与设备一致;
RS485 波特率、数据位、校验、停止位和方向控制正确;
两颗 MCU 分别烧录时接口对应关系正确;
保持默认仅接收状态完成接线、终端电阻和总线检查后,再启用发送;
电机或执行器的控制范围、状态机和保护参数安全;
长时间运行没有异常复位、通信中断、缓存溢出或明显丢帧。