TMR-FC is an open hardware and software multirotor flight-controller platform originally developed as a university graduation project.
The platform combines an STM32-based flight controller with onboard inertial and environmental sensors, navigation interfaces, actuator outputs, data logging, and PX4-derived firmware. A second-generation design explored integration with Raspberry Pi for computer vision, ROS, MAVLink, and optical-flow applications.
TMR-FC was designed as a research-oriented multirotor flight-control platform rather than a commercial product.
Two major hardware generations are documented:
- TMR-FC V1.0 — STM32F405RG-based standalone flight controller.
- TMR-FC V2.0 — STM32F407VG-based design intended to work standalone or as a Raspberry Pi daughter board for higher-level vision and robotics applications.
The original firmware work was based on / ported from the PX4 project.
The photographs below are preserved from the original README as part of the project's historical documentation.
These image URLs are historical external links retained from the original project documentation. Availability depends on the original hosting services.
+---------------------------+
| Raspberry Pi |
| OpenCV / ROS / MAVLink |
| Vision / Optical Flow |
+-------------+-------------+
|
V2.0 integration
|
+-------------v-------------+
| TMR-FC |
| STM32F405 / STM32F407 |
| |
| IMU / Magnetometer |
| Barometer / GPS |
| PWM / PPM / S.BUS |
| USB / SD / CAN / GPIO |
+-------------+-------------+
|
ESCs / Actuators
|
+-------------v-------------+
| Multirotor Airframe |
+---------------------------+
| Version | MCU |
|---|---|
| V1.0 | STM32F405RG |
| V2.0 | STM32F407VG |
- I2C: MPU6050
- I2C: HMC5883
- I2C: MS5611
- I2C: HMC5983
- I2C: MPL3115A2 or MS5611
- SPI: MPU6000
- Optional SPI: LSM303DLM
- Optional SPI: L3G4200D
- Optional ADC: ADXRS652 × 3
Some V2.0 sensor data was intended to be shareable with a Raspberry Pi for higher-level applications.
- 12-channel PWM output
- PPM input
- Futaba S.BUS input
- Built-in 10-DOF sensor set
- PCA9533 / PCA9536 controlled LEDs
- GPS port via UART / I2C
- Auxiliary SPI and GPIO
- RF port for APC230 or Bluetooth modules
- LiPo voltage measurement via ADC
- Beeper / tone alarm
- SWD debug interface
- SONAR interface
- USB VCP and MSC
- MicroSD storage
- Light-bar LED control
- Internal Flash EEPROM emulation
- RTC backed by CR1220 battery
- USB OTG
- CAN transceiver support using TJA1050 or MAX3051
- Raspberry Pi daughter-board concept
- Camera integration for optical-flow / vision experiments
The original software stack was derived from the PX4 autopilot ecosystem and integrated with TMR-FC-specific board support.
The current top-level repository structure is:
tmr-flight-controller
├── Bootloader
├── Firmware
├── libopencm3
├── .gitmodules
└── README.md
Bootloader, Firmware, and libopencm3 are Git submodules. The historical PX4-derived firmware tree also referenced NuttX within the firmware stack.
The project also explored Raspberry Pi integration with:
- OpenCV
- ROS
- MAVLink
- Camera-based optical flow
sudo dfu-util -a 0 -d 0x0483:0xdf11 \
--dfuse-address 0x08000000 \
-D tmrfc_bl.binA Segger J-Link can also be used for bootloader programming.
sudo dfu-util -a 0 -d 0x0483:0xdf11 \
--dfuse-address 0x08004000 \
-D tmrfc-v1_default.binThe project also supported the historical PX4 QUpgrade workflow when the TMR-FC bootloader had already been programmed.
Clone the repository and initialize its submodules:
git clone https://github.com/cctsao1008/tmr-flight-controller.git
cd tmr-flight-controller
git submodule update --init --recursiveThe current .gitmodules file references:
https://github.com/cctsao1008/Firmwarehttps://github.com/cctsao1008/libopencm3https://github.com/cctsao1008/Bootloader
Note: Some historical submodule references, upstream URLs, toolchains, or build dependencies may no longer be directly usable without additional restoration work.
The original project published supporting material including:
- TMR-FC user guide
- Hardware schematic
- Gerber files
- PX4-derived software
- DIY Drones project write-up
Some external links from the original project date back to the early 2010s and may no longer be available.
TMR-FC V2.0 was conceived as a hybrid architecture in which the STM32 flight controller handled deterministic low-level flight-control tasks while a Raspberry Pi provided higher-level compute for vision and robotics workloads.
That architectural split remains a useful embedded-systems pattern:
Real-time MCU
├── sensor acquisition
├── attitude / flight control
├── actuator output
└── safety-critical timing
High-level processor
├── computer vision
├── navigation
├── ROS integration
└── application logic
TMR-FC was originally created by Chia-Cheng Tsao (Ricardo Tsao) at NTUT, Taiwan, as a graduation research project.
The project reflects an early open-hardware / open-software flight-control architecture built around STM32, PX4-derived firmware, and experimentation with companion-computer integration.
No explicit license is currently documented in this repository. Unless a license is added, normal copyright rules apply to the source code and hardware design files.
The project referenced and built upon work from the PX4, NuttX, libopencm3, Raspberry Pi, ROS, OpenCV, and MAVLink ecosystems.




