This is the flight controller system design:
The MPU9250 measures the current motion position with its integrated accelerator and gyroscope. The MPU9250 interrupt output goes high as soon as ne w data is available. The STM32F4 reads out all the data and starts the Madgwick data fusion algorithm. Based on the so calculated Euler angles for roll, pitch and yaw the PID controllers calculate the necessary motor speed for each BLDC motor. The PID compare the current current Euler angles with the set roll, pich and yaw angles provided by the remote control.
The remote controller set-points are received by the RC receiver. Four (six) GPIO input lines at the STM32F4 read the pulse width modulated receiver outputs and determines by measuring the pulse-width time the set-point values.
A CAN bus communicates the motor speed values to the BLDC motor controllers.
A periodic timer interrupt sends the current system status via an UART to the telemetry 433 MHz transmitter to allow the flight monitor to further visualize the current flight status on a PC. The same UART can also from the flight monitor receive new settings for the flight controller e.g. new PID coefficients to tune the PID system.
A GPS receiver sends is current position with a 10Hz update rate. The before mentioned telemetry system forwards the gps data as well to the flight monitor system