Skip to content
STM32F103 USB HID game device controller with flexible configuration
C Assembly HTML Other
Branch: master
Clone or download
Yury Vostrenkov
Latest commit be3507b Feb 9, 2020
Type Name Latest commit message Commit time
Failed to load latest commit information.
Drivers Fixed shift, inverse for shift regs, some mods with combined axes Feb 4, 2020
Inc Shift registers and bootloader hotfix Feb 8, 2020
MDK-ARM Shift registers and bootloader hotfix Feb 8, 2020
Src Shift registers and bootloader hotfix Feb 8, 2020
armgcc Buttons to axis not enabled in windows, improvements in buttons to axes Feb 5, 2020
.gitignore Merge branch 'dev' Nov 27, 2019
.mxproject Initial commit with 128 button, 8 axis, 4 POV HID device Oct 4, 2019
FreeJoy.ioc Fixed buttons doubling POVs and hardfault at analog initialization Jan 9, 2020
LICENSE Update Feb 5, 2020
_config.yml Set theme jekyll-theme-cayman Feb 4, 2020


FreeJoy is widely configurable game device controller based on cheap STM32F103C8 microcontroller board. It allows you to create your own HOTAS, pedals, steering wheel device or customize a purchased one.


FreeJoy supports the following external periphery:

  • 8 analog inputs
  • 128 push buttons or toggle switches
  • 4 POV hats
  • 16 Incremental encoders
  • Converting analog inputs to buttons (up to 12 buttons per axis)
  • Shift registers 74HC165 and CD4021 for extending inpits number
  • TLE5010/TLE5011 sensors as axes sources


FreeJoy supports up to 8 analog inputs at pins A0-A7 and TLE5010/5011 sensors as axes sources. Every axis has its ouw settings as:

  • Source/destination (X, Y, Z, Rx, Ry, Rz, Slider1, Slider2)
  • Output enabling/disabling
  • Resolution
  • Calibration (manual or automatical)
  • Smothing (4 levels of filtration)
  • Invertion
  • Dead zone
  • Magnet offset option
  • Curve shaping
  • Functions for combined axes
  • Axes from buttons/encoders


FreeJoy allows you to connect up to 128 digital inputs as single inputs (tied to VCC or GND), matrix of buttons, shift register inputs and axes to buttons inputs. Inputs can be configured as:

  • Regular push button
  • Inverted push button
  • Toggle switch ON/OFF
  • Toggle switch ON
  • Toggle switch OFF
  • POV hat button
  • Incremental encoder input
  • Radio buttons
  • 5 shifts

Exrenal configuration tool

FreeJoy configuration is possible both by changing definitions in source code and by using external utility.

For information how to configure your device check wiki page

You can’t perform that action at this time.