CAN-to-USB Get in touch

Prototype · Hardware and firmware

CAN-to-USB

A CAN-to-USB adapter being designed on the in-house STM32 platform, so its firmware will be yours to read and change.

Planned · the adapter block by block, and how far a frame gets today

  • Firmware in the platform
  • In the schematic
  • Not started

U1 · STM32G473CB Firmware in the platform

FDCAN1 on PB8/PB9, FDCAN2 on PB5/PB13, FDCAN3 on PA8/PA15. The platform’s g4-can2usb example opens FDCAN1 at 500 kbit/s with an 87.5% sample point, on a 170 MHz clock (HSI16 / 4 × 85 / 2), and counts what it receives. FDCAN2 and FDCAN3 have no firmware yet.

can_frames_rx
0
can_bytes_rx
0
Schematic
Under way, 57 parts placed
Board layout
Not started. CAN2USB.kicad_pcb is empty.
Firmware here
Still the platform’s starter template
The planned adapter, drawn from its KiCad schematic. Tap a block for details. The counters are the ones the platform’s example firmware keeps; the frame you send is an illustration in your browser, because there’s no can2usb board to run anything on yet.
Title
CAN-to-USB
Dwg no.
Q5-001
Rev
2026.1
Status
Prototype
Drawn by
DWMM Holdings

Notes

What it does.

A CAN-to-USB adapter built on the in-house STM32 platform instead of a vendor SDK. It’s early: the schematic is under way around an STM32G473, the board layout hasn’t started, and the firmware in this repository is still the platform’s starter template.

  1. 01

    Schematic in progress, targeting the STM32G473

  2. 02

    Built with the in-house STM32 toolchain and no vendor SDK

The CAN half

Written in the platform first.

The CAN side is being worked out as an example app in the STM32 platform, examples/g4-can2usb, so the driver and the clock plan get tested before there’s a board. It brings up FDCAN1 and nothing else. The USB transport is switched off in its app.yaml until the driver exists.

# configs/default.yaml
clocks:
  sysclk_hz: 170000000

pins:
  PB8: { f: FDCAN1_RX }
  PB9: { f: FDCAN1_TX }

peripherals:
  fdcan1: { role: app, bitrate_bps: 500000, sample_point: 0.875 }

# app.yaml
plink:
  transports: [] # USB CDC is not implemented yet

Specification

What it’s built with, and when.

Pulled from the repository each time this site is built.

State
Prototype
Discipline
Hardware systems
Shape
Hardware and firmware
Started
Aug 2026
Last change
Aug 2026
Commits
6
  • C
  • CMake
  • KiCad
  • STM32G4
  • CAN
  • C 97%
  • CMake 3%

Next

Build on CAN-to-USB

Ask about licensing the platform, bringing up a board, or contract firmware work.

This site isn't finished. Anything on it may still change, and none of it is binding until the site is live.