4343#include "common/utils.h"
4444
4545#include "drivers/nvic.h"
46+ #include "drivers/persistent.h"
4647
4748#include "fc/rc_modes.h"
4849#include "fc/runtime_config.h"
@@ -103,10 +104,9 @@ typedef struct {
103104
104105static crsfSpeedControl_s crsfSpeed = {0 };
105106
106- uint32_t crsfCachedBaudrate __attribute__ ((section (".noinit" ))); // Used for retaining negotiated baudrate after soft reset
107-
108107uint32_t getCrsfCachedBaudrate (void )
109108{
109+ uint32_t crsfCachedBaudrate = persistentObjectRead (PERSISTENT_OBJECT_SERIALRX_BAUD );
110110 // check if valid first. return default baudrate if not
111111 for (unsigned i = 0 ; i < BAUD_COUNT ; i ++ ) {
112112 if (crsfCachedBaudrate == baudRates [i ] && baudRates [i ] >= CRSF_BAUDRATE ) {
@@ -133,8 +133,7 @@ void setCrsfDefaultSpeed(void)
133133 crsfSpeed .confirmationTime = 0 ;
134134 crsfSpeed .index = BAUD_COUNT ;
135135 isCrsfV3Running = false;
136- crsfCachedBaudrate = getCrsfDesiredSpeed ();
137- crsfRxUpdateBaudrate (crsfCachedBaudrate );
136+ crsfRxUpdateBaudrate (getCrsfDesiredSpeed ());
138137}
139138
140139bool crsfBaudNegotiationInProgress (void )
@@ -470,8 +469,7 @@ void speedNegotiationProcess(timeUs_t currentTimeUs)
470469 } else if (crsfSpeed .isNewSpeedValid ) {
471470 if (cmpTimeUs (currentTimeUs , crsfSpeed .confirmationTime ) >= 4000 ) {
472471 // delay 4ms before applying the new baudrate
473- crsfCachedBaudrate = getCrsfDesiredSpeed ();
474- crsfRxUpdateBaudrate (crsfCachedBaudrate );
472+ crsfRxUpdateBaudrate (getCrsfDesiredSpeed ());
475473 crsfSpeed .isNewSpeedValid = false;
476474 isCrsfV3Running = true;
477475 }
0 commit comments