From Baseflight to Cleanflight

This past weekend I upgraded the Naze32 flight controller (FC) on my quadcopter from Baseflight to Cleanflight. The reason being that Cleanflight seems to move forward much faster and also is open source.

The upgrade itself went smoothly. I installed the Cleanflight Configurator, selected the correct firmware and flashed the board. You don't have to be afraid, you can't brick your Naze32. If you load it with wrong firmware, or if the board stops responding (happened to me after I changed the UART1 configuration), you can short the boot pins (see the hardware manual) to force the builtin bootloader to run instead of the misbehaving firmware. The bootloader is non-upgradeable, so this option will always remain as last resort to restore the board. Make sure to check the Full Chip Erase option if you suspect that the firmware isn't booting because it's misconfigured. That will reset the board configuration to its initial (working) state.

Cleanflight has slightly more features than Baseflight, but overall they are very similar. This shows their common history. I did not see any difference in flight performance.

Telemetry output to a FrSky D4R-II receiver

With the old Baseflight firmware it's taken me a while to correctly configure the telemetry output from the FC to the FrSky D4R-II receiver. In the end I managed to get it working by using softserial. Cleanflight supports two hardware UART ports out of the box, with the second UART having TX/RX on I/O pins 5/6. I would stay away from the first UART port, it's used by USB when the board is connected to the configurator, and when I tried to change its settings the board stopped responding and I had to re-flash it. You can't use the second UART port either because the FrSky serial protocol is inverted and the second UART on the Naze32 can not be configured to invert the signal (I'm not sure if that is a hardware or software limitation). So I had to use softserial again. The pinout is the same as with Baseflight, ie. the first softserial has RX/TX on I/O pins 7/8 (the complete pinout is documented here).

In short, enable SOFTSERIAL, set telemetry_inversion = 1 and in the Serial tab set SOFTSERIAL1 to output FrSky telemetry at 9600 baud. Then connect pin 8 (SOFTSERIAL1 TX) on the Naze32 with the external telemetry RX pin on the FrSky D4R-II receiver.