Stuff that requires a UART connection but not timing critical, such as:
With the limited number of UART’s on a flight controller (only 2 or 3 on F3/F4 boards), you can turn unused pins like LED_Strip or PPM into softserial ports for connecting additional devices.
You can even “split“ one UART for two things. For example if you use UART1 RX pin for ESC Telemetry. you can use UART1 TX pin for SmartAudio or SmartPort if you set it to Soft Serial. This allows you to free up a whole UART for something else.
And Soft Serial also supports inverted signal like Smart Port. This is extremely useful for F1 and F4 flight controllers as they don’t have built-in inverters.
Nothing is perfect, there are some disadvantages in using Soft Serial:
It’s much easier to understand how to use SoftSerial with examples, which I will show you later in this tutorial.
But in a nutshell, there are only 2 steps in configuring Softserial:
After FC rebooting, you should see a newly added “Soft Serial” port in the Ports tab.
This depends on the FC, and what timers the pins are connected to, you can find out what pins can be used for Soft Serial on your particular FC at this page: https://github.com/betaflight/betaflight/wiki/Single-Wire-Software-Serial
But most of the times, you just have to try.
In general you should be able to find the following pins on MOST FC’s and use them for soft serial:
If you run into any problem or have any technical questions, you should always email your FC manufacturer first.
Here are some common usage of Softserial. I am using Betaflight F4 flight controller in all of my examples below, but the same steps and concept should apply to other FC’s.
By using Softserial, we can connect SmartPort directly to an F4 FC without worrying about signal inversion.
In this example we will connect it to the TX of UART1.
In CLI, type in “resource”, and we can see the pin number of TX1, which is A09 (it might be different in another FC).
Let’s assign A09 to Softserial 1, by entering in CLI:
resource SERIAL_TX 11 A09 save
Note that, Soft Serial port number starts from 11, which means, 11 is Softserial #1, 12 is Softserial #2
Enable “Softserial” feature in Betaflight, and you should see Softserial1 in the Ports Tab. Then select “SmartPort” under Telemetry Output.
This should now be working! If not, go to CLI, and make sure:
set tlm_halfduplex = on set tlm_inverted = off
For inverted S.Port signal, you should have “tlm_inverted” set to “off”, however for uninverted SmartPort, it should be set to “on”. Just try both if you are not sure.
After making these changes, you will need to switch off the FC (by unplugging the USB cable and battery), then switch them back on. Sometimes softserial needs to be power-cycled to work properly.
Not working? Please try resetting the board and follow the exact instruction again. It’s been reported working after resetting the board, I don’t know why this is.
By using the TX and RX pins of the same UART for two devices, you can free up a whole UART for something else.
For example you can hook up ESC Telemetry to UART1 RX, and configure UART1 TX as Softserial1 and use that for your SmartAudio.
In CLI, type in “resource”, and we can see the pin number of TX1, which is A09.
Let’s assign A09 to Softserial 1, by entering in CLI:
resource SERIAL_TX 11 A09 save
Enable “Softserial” feature in Betaflight, and you should now see Softserial1 in the Ports Tab. Choose “ESC” in UART1 and choose SmartAudio in Softserial1, before saving it.
You might need to restart the FC by disconnecting the USB cable and battery, then turn it back on for it to start working.
if you have LED_Strip pin on your FC, and you are not using LED, you can turn it into a softserial port and use it for devices like SmartPort and SmartAudio.
In CLI, type in “resource”, and we can see the pin number for LED_Strip is B06.
Let’s assign B06 to Softserial 1, by entering in CLI:
resource LED_STRIP 1 none resource SERIAL_TX 11 B06 save
Enable “Softserial” feature in Betaflight, and you should now see Softserial1 in the Ports Tab. Select “SmartPort” under Telemetry Output.
if it’s not working, please see example 1 for tips to troubleshoot the issue.
index not between 1 and 10
Two possible causes: