Firmware for ARM-based brushless ESC (electronic speed controllers).
This repository is a fork of upstream AM32 maintained by ARK Electronics. It tracks upstream capability while carrying ARK’s product line, refactor work, and test infrastructure.
| Upstream | This fork | |
|---|---|---|
| Remote | am32-firmware/AM32 | ARK-Electronics/AM32 |
| Product branch | main |
ark-release |
| Focus | Multi-vendor ESC firmware | ARK targets + maintainability + CI |
For stock AM32 releases, configurators, Discord, and community support, prefer am32.ca and the upstream project.
Large control-path split out of a monolithic main.c into focused modules (runtime, settings, motor control helpers, and related MCU/F051 work). The goal is safer changes, clearer ownership of hot paths, and room for instrumentation without growing one file forever.
Native Linux build of the firmware against a simulated motor / bridge / battery, with DroneCAN over multicast UDP. Useful for protocol, startup, and logic tests without ESC hardware.
- Overview: Mcu/SITL/README.md
- CI:
.github/workflows/SITL.yml
make arm_sdk_install # once, for cross toolchain (SITL itself is host gcc)
make AM32_SITL_CAN
obj/AM32_AM32_SITL_CAN_*.elf --node-id 10 --verboseIn-the-loop bench automation for the ARK 4IN1 (and related F051 work): build/flash, drive the motor (Flight Stand and/or PX4 BDShot setups), read on-device performance counters over SWD, and produce metrics / pass-fail reports.
- Harness: hwci/README.md
- Bench setups: hwci/docs/BENCH_SETUPS.md
- CI:
.github/workflows/hwci.yml
| Branch | Role |
|---|---|
ark-release |
ARK integration line — open product PRs here |
main |
Mirrors / tracks upstream AM32 more closely |
| Feature branches | Short-lived; rebase onto ark-release unless targeting pure upstream work |
IDE project trees (Keil / MRS) are not maintained in this fork. Use the Makefile and the pinned xPack GNU Arm Embedded GCC (see make/tools.mk).
# Install the pinned Arm toolchain into tools/<os>/
make arm_sdk_install
# List / build targets (examples)
make targets
make -j$(nproc) ARK_4IN1_F051Firmware objects land under obj/. MCU families supported by the build system include F051, F031, G071, E230, F415, F421, L431, G431, V203, G031, A153, and SITL — exact product names live in Inc/targets.h.
Optional static analysis / size helpers: scripts/ and make cppcheck / related targets.
- Firmware upgrade via Betaflight passthrough, single-wire serial, or related tools
- Servo PWM and DShot (300 / 600), including bi-directional DShot
- KISS-style ESC telemetry
- Variable PWM frequency and sinusoidal startup for larger motors
- Multi-vehicle use with a flight controller; crawler-oriented builds exist upstream
Upstream feature docs and crawler notes: AM32 wiki / crawler hardware.
These are upstream / community tools; they are not ARK-specific:
- AM32 Configurator (web) and downloads
- esc-configurator.com
- Bootloaders: AM32-bootloader
- Target list:
Inc/targets.h(this tree) or upstream targets.h
To put AM32 on a blank ESC you still need a matching MCU bootloader (ST-LINK / GD-LINK / CMSIS-DAP / AT-LINK, etc.), then flash application firmware with a configurator or one-wire serial path.
ARK work centers on STM32F051 4-in-1 ESCs and related F051 targets, while the tree still builds the broader AM32 MCU set above. Upstream also documents STSPIN32F0, G071, GD32E230, AT32F415/F421, and others — see their hardware notes and compatibility charts.
| Topic | Where |
|---|---|
| ARK / this fork | ARK-Electronics/AM32 issues and PRs on ark-release |
| Upstream AM32 | Discord, Patreon, am32.ca |
GPL-3.0 — see LICENSE. Same license family as upstream AM32.
AM32 exists because of its authors, sponsors, and community. This fork inherits that work; see the upstream README for the full sponsor and contributor lists.