Release Notes
Betaflight 2025.12.1 brings a massive range of new features, improvements, fixes, and new hardware support, making this one of the most significant updates yet. This release continues to expand Betaflight's capabilities for both multirotors and wings, adds new hardware targets, and refines the core codebase for maintainability and performance.
Please use the online Betaflight App for configuring this release. It can be found here: https://app.betaflight.com
🚀 Key New Features
- Autonomous & Safety Features: New capabilities include Altitude Hold, Position Hold, Collision Detection, and an auto-disarm function that triggers on landing impact.
- Fixed-Wing Enhancements: A major focus of this release, with many new tools for wings, such as an S-term for smoother flight, Throttle and PID Attenuation (TPA) modes based on airspeed, and specialized PID multiplier curves.
- Flight & User Experience:
- Updated Turtle/Crashflip Mode: Improvements to the mode that helps you flip your drone back over after a crash.
- Launch Timer: A new timer specifically for launches.
- LED Dimmer & Functions: Added an LED dimmer and new LED bar indicators for GPS, battery, and altitude.
✨ Improvements & Optimizations
- Hardware Support: Support has been added for new gyros (like IIM42653, ICM456xx), flash memory chips, rangefinders, and a CADDX camera gimbal.
- Protocols & Communication: Enhancements have been made to various communication protocols, including CRSF (vario and barometer support), ELRS (FLRC F-modes, Model Match ID), and MAVLink. MSP has been expanded to support more commands and pass-through CLI commands.
- Blackbox & OSD: Blackbox logging is now more comprehensive, with the ability to log servo data, GPS home altitude, IMU attitude, and MCU ID. The On-Screen Display (OSD) also gains new elements and display options.
- Code Refactoring: A massive effort was undertaken to clean up and reorganize the codebase. This involves moving platform-specific code (for different microcontrollers) into dedicated directories, which simplifies future development and improves maintainability.
🛠️ Bug Fixes
This release addresses a vast number of bugs. Check the full change log below for a comprehensive list.
🎯 New Hardware Targets
Support has been added for new microcontrollers, significantly expanding the range of compatible flight controllers. This includes initial support for:
- Raspberry Pi PICO (RP2350)
- APM32F40X series
Contributor Thanks
🙏 New Contributors
Special thanks to our new contributors for this release! The Betaflight community continues to grow and thrive thanks to your efforts.
- @jonas-becker, @AZDane, @Hochmueller, @LuckkMaker, @ainosukii, @anti-social, @kedeng, @demvlad, @KissUltra, @henrywarhurst, @mywinchester, @ahmedsalah52, @vmzhivetyev, @timmyfpv, @jpmreece, @DrAtomic, @dakejahl, @Stepandrr, @ggabriel-airmod, @jefffhaynes, @kensherman, @fluke9, @LYNHQQ, @marc-frank, @Claucdan, @The-Real-Thisas, @AlexKlimaj, @mjs1441, @hmz06967, @heronprecision-1, @katzfey, @osirisinferi, @LarryKarhu, @LukasLendvorsky, @bradselph
🙌 Existing Contributors
A huge thank you to our regular and returning contributors, who continue to drive Betaflight forward with ongoing improvements, feature development, bugfixes, reviews, and community support. Your dedication is what makes Betaflight possible!
- @blckmn, @ctzsnooze, @haslinghuis, @SteveCEvans, @limonspb, @ledvinap, @KarateBrot, @Quick-Flash, @bw1129, @CapnBry, @mituritsyn, @bkleiner, @cvetaevvitaliy
(For a full, up-to-date list, see https://github.com/betaflight/betaflight/graphs/contributors)
Upgrading & Feedback
As always, we recommend backing up your configuration before upgrading. Please report any issues via GitHub or join our Discord for discussions and troubleshooting. Thank you for flying Betaflight!
Full Changelog
Features
- New led functions gps bar battery bar altitude by @jonas-becker in #13404
- Add MSP support for gyro_cal_on_first_arm by @haslinghuis in #13626
- Add RSSI dBm alarm to MSP by @McGiverGim in #13682
- S-term (for wings) by @limonspb in #13679
- Add DEBUG_TASK mode by @SteveCEvans in #13799
- Piecewise linear interpolation routine (for wings) by @limonspb in #13798
- Auto-disarm on landing impact by @ctzsnooze in #13803
- Hyperbolic PID multiplier curve (for wings) by @limonspb in #13805
- Altitude hold for 4.6 by @ctzsnooze in #13816
- Added 'Storage mode' action in Blackbox part of OSD menu by @demvlad in #13899
- Minor CLI update to give a
norebootoption sosaveandexitby @blckmn in #13904 - Adding CLI command pass through for MSP by @blckmn in #13940
- Update turtle / crashflip mode by @ctzsnooze in #13905
- Log servos in blackbox by @henrywarhurst in #13944
- TPA air speed speed estimation instead of TPA delay (for wings) by @limonspb in #13895
- Yaw type rudder/diff_thrust for TPA calculations (for wings) by @limonspb in #13929
- Add PRBS checking of BB FLASH with USE_FLASH_TEST_PRBS by @SteveCEvans in #13987
- Driver for CADDX camera GM3 gimbal by @SteveCEvans in #13926
- TPA mode PDS + Wing setpoint attenuation (for wings) by @limonspb in #14010
- Collision Detection by @KarateBrot in #13010
- Position hold for 4.6 and Altitude Hold updates by @ctzsnooze in #13975
- PreArm allow Re-Arm (without resetting PreArm AUX) by @nerdCopter in #14013
- LED Dimmer by @jpmreece in #13776
- Chirp signal generator as flight mode by @pichim in #13105
- Added virtual blackbox for SITL by @demvlad in #14325
- hover point throttle curve adjustment by @marc-frank in #14229
- Add Launch Timer by @Claucdan in #14332
- Adds font write support over MSP DisplayPort by @freasy in #14391
- PICO: Adding support for standard PWM servos by @blckmn in #14787
Improvements
- Add CRSF vario sensor support by @haslinghuis in #13558
- Make Cppcheck happier revived by @haslinghuis in #13566
- Display one of four logos on arming by @SteveCEvans in #13057
- Improve features (+ cli) by @ledvinap in #13494
- Tune huffman table to save nearly 500B by @daleckystepan in #11171
- Add support for W25N02K 2Gbit/256Mbyte FLASH by @SteveCEvans in #13677
- Cleanup HAL usb driver by @blckmn in #13669
- TPA delay in ms (for wings) by @limonspb in #13662
- Allow TPA_LOW to be negative (for wings) by @limonspb in #13661
- Move launch control default to pitchonly by @blckmn in #13699
- CLEANUP: small adjustment to the legacy gyro directory by @blckmn in #13693
- Node 16 based github actions no longer supported by @blckmn in #13705
- CLEANUP: MCU file locations by @blckmn in #13692
- CLEANUP: Move flash drivers to their own directory by @blckmn in #13691
- Setpoint PID attenuation (for wings) by @limonspb in #13719
- Add altitude variant for OSD by @haslinghuis in #13716
- Put gyro debug axis in header by @bw1129 in #13752
- at32: add PC6 and PC7 as i2c pins by @bkleiner in #13760
- Add FLRC F-modes to ELRS SPI implementation by @CapnBry in #12936
- Add SPI ELRS Model Match ID by @haslinghuis in #13774
- TPA gravity factor (for wings) by @limonspb in #13778
- Increase Number of Available Dynamic Notches to 7 by @bw1129 in #13750
- Add OSD display of 2nd block of debug values by @SteveCEvans in #13800
- Add MCU ID to blackbox by @haslinghuis in #13825
- Reschedule stats saving on disarm, if quad still moving by @limonspb in #13637
- Re-name ezDisarm variables and tidying up by @ctzsnooze in #13835
- CLEANUP: Removing source wild cards from makefiles by @blckmn in #13834
- Feedforward improvements for 4.6 by @ctzsnooze in #13576
- GPS GPS_home refactor by @ledvinap in #12870
- if USE_WING is defined then define also ADVANCED_TPA and SERVOS by @limonspb in #13860
- Refactor debugType by @haslinghuis in #13866
- pinio: add set custom string for PINIO box name by @cvetaevvitaliy in #13883
- Vector library expansion by @KarateBrot in #12968
- CRSF Flight Mode Sensor Value update by @haslinghuis in #13854
- Remove d min confusion by @mituritsyn in #13908
- Use static idle value to set the initial dynamic idle limit before takeoff by @ctzsnooze in #13906
- GPS Home altitude is added to blackbox logging by @demvlad in #13939
- Some defines removed from USE_WING build that is not useful for planes by @limonspb in #13941
- Always USE_TPA_MODE by @limonspb in #13942
- Refactor Rx code and better support 25Hz links by @ctzsnooze in #13435
- Shared altitude control parameters by @ctzsnooze in #13884
- refactor motor idle, rename dshot_idle_value to motor_idle by @ctzsnooze in #13936
- Code re-organisation: src/platform/xxx for the MCU type by @blckmn in #13955
- Use wasThrottleRaised in place of isAirmodeActivated where appropriate by @ctzsnooze in #13968
- Add CRSF baro altitude sensor by @haslinghuis in #13840
- add spi nor flash support winbond W25Q64JW by @mywinchester in #13977
- Refactor gps by @ledvinap in #13853
- Add support external clock for gyro ICM42688P by @cvetaevvitaliy in #13912
- Allow configuration for ibat_lpf_period using DEFAULT_IBAT_LPF_PERIOD define by @haslinghuis in #13903
- removed RESCUE_COMPLETE from gps rescue since it's not used by @limonspb in #13993
- Refactor uart by @ledvinap in #13585
- Change default I2C adddress for IST8310 by @haslinghuis in #13995
- Angle pitch offset (for wings) by @limonspb in #14009
- Chainable vector operations by @KarateBrot in #13996
- MSP Range finder added by @ahmedsalah52 in #13980
- Logging of the S -term values in blackbox for Fixed wings. by @demvlad in #14012
- Added flight IMU pitch, roll, yaw attitudes to blackbox log by @demvlad in #14020
- Adding common source location in ./src/platform by @blckmn in #14044
- Add Winbond W25Q512J support by @haslinghuis in #14036
- ./src/platform stage 3 by @blckmn in #14051
- Adding check for speed optimised source validity by @blckmn in #14055
- Update external defines for ALT / POS HOLD by @haslinghuis in #14069
- OSD - fix macro arguments by @ledvinap in #14074
- Adjust BOX3D boxname by @haslinghuis in #14078
- Adjust info/warning status by @SteveCEvans in #14088
- Corrected missed USE_ACC logic and some minor cleanup by @blckmn in #14093
- Improve serial_post.h by @ledvinap in #14096
- opticalflow mt sensor added by @ahmedsalah52 in #14038
- Refactoring of PR 13050 - support for custom OSD messages from external device by @ledvinap in #14097
- Ditching default target for
makein favour ofmake allby @blckmn in #14099 - Adding support for UART0 by @blckmn in #14094
- Separate autopilot multirotor from autopilot wing - dummy files for wing by @limonspb in #14108
- Adds missing ACCGYRO defines and remove legacy drivers by @haslinghuis in #14087
- Moving io_def_generated to platform by @blckmn in #14120
- Move STM (and clone) related SPI implementation to platform by @blckmn in #14124
- Move STM (and clone) specific IO initialisation to platform by @blckmn in #14123
- Moved IO_GPIOPortIdx to platform by @blckmn in #14127
- Move STM (and clone) related config in flash implementation to platform by @blckmn in #14103
- FIX: Flash page size check is STM (or clone) specific by @blckmn in #14130
- FIX: explicit specification of float (build for RPI) by @blckmn in #14132
- FIX: Adding init for SPIDEV_0 by @blckmn in #14134
- FIX: Adding USE_DMA wrapper around those only available with USE_DMA active by @blckmn in #14133
- Add gyro and magnetic custom alignment to MSP by @haslinghuis in #14019
- Move STM (and clone) related UART implementation to platform by @blckmn in #14128
- FIX: RCC is platform specific by @blckmn in #14137
- Adding ability to configure USB positive data pin (PA12 is STM specific) by @blckmn in #14141
- h7: spi: SPI1 MISO add PG9 as AF option by @dakejahl in #14144
- h7: sdmmc: add SDIO_USE_PULLUP option for config.h by @dakejahl in #14147
- h7: sdmmc: add PG11 for SDIO_D2_PIN by @dakejahl in #14146
- Add IIM42653 IMU support by @dakejahl in #14095
- The imitation of GPS is added for SITL by @demvlad in #14131
- h7: sdio: allow custom clock divider by @dakejahl in #14167
- Refactor compass align defines by @haslinghuis in #14159
- Flip FM priority for ALTH / POSH (OSD, CRSF, LTM) by @haslinghuis in #14165
- Remove MCU name table from CLI (rely on build info), add MCU info MSP2 command by @blckmn in #14148
- lis2mdl: Enable OFF_CANC and BDU by @dakejahl in #14176
- Tidy up MSP protocol header by @SteveCEvans in #14166
- FIX: USE_STDPERIPH_DRIVER incorrectly defined for all targets (legacy) by @blckmn in #14181
- Improve accuracy of dT used to update RPM filter by @Quick-Flash in #14150
- Add ability to specify a config.c file for a config target by @blckmn in #14180
- Refactor SPI pre init to make it generic and usable from io.h by @blckmn in #14174
- GPS - simplify GPS baudrate handling by @ledvinap in #14195
- Refactoring motor to simplify implementation on other platforms by @blckmn in #14156
- Add 230K4 baudrate support for GPS by @haslinghuis in #14192
- h7: enable ports H and I by @dakejahl in #14199
- FIX: Missing IFDEF USE_TIMER and USE_RPM_FILTER by @blckmn in #14201
- h7: add timer pins by @dakejahl in #14153
- Remove redundant SITL ioPortDef_s array definition by @blckmn in #14202
- Refactor missing prototypes 2 by @ledvinap in #14170
- Make number of rate profiles conditional using define by @haslinghuis in #14239
- Consistent autopilot variable names, use alt_hold_climb_rate by @ctzsnooze in #14136
- Fix codestyle by @haslinghuis in #14245
- Reduce required motors for MIXER_CUSTOM_AIRPLANE by @haslinghuis in #14257
- increasing number of msp ports by @kensherman in #14263
- Adding simplified timer calls for enabling ESC Serial and Soft Serial for AT32 by @blckmn in #14228
- REFACTOR: Remove unused drivers/dma.c file by @blckmn in #14346
- Add variant for RTC OSD element by @haslinghuis in #14344
- REFACTOR: SPI segment handling by @mjs1441 in #14345
- Use opaque struct to define linker symbols for eeprom by @ledvinap in #14382
- Remove #ifdef USE_TIMER from motorConfig reset function. by @mjs1441 in #14389
- Increase the PINIO Limit to 8 by @heronprecision-1 in #14378
- PICO: Adding pico-sdk as sub module by @blckmn in #14400
- Add rangefinder TF-Nova by @LarryKarhu in #14376
- Implementation of the ICM456xx gyroscope driver by @cvetaevvitaliy in #14348
- Implementation of the ICM-40609D gyroscope driver by @cvetaevvitaliy in #14367
- Platform-dependent IO_GPIO.. functions, IO tags allow single port, more pins. by @mjs1441 in #14407
- rangefinderTF refactor + add TF-Nova by @ledvinap in #14379
- Improve 426xx detection time using soft reset by @haslinghuis in #14414
- Removing PICO directory, to be reinstated from RP2350 branch by @blckmn in #14413
- PICO: Makefile uf2 support using picotool by @blckmn in #14402
- Allow for builds with certain features disabled. by @mjs1441 in #14420
- PICO: Preparing for I2C device using I2C0 by @blckmn in #14422
- Adjusting SPI traits inline with recent i2c updates by @blckmn in #14428
- Move RCC from drivers to platform by @blckmn in #14430
- Add support for IIM42652 by @haslinghuis in #14424
- Move bus_i2c_config.c to platform by @mjs1441 in #14439
- PICO: Adding RP2350A MCU by @blckmn in #14437
- i2c changes required for I2CDEV_0 usage by @blckmn in #14443
- Removing -fsingle-precision-constant by @blckmn in #14444
- REFACTOR: Removing platform specific defines from init.c by @blckmn in #14463
- REFACTOR: More platform specific defines moved to platform by @blckmn in #14471
- Disable entering CMS menu when armed by @LukasLendvorsky in #14470
- Add 3+ IMU support (Gyro Fusion) by @Quick-Flash in #14383
- REFACTOR: Adding DMA_FIRST_HANDLER by @blckmn in #14474
- Add support for SPI DMA by @SteveCEvans in #14483
- Move beeper pwm functions to platform. by @mjs1441 in #14478
- Update the google olc code to not have compiler warnings by @Quick-Flash in #14484
- PICO: Renamed MCU FAMILY to RP2350 by @blckmn in #14497
- SITL: Minor changes to simplify platform by @blckmn in #14501
- Fix length for manufacturer and board name by @haslinghuis in #14518
- REFACTOR: Moving code sections to platform by @blckmn in #14509
- refactor dshot_decode_telemetry_value to prevent EDT data in RPM by @kedeng in #14490
- rename Dual Gyro to Multi Gyro by @nerdCopter in #14533
- SPI: Extract common preInit code from spiInternalInitStream, and fix Pico SPI implementation by @mjs1441 in #14525
- Add FORCE option to dshot_edt by @kedeng in #14532
- PICO: Implement debug pin by @blckmn in #14526
- REFACTOR: Remove platform specific defines from ./src/main for ADC by @blckmn in #14522
- PICO: Initial implementation of led strip by @blckmn in #14530
- Improve rc filter updating and initialization by @Quick-Flash in #14411
- PICO: Minor led strip clean up of logic, and rename refactoring (simplification) by @blckmn in #14603
- REFACTOR: Remove unused regions/aliases from linker scripts. by @blckmn in #14606
- REFACTOR: Renaming SPIDevice enum to the consistent pattern spiDevice_e by @blckmn in #14605
- Allow builds with USE_DSHOT_TELEMETRY but without USE_ESC_SENSOR. by @mjs1441 in #14612
- REFACTOR: Rename I2CDevice to i2cDevice_e for consistent naming pattern for enums by @blckmn in #14613
- REFACTOR: Corrected SOFT_I2C to USE_SOFT_I2C by @blckmn in #14622
- Replace powf (a, 2) with sq(a) by @ctzsnooze in #14609
- REFACTOR: Minor enum cleanup by @blckmn in #14621
- PRE-RELEASE: Preparing for beta release named 2025.12.0-beta by @blckmn in #14642
- allow custom define for MAX_CHANNEL_ACTIVATION_CONDITION_COUNT by @nerdCopter in #14630
- GYRO: Remove ability for user to set the gyro alignment at run time. by @blckmn in #14648
- Updating CLI device output for status command by @blckmn in #14650
- Ghost: adding armed status to telemetry by @MatajZ in #14623
- Added flow control for MAVLink telemetry by @demvlad in #14651
- Sanatize TARGET_BOARD_IDENTIFIER by @haslinghuis in #14671
- Independent D_Max Advance by @ctzsnooze in #14629
- Update gyro sensor info by @haslinghuis in #14677
- GYRO: Remove ability to set custom gyro alignment by @blckmn in #14688
- MAVLink serial RX provider by @demvlad in #14681
- PICO RP2350 bidirectional dshot by @mjs1441 in #14618
- Adding support for MAVlink 460K8 baudrate by @haslinghuis in #14697
- Safety Improvement (crashflip): Introduce explicit auto-rearm control by @nerdCopter in #14734
- Added flash driver def for Cypress S25FL128S. by @ThomasVestergaard in #14751
- QMC5883 unified driver for L and P variant by @haslinghuis in #14713
- MAVLink data streams rates are added into cli settings by @demvlad in #14729
- Implement SPI DMA support on QSPI interface by @SteveCEvans in #14748
- Support for XMC flash chip XM25QH256B by @fpvfeline in #14737
- NED velocities are added into GPS data by @demvlad in #14762
- Refactor crashflip to fix issues reported while disarmed by @ctzsnooze in #14777
Fixes
- battery - fix BATTERY_NOT_PRESENT detection, detection logic change by @ledvinap in #13599
- Fix ICM20469 by @haslinghuis in #13616
- minor define fixes found during documentation work by @ctzsnooze in #13631
- Update CRSF spec by @haslinghuis in #13614
- Remove superfluous checks of useDshotTelemetry by @SteveCEvans in #13633
- GPS Rescue using MSP is not getting Velocity to Home by @AZDane in #13639
- Do not enable features by default by @haslinghuis in #13608
- Fix Wstringop-overflow warning on latest ARM SDK by @haslinghuis in #13659
- FIX: make: Circular configs <- configs dependency dropped. by @blckmn in #13695
- Set next state expected time on per element basis by @SteveCEvans in #13706
- FIX: Broken nightly build by @blckmn in #13718
- Fix redundant debug by @haslinghuis in #13711
- FIX: Release build asset name change by @blckmn in #13722
- Update to LSM6DSV16X gyro driver by @SteveCEvans in #13724
- Fixes #13664 - Smartaudio don't work with Softserial by @Hochmueller in #13715
- fix at32 serial bidir pp od init and smart audio by @bkleiner in #13764
- Read gyro data from correct lsm6dsv16x registers by @SteveCEvans in #13784
- Fix unused variable compile time error by @SteveCEvans in #13707
- Fix flash_scan by @SteveCEvans in #13789
- FIX: make: Circular configs <- configs dependency dropped. #13695 by @blckmn in #13815
- Fix telemetry for Spektrum/SRXL by @haslinghuis in #13814
- Modify STM32F405 UID Address for MSC Enumeration by @ainosukii in #13769
- Fix searching a resource by @anti-social in #13826
- bbx 3d speed when gps_use_3d_speed==true by @limonspb in #13831
- Fix d adjustment by @mituritsyn in #13822
- Split OSD element rendering into draw and display states by @SteveCEvans in #13813
- Disable SPA for angle mode - fix (for wings) by @limonspb in #13848
- Fix angle mode rate profile change bug by @ctzsnooze in #13862
- Apply iterm_windup per-axis by limiting iTerm based on pidSum by @ctzsnooze in #13543
- Fix sbufReadData by @haslinghuis in #13869
- cli - fix gpspassthrouh when GPS port is not open by @ledvinap in #13878
- MSP - fix buffers in MSP_MULTIPLE_MSP by @ledvinap in #13881
- Fix FEATURE_RX_PPM by @haslinghuis in #13891
- rc-modes bugfix - prevent buffer overflow when serializing box names by @ledvinap in #13880
- Fix MSP output buffer overflow by @haslinghuis in #13879
- OSD background rendering by @SteveCEvans in #13897
- Fix: the wrong ability to turn on HORIZON_MODE without ACC sensors by @demvlad in #13892
- Fixes #13220: Fix kiss esc passthrough, Fix castle (escprog cc) command. by @KissUltra in #13911
- Don't consider a prior I2C NACK to indicate the bus to be busy by @SteveCEvans in #13917
- Fix: Hyperbolic TPA curve initialization (for wings) by @limonspb in #13932
- Fix DMax calculations by @ctzsnooze in #13933
- Fix custom box names by @haslinghuis in #13935
- Fix build when using SRXL telemetry by @haslinghuis in #13947
- Make telemetry default for jeti by @haslinghuis in #13951
- Fixes #13934: Fix motor(PWM protocol) spin while fc reset. by @kedeng in #13937
- Make the imuGyroFilter actually filter by @Quick-Flash in #13961
- Fix pt2 and pt3 filter initialization in gyro_init.c by @Quick-Flash in #13960
- Fixes #13930: fix timer based bidirectional dshot command not working issue by @kedeng in #13978
- Fix SITL build by @haslinghuis in #13972
- Fix SmartAudio (STM32F4) by @haslinghuis in #13797
- Make three attempts to not only write to FLASH, but also validate it by @SteveCEvans in #14001
- Serial refactor fix by @ledvinap in #14007
- Revert restriction of reading across page boundary by @SteveCEvans in #14015
- Workaround: SERIAL_CHECK_TX is broken on F7 by @ledvinap in #14052
- Fixed FLIGHT_MODE(PASSTHRU_MODE) not displayed in OSD by @vmzhivetyev in #14054
- Fix arming disable flag and OSD warning buffer size by @haslinghuis in #14057
- AT32 SD card support by @SteveCEvans in #14070
- Fix PPM feature by @haslinghuis in #14072
- MAKE - improvement by @ledvinap in #14079
- Don't handle non-MSP characters on VTX MSP port by @SteveCEvans in #14091
- Position hold depends on GPS by @haslinghuis in #14101
- update serTcpOpen declaration to fix compile errors by @DrAtomic in #14113
- AT32F435 SD card support by @SteveCEvans in #14018
- Initialize all assigned servos even if some are missing (fix) by @limonspb in #14121
- Fixed - reset all PID controller terms when PASSTHRU_MODE is active by @vmzhivetyev in #14058
- FIX: Adding RP2350B as MCU type and correcting lookup table error by @blckmn in #14138
- FIX: Missing USE_DMA conditions by @blckmn in #14139
- Leave SPI CPOL/CPHA at default for SD card by @SteveCEvans in #14142
- FIX: Invalid references when neither DSHOT nor PWM_OUTPUT is defined. by @blckmn in #14135
- Don't waste time displaying an empty OSD string by @SteveCEvans in #14152
- lis2mdl: fix align define typo by @dakejahl in #14154
- mag: lis2mdl: fix axes by @dakejahl in #14155
- Fix STM32G4 SPI2/SPI3 busses running at double intended clock rate by @SteveCEvans in #14160
- Serial - BUGFIX - USART10 instead of UART10 by @ledvinap in #14171
- AT32 - invalid names of timer IRQ handlers by @ledvinap in #14172
- config submodule - follow master by @ledvinap in #14175
- Fix missing ACCGYRO custom alignment defines (used in config) by @haslinghuis in #14092
- By default mark OSD element as rendered in case it's in the off blink state (#14188) by @SteveCEvans in #14189
- FIX: REVISION length not more than 7 symbols by @Stepandrr in #14151
- Fix GPS UART representation (status command) by @haslinghuis in #14193
- Update mag_declination range in settings.c by @ot0tot in #14206
- Fix G4 SPI clock being double what it should be by @SteveCEvans in #14207
- Fix GYRO_CLKIN by @haslinghuis in #14213
- FIX: Serial ESC communication when using digital protocols by @blckmn in #14214
- FIX: AT32 not reading ESC by @blckmn in #14220
- Fix MSP memory issue by @jefffhaynes in #14221
- fix compilation without ACC by @ledvinap in #14218
- Fix PG ID and corruption in MSP_SET_SENSOR_CONFIG by @haslinghuis in #14230
- lis2mdl: fix read by @dakejahl in #14227
- Fix opticalflow detection (msp) by @haslinghuis in #14241
- CLI - prevent serial overflow by @ledvinap in #14251
- STM32G4: Add option to use external 26 MHz clock by @crteensy in #14261
- Maintain state for i2c_ev_handler() for each i2c bus by @SteveCEvans in #14268
- Blackbox - IMU quaternion - fix case when w is negative by @ledvinap in #14275
- Update io_preinit.c by @haslinghuis in #14273
- Properly handle HSI if selected by @crteensy in #14259
- Fix virtualled by @ledvinap in #14276
- fix: led strip not working (#14279) by @fluke9 in #14286
- Change airborne default by @haslinghuis in #14271
- Fix gimbalCmdIn.u.crc to gimbalCmdIn.u.gimbalCmd.crc by @nerdCopter in #14311
- Add NULL check for vTable->decodeTelemetry by @kedeng in #14321
- fix: missing sitl motor count by @AJ92 in #14319
- Revert GPS flight model change by @haslinghuis in #14333
- Jetiexbus -> function unused without GPS enabled. by @blckmn in #14336
- fix rtc6705 drive by @LYNHQQ in #14296
- Properly handle USE_BARO_LPS22DF by @SteveCEvans in #14340
- Fix ATRN by @haslinghuis in #14360
- Fix turtle mode motor direction on rearm by @haslinghuis in #14362
- throttle lookup table increase size, fix linear interpolation and improve bezier interpolation logic by @marc-frank in #14356
- fix format overflow in blackboxVirtualBeginLog by @DrAtomic in #14373
- Update pwm_output_hw.c by @hmz06967 in #14385
- Fix compiler errors if you remove -flto=auto from standard build flags by @mjs1441 in #14381
- Fix osd_esc_rpm_alarm by @haslinghuis in #14361
- Changed logical OR to bitwise OR in register value definitions by @katzfey in #14395
- Added float specifier to literal to prevent compile error by @katzfey in #14396
- Added missing GCC diagnostic push pragma by @katzfey in #14397
- Fix inevitable timer overflow by @haslinghuis in #14374
- Initialized a local variable that could otherwise be used uninitialized by @katzfey in #14399
- Move flash_read arguments around in CLI help by @osirisinferi in #14404
- EXTI priority by @SteveCEvans in #14401
- Only wait for ESC to recognise DSHOT signal once at startup by @SteveCEvans in #14408
- Ensure that crash flip behaviour is consistent on every arm attempt by @SteveCEvans in #14410
- Add missing OCTOX8P definition by @SteveCEvans in #14418
- Fix ICM40609D reset register by @haslinghuis in #14415
- Fix misplaced #else/#endif in accgyro_spi_icm456xx.c by @mjs1441 in #14445
- Removed extraneous parentheses to resolve compiler warning by @katzfey in #14441
- Pico - fix getCycleCounter by @mjs1441 in #14446
- Remove duplicate files from source.mk by @katzfey in #14448
- Fix uninitialised loop variable in msp.c by @mjs1441 in #14479
- Fix ICM426XX_RA_DEVICE_CONFIG by @SteveCEvans in #14487
- Move DMA IRQ acknowledge to before the callback as it's edge triggered by @SteveCEvans in #14514
- Fix missing #if for PINIO_COUNT by @mjs1441 in #14515
- Fix a CLI status crash when no gyro present by @mjs1441 in #14524
- accgyro_mpu initialise gyro->segments. by @mjs1441 in #14528
- Fix incorrect TIMUP DMA configuration dump on H743 by @kedeng in #14502
- FIX: Skip undetected gyros (blocking VCP connection) by @haslinghuis in #14543
- Fix IMU switching by @haslinghuis in #14552
- 🔧 Fix timer wraparound issue when tring to arm by @haslinghuis in #14562
- Fix QMC5883L oversampling by @haslinghuis in #14555
- Add missing DMA request for PB9 on STM32G4 by @haslinghuis in #14557
- Backport Jeti fixes by @haslinghuis in #14578
- PICO Fix: don't use IO_Pin(0) in exti_pico.c. Implement EXTIRelease by @mjs1441 in #14583
- Fix ADC by @haslinghuis in #14584
- Fix camera control by @haslinghuis in #14580
- Enable telemetry by default by @haslinghuis in #14579
- BUG: CAMERA_CONTROL_SOFTWARE_PWM_AVAILABLE not available on F411 (only F405) by @blckmn in #14597
- Default to 2 point FF averaging and alter debug by @ctzsnooze in #14600
- Fix RPM alarm check by @haslinghuis in #14566
- Fix configurator status crash when no osdDisplayPort. by @mjs1441 in #14614
- BUGFIX: Inoperative ADC due to internal readings returning 0 by @blckmn in #14628
- IBUS: Add defensive bounds checking to extended channel parsing by @valeriyvan in #14631
- fix-undefined-customAlignment1-variable by @bradselph in #14644
- Fix mag custom alignment configuration by @haslinghuis in #14637
- Fix FrSky OSD by @haslinghuis in #14640
- Switch to ODR 10Hz and 512 sample averaging at STMicroelectronics' request by @SteveCEvans in #14633
- Prioritise SPI RX DMA over TX to prevent overrun by @SteveCEvans in #14656
- Add a NOP to give processor time to handle interrupts by @SteveCEvans in #14658
- Fix tautological comparison in APM32F4 USB wake-up handler by @Copilot in #14653
- sensors: esc: fix temperature encoding, int8 to uint8 by @dakejahl in #14657
- Fix MSP OSD initialization stuck in OSD_STATE_INIT by @chibaron in #14675
- BUG: Custom config location (when using BETAFLIGHT_CONFIG) throws errors if not a valid git repo by @blckmn in #14674
- Use octal escape for preprocessor guard hash by @SupaflyFPV in #14676
- Fix gyro enable mask field by @haslinghuis in #14684
- Fix RC smoothing by @haslinghuis in #14683
- Correctly right align new version string in OSD by @SteveCEvans in #14696
- Resolved mavlink telemetry transmit data issue by @demvlad in #14700
- Fix Dshot Beacon Logic by @SupaflyFPV in #14672
- Initialize 8 servos when available in the target (instead of 4) by @limonspb in #14703
- Fix BEEPER_GET_FLAG macro by @KarateBrot in #14704
- Added MAVLink telemetries battery status data send by @demvlad in #14701
- Fix: add non-string attribute to prevent unterminated string initialization warning by @haslinghuis in #14708
- MAVLink serial RX providers improvement by @demvlad in #14702
- PICO IOConfigGPIO don't change output level when calling a second time by @mjs1441 in #14707
- The radio links quality is added into MAVLink serial RX provider by @demvlad in #14719
- fix(icm456xx): Remove invalid bank select register writes and add proper initialization by @nerdCopter in #14733
- Fix QMC5883P detection by @haslinghuis in #14782
- Fix detection for QMC5883L using mode mask by @haslinghuis in #14785
- Fix ICM45686 by @haslinghuis in #14766
- Fix openEscSerial by @haslinghuis in #14794
- Fix MSPv2 over SmartPort: repeated START frames after header-only first chunk by @robthomson in #14749
- cli: strToPin: handle Port I by @dakejahl in #14802
- FIX: Return initialisation to exact order for AT32 by @blckmn in #14804
- fix bug in crashflip auto rearm mode by @ctzsnooze in #14803
- Fix QSPI flash detection on STM32 MCUs. by @hydra in #14824
- Cli - Fix a bug with
flash_write. by @hydra in #14826 - Fix w25n flash read by @hydra in #14827
- Added backwards compatibility for motor protocols by @haslinghuis in #14840
- Fix CLI flash_erase command (for W25N01G) by @haslinghuis in #14839
Targets
- Fix stm32h730 hardcoded target IO by @hydra in #13604
- Adding initial H563 target files in preparation by @blckmn in #13686
- Initiate APM32F40X MCU Support in Betaflight by @LuckkMaker in #13709
- Add apm32f405/f407 support by @LuckkMaker in #13796
- Update timer_at32f43x.c by @ot0tot in #13909
- Move USE_SOFTSERIAL to build options by @haslinghuis in #13305
- Adding RP2350 SDK and target framework by @blckmn in #13988
- PICO changes by @blckmn in #14105
- Add SPI_DEVICE_4 to AT32 targets by @haslinghuis in #14255
- Add PB0 to AT32 SPI3 mosi pins by @haslinghuis in #14324
- STM32H7 add UART4 pins by @AlexKlimaj in #14341
- PICO: Adding PICO tooling to CI by @blckmn in #14503
- Allow OSD on RP2350B target by @SteveCEvans in #14538
- PICO RP2350 target updates by @mjs1441 in #14588
- PICO: Adding ADC by @blckmn in #14587
- PICO trace use defines from config to select UART pins. by @mjs1441 in #14610
- PICO: Adding reboot to flashing rom (like DFU) by @blckmn in #14634
- Add support for PICO onboard QSPI FLASH by @SteveCEvans in #14607
- stm32g4: add QSPI support by @Jorropo in #14586
- PICO - New PIO-based UART devices PIOUART0, PIOUART1 by @mjs1441 in #14635
- H735 working (on the CHONKERH735 hardware) by @RubberQuads in #14669
- Enable SPI6 on H7 by @haslinghuis in #14717
- Add SPI pins for larger H7 packages by @osirisinferi in #14711
- Fix AT32F435 I2C GPIO MUX by @ot0tot in #14778
- Add multi-core support offloading interrupt handling to the second core by @SteveCEvans in #14796
New Contributors
- @jonas-becker made their first contribution in #13404
- @AZDane made their first contribution in #13639
- @Hochmueller made their first contribution in #13715
- @LuckkMaker made their first contribution in #13709
- @ainosukii made their first contribution in #13769
- @anti-social made their first contribution in #13826
- @kedeng made their first contribution in #13841
- @demvlad made their first contribution in #13899
- @KissUltra made their first contribution in #13911
- @henrywarhurst made their first contribution in #13944
- @mywinchester made their first contribution in #13977
- @ahmedsalah52 made their first contribution in #13980
- @vmzhivetyev made their first contribution in #14054
- @timmyfpv made their first contribution in #14065
- @jpmreece made their first contribution in #13776
- @DrAtomic made their first contribution in #14113
- @dakejahl made their first contribution in #14144
- @Stepandrr made their first contribution in #14151
- @ggabriel-airmod made their first contribution in #14212
- @jefffhaynes made their first contribution in #14221
- @kensherman made their first contribution in #14263
- @fluke9 made their first contribution in #14286
- @LYNHQQ made their first contribution in #14296
- @marc-frank made their first contribution in #14229
- @Claucdan made their first contribution in #14332
- @The-Real-Thisas made their first contribution in #14284
- @AlexKlimaj made their first contribution in #14341
- @mjs1441 made their first contribution in #14345
- @hmz06967 made their first contribution in #14385
- @heronprecision-1 made their first contribution in #14378
- @katzfey made their first contribution in #14395
- @osirisinferi made their first contribution in #14404
- @LarryKarhu made their first contribution in #14376
- @LukasLendvorsky made their first contribution in #14470
- @bradselph made their first contribution in #14644
- @chexov made their first contribution in #14647
- @Jorropo made their first contribution in #14586
- @Copilot made their first contribution in #14653
- @MatajZ made their first contribution in #14623
- @RubberQuads made their first contribution in #14669
- @ThomasVestergaard made their first contribution in #14751
- @jianpingwu1 made their first contribution in #14519
- @fpvfeline made their first contribution in #14737
- @robthomson made their first contribution in #14749
Full Changelog: 4.5.0...2025.12.1