While STM32F4 family processors installed in newest flight controllers are superior to STM32F3 (and F1 of course) in terms of raw speed, they are inferior to F3 family in terms of IO handling capabilities. For example, F4 family is not equipped with UART port inverters. Just take a look at the Omnibus F4 flight controller. There is an S.BUS inverter, but not a SmartPort inverter. That creates a series of problems when it comes to connecting various serial RX receivers and telemetry systems.

The most popular FrSky (Futaba) S.Bus serial RX protocol and FrSky SmartPort telemetry require inverted UART signal. If there is no hardware inverter on hardware UART port, they will not work. While S.Bus requires only one data line, an external inverter is not a big issue. Some time ago I've published The Simplest Hardware Inverter. One MOSFET transistor, one resistor and that are all.

In the case of SmartPort, it's slightly more complicated. Not only signal is inverted, SmartPort also combines TX and RX UART line into a single wire. That means the following:

  1. The more complicated inverter is required
  2. The software has to support this case and fallback to unidirectional UART mode

Hardware

  1. 2x N-channel MOSFET transistors, for example,2N7000
  2. 2x 4.7kOhm resistors
  3. 1x 47kOhm resistor
  4. Some cables
    Hardware is simple enough to build "in the air" and then put inside heat shrink or deluged in epoxy.

Software

Like I mentioned previously, the software has to be able to switch to the unidirectional mode when this hardware is used. Luckily, both Betaflight and INAV supports it.

In the case of Betaflight and a newer required command is

set sport_halfduplex=ON.

In the case of INAV, the required command is

set smartport_uart_unidir=ON.

There is also a "receiver" hardware hack, but for those who are not for soldering cables to receiver pads, this might be an option. Like for all users of Omnibus F4 family.