- Real-time flight control with FreeRTOS multitasking
- Wireless telemetry and remote control via nRF24L01
- Clean modular architecture with proper separation of concerns
- CMSIS-based implementation (no HAL dependencies)
Built for reliable autonomous and manual RC aircraft operation.
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Applications │ │ Controls │ │ Devices │
│ │ │ - Sensors │ │ - nRF24L01 │
└─────────────────┘ └──────────────────┘ └─────────────────┘
│ │ │
└───────────────────────┼───────────────────────┘
│
┌─────────────────────────────────┼─────────────────────────────────┐
│ Drivers │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
└─────────────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────┼─────────────────────────────────┐
│ CMSIS │
│ STM32F103C8T6 Hardware │
└─────────────────────────────────────────────────────────────────┘
| Task Name | Responsibility | Priority | Communication |
|---|---|---|---|
| ControllerTask | Flight control logic, PID, stabilization | High | Processes sensor data |
↑
↑
[ nRF24L01 (SPI) ] → [ Radio Handler ] ──────────────┘
| Component | Description | Interface |
|---|---|---|
| MCU | STM32F103C8T6 (Blue Pill) – Cortex-M3, 72 MHz, 20 KB RAM | - |
| Radio Module | nRF24L01+ for telemetry and remote control | SPI |
| Status LEDs | Debug and status indication | GPIO |
| Mode Button | Flight mode toggle | GPIO/INT |
| Power Source | Li-Po battery pack with voltage regulation | ADC |
# Fedora/RHEL
sudo dnf install arm-none-eabi-gcc arm-none-eabi-newlib
# Ubuntu/Debian
sudo apt install gcc-arm-none-eabi
# Verify installation
arm-none-eabi-gcc --version# For ST-Link
sudo dnf install stlink # or sudo apt install stlink-tools
# Alternative: OpenOCD
sudo dnf install openocd # or sudo apt install openocdgit clone https://github.com/msoodb/hermes.git
cd hermesmake clean
make# Using ST-Link (default)
make flash
# Using OpenOCD
make METHOD=openocd flash
# Using GDB for debugging
make METHOD=gdb flashhermes/
├── src/
│ ├── applications/ # Main application code
│ ├── board/ # Board initialization (clock, GPIO)
│ ├── controls/ # Flight control logic
│ ├── drivers/ # Low-level peripheral drivers
│ ├── system/ # System utilities, interrupts
│ └── utils/ # Utilities (debug, delay, fonts)
├── include/ # Header files
├── FreeRTOS/ # FreeRTOS source code
├── CMSIS/ # CMSIS and startup files
└── ld/ # Linker scripts
- Controls: Application-level control logic (Flight controller, Sensor fusion)
- All functions/types use
hrms_prefix - Clear separation between drivers, devices, and controls
- Consistent error handling with status returns
- Critical flight control tasks have high priority
- Sensor polling runs at medium priority
- Communication tasks at lower priority
- Proper use of FreeRTOS synchronization primitives
This project is licensed under the GNU General Public License v3. See the LICENSE file for details.
Built for reliable RC aircraft flight control and telemetry.