Custom Firmware Development
Custom firmware development is intended for users who want to program CAN, CAN FD, RS485, and device-control logic directly on the STM32G0B1RCT6. The examples already configure the V8 MCU, external 8 MHz crystal, pins, and basic peripherals and can be imported directly into STM32CubeIDE.
These examples do not retain the USB/SPI conversion, SocketCAN, management-port protocol, transparent mode, or offline batch-command functions of the V82 release firmware. If you need to retain these functions and only add I2C, ADC, USART3, sensors, or application logic, use Official Firmware Extension Development.
Choose an Example
Development requirement |
Recommended project |
|---|---|
Custom classic CAN with an 11-bit standard ID |
|
Custom classic CAN with a 29-bit extended ID |
|
Custom CAN FD with an 11-bit standard ID |
|
Custom CAN FD with a 29-bit extended ID |
|
Custom RS485 device control |
|
Retain V82 communication functions and only add peripherals or application logic |
Example download: V8 custom firmware examples
Use the Same Project for Both MCUs
The two STM32G0B1RCT6 MCUs on the board have identical models and pin assignments. The same build can be programmed into either MCU or into both MCUs.
Programming connector |
Project interfaces |
Board interfaces |
|---|---|---|
MCU (1) SWD |
FDCAN1/FDCAN2 and RS485-A/RS485-B |
CAN/CAN FD-1, CAN/CAN FD-2, RS485-1, and RS485-2 |
MCU (2) SWD |
FDCAN1/FDCAN2 and RS485-A/RS485-B |
CAN/CAN FD-3, CAN/CAN FD-4, RS485-3, and RS485-4 |
See Interfaces and Pin Definitions for the complete pin assignment.
STM32CubeIDE Environment
All five examples use the same environment:
STM32CubeIDE; the examples have been build-tested with version 2.2.0;
STM32G0B1RCT6;
external 8 MHz crystal, with a 60 MHz system clock and FDCAN kernel clock;
ST-LINK debugger.
Use File > Import > Existing Projects into Workspace to import the selected project, then build the Release or Debug configuration. Program through the SWD connector for the target MCU. Do not perform a full-chip erase, because it may delete data stored by the board.
Every direct-development project includes an .ioc file and can be adjusted in STM32CubeMX. Back up the project before generating code. After generation, recheck the clock tree, V8 pin assignment, CAN/CAN FD bit timing, RS485 direction control, and customer logic in Core/Src/main.c.
CAN Standard-Frame Direct-Development Project
Download: CAN standard-frame project
This project configures the MCU’s two FDCAN peripherals for 1 Mbit/s classic CAN. By default, it only receives standard and extended frames, rejects remote frames, and does not transmit automatically. Receive counters and the latest frames are stored in:
g_can1_rx_count / g_can1_last_header / g_can1_last_data
g_can2_rx_count / g_can2_last_header / g_can2_last_data
DirectCan_SendStandard() in Core/Src/main.c provides an explicit transmit entry point for an 11-bit standard ID and an 8-byte data frame. Before connecting a device, confirm the CAN ID, payload, and bit rate from the device protocol, then call this function explicitly.
CAN Extended-Frame Direct-Development Project
Download: CAN extended-frame project
This project configures both FDCAN peripherals for 1 Mbit/s classic CAN and is receive-only by default. DirectCan_SendExtended() provides an explicit transmit entry point for a 29-bit extended ID and an 8-byte data frame.
The project does not automatically send Cybergear or other motor-control commands. Before using an extended-frame device, implement the ID encoding, data scaling, state machine, and safety protection required by the device protocol.
CAN FD Standard-Frame Direct-Development Project
Download: CAN FD standard-frame project
The default settings are:
Item |
Default |
|---|---|
Arbitration bit rate |
1 Mbit/s |
Data-phase bit rate |
5 Mbit/s |
BRS |
Enabled |
Transmit format |
11-bit standard ID with a 16-byte CAN FD data frame |
Default behavior |
Both channels receive only and do not transmit automatically |
DirectCanFd_SendStandard16() provides the transmit entry point. If you change the data length, use a valid CAN FD DLC and ensure that the transmit and receive buffers are large enough.
CAN FD Extended-Frame Direct-Development Project
Download: CAN FD extended-frame project
This project also uses a 1 Mbit/s arbitration phase, a 5 Mbit/s data phase, and BRS. DirectCanFd_SendExtended16() provides a transmit entry point for a 29-bit extended ID and a 16-byte CAN FD data frame. The main loop is receive-only by default and does not transmit automatically.
Before adding a device protocol, confirm that the target device supports CAN FD, BRS, 29-bit extended IDs, and the configured bit timing.
RS485 Direct-Development Project
Download: RS485 project
This project directly controls the two half-duplex RS485 channels of the MCU:
Item |
RS485-A |
RS485-B |
|---|---|---|
UART |
USART1 |
USART2 |
Pins |
TX=PC4, RX=PB7, RE=PD2 |
TX=PD5, RX=PD6, RE=PC9 |
Default settings |
4 Mbit/s, 8-N-1 |
4 Mbit/s, 8-N-1 |
Default behavior |
Receive only |
Receive only |
Received data is stored in two 256-byte ring buffers. DirectRs485_Transmit() switches the transceiver direction and performs a blocking transmit, but the main loop does not call it automatically. A production application must add protocol framing, checksums, timeouts, and error recovery, and evaluate interrupt or DMA operation according to its real-time requirements.
USB and Official Protocols
The USB initialization code in the direct-development projects is only a basic project resource. It is not the V82 management port, SocketCAN interface, USB-to-CAN/CAN FD interface, or USB-to-RS485 interface. If you need these functions, you must implement the complete USB descriptors, protocol, buffering, flow control, and host support, or use Official Firmware Extension Development.
Validation After Development
At minimum, complete the following checks:
the Release configuration builds without errors;
the MCU, external crystal, system clock, and pin configuration match the V8 hardware;
CAN/CAN FD arbitration timing, data timing, BRS, and ID type match the device;
RS485 bit rate, data bits, parity, stop bits, and direction control are correct;
channel mapping is correct when the two MCUs are programmed separately;
verify wiring, termination, and bus operation in the default receive-only state before enabling transmission;
motor or actuator ranges, state machines, and protection parameters are safe;
long-duration operation shows no unexpected reset, communication interruption, buffer overflow, or significant frame loss.