From 0ae97d305f2312f80b2eaf8d010b15f2e29307df Mon Sep 17 00:00:00 2001 From: Ray Morris Date: Thu, 20 Aug 2026 12:33:42 -0500 Subject: [PATCH 1/5] Fix silent DSHOT loss on 11 F4/F7 targets from shared DMA request lines Several targets declared two motor outputs on DMA-option indices (dmavar) that resolve to the identical DMA stream. The firmware claims DMA in strict motor-init order and silently drops DSHOT on whichever output initializes second, with no boot-time error, so the affected output never spins under DSHOT. Fixed by moving the losing output to an alternate dmavar/timer-channel option on the same physical pin (no rewiring needed) where one exists, verified with simulate_pwm_roles.py's DMA-stream-collision check. BEEROTORF4 has two collisions where both sides are hard-wired to the same DMA stream with no alternative; documented with a comment instead since there is no fix available on this hardware revision. --- src/main/target/AIKONF4/target.c | 4 ++-- src/main/target/ATOMRCF405MINI/target.c | 4 ++-- src/main/target/ATOMRCF405NAVI/target.c | 4 ++-- src/main/target/BEEROTORF4/target.c | 6 +++--- src/main/target/FF_PIKOF4/target.c | 8 ++++---- src/main/target/FISHDRONEF4/target.c | 4 ++-- src/main/target/FRSKYF4/target.c | 2 +- src/main/target/FRSKYPILOT/target.c | 6 +++--- src/main/target/PIXRACER/target.c | 4 ++-- src/main/target/TMOTORF7/target.c | 4 ++-- src/main/target/WARPF7/target.c | 2 +- 11 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/main/target/AIKONF4/target.c b/src/main/target/AIKONF4/target.c index 4268fd1864a..f574826294f 100644 --- a/src/main/target/AIKONF4/target.c +++ b/src/main/target/AIKONF4/target.c @@ -30,8 +30,8 @@ timerHardware_t timerHardware[] = { // DEF_TIM(TIM2, CH2, PB3, TIM_USE_CAMERA_CONTROL, 0, 0), // There is not camera control in INAV DEF_TIM(TIM8, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0), // S1 - DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 0), // S2 - DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 0), // S3 + DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 1), // S2 -- dmavar 1: dedicated stream, avoids sharing S1's combined-channel request + DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 1), // S3 -- dmavar 1: dedicated stream, avoids sharing S1's combined-channel request DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0), // S4 DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), // S5 DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), // S6 diff --git a/src/main/target/ATOMRCF405MINI/target.c b/src/main/target/ATOMRCF405MINI/target.c index 7ff7ac3c39d..8292c6f6b96 100644 --- a/src/main/target/ATOMRCF405MINI/target.c +++ b/src/main/target/ATOMRCF405MINI/target.c @@ -37,10 +37,10 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 0), // S1 DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0), // S2 DEF_TIM(TIM1, CH1, PA8, TIM_USE_OUTPUT_AUTO, 0, 0), // S3 - DEF_TIM(TIM1, CH3N, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), // S4 + DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), // S4 -- moved off TIM1_CH3N (DMA-stuck sharing S3's stream on both dmavar options) DEF_TIM(TIM2, CH1, PA15, TIM_USE_OUTPUT_AUTO, 0, 0), // S5 DEF_TIM(TIM2, CH3, PB10, TIM_USE_OUTPUT_AUTO, 0, 0), // S6 - DEF_TIM(TIM2, CH4, PB11, TIM_USE_OUTPUT_AUTO, 0, 0), // S7 + DEF_TIM(TIM2, CH4, PB11, TIM_USE_OUTPUT_AUTO, 0, 1), // S7 -- dmavar 1: dedicated stream, avoids sharing S8's DMA1 Stream7 DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), // S8 DEF_TIM(TIM4, CH2, PB7, TIM_USE_LED, 0, 0), // LED_STRIP diff --git a/src/main/target/ATOMRCF405NAVI/target.c b/src/main/target/ATOMRCF405NAVI/target.c index 7ff7ac3c39d..8292c6f6b96 100644 --- a/src/main/target/ATOMRCF405NAVI/target.c +++ b/src/main/target/ATOMRCF405NAVI/target.c @@ -37,10 +37,10 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 0), // S1 DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0), // S2 DEF_TIM(TIM1, CH1, PA8, TIM_USE_OUTPUT_AUTO, 0, 0), // S3 - DEF_TIM(TIM1, CH3N, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), // S4 + DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), // S4 -- moved off TIM1_CH3N (DMA-stuck sharing S3's stream on both dmavar options) DEF_TIM(TIM2, CH1, PA15, TIM_USE_OUTPUT_AUTO, 0, 0), // S5 DEF_TIM(TIM2, CH3, PB10, TIM_USE_OUTPUT_AUTO, 0, 0), // S6 - DEF_TIM(TIM2, CH4, PB11, TIM_USE_OUTPUT_AUTO, 0, 0), // S7 + DEF_TIM(TIM2, CH4, PB11, TIM_USE_OUTPUT_AUTO, 0, 1), // S7 -- dmavar 1: dedicated stream, avoids sharing S8's DMA1 Stream7 DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), // S8 DEF_TIM(TIM4, CH2, PB7, TIM_USE_LED, 0, 0), // LED_STRIP diff --git a/src/main/target/BEEROTORF4/target.c b/src/main/target/BEEROTORF4/target.c index aa4d4893bf1..d08a6f35bf7 100644 --- a/src/main/target/BEEROTORF4/target.c +++ b/src/main/target/BEEROTORF4/target.c @@ -27,12 +27,12 @@ timerHardware_t timerHardware[] = { // DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // PPM IN DEF_TIM(TIM1, CH2N, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), // M1 - DMAR: DMA2_ST5 - DEF_TIM(TIM1, CH3N, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), // M2 - + DEF_TIM(TIM1, CH3N, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), // M2 - shares M1's DMA stream (TIM1_CH3N has no other option on PB1); DSHOT does not work on M2 DEF_TIM(TIM2, CH2, PA1, TIM_USE_OUTPUT_AUTO, 0, 0), // M3 - DMAR: DMA1_ST7 DEF_TIM(TIM2, CH1, PA0, TIM_USE_OUTPUT_AUTO, 0, 0), // M4 - DEF_TIM(TIM8, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0), // M5 - DMAR: DMA2_ST1 - DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 0), // M6 - - DEF_TIM(TIM3, CH2, PB5, TIM_USE_OUTPUT_AUTO, 0, 0), // M7 - DMAR: DMA1_ST2 + DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 1), // M6 - dmavar 1: dedicated stream, avoids sharing M5's combined-channel request + DEF_TIM(TIM3, CH2, PB5, TIM_USE_OUTPUT_AUTO, 0, 0), // M7 - DMAR: DMA1_ST2 - shares M4's DMA stream (TIM2_CH1/TIM3_CH2 both have only one DMA option); DSHOT does not work on M7 DEF_TIM(TIM4, CH4, PB9, TIM_USE_OUTPUT_AUTO, 0, 0), // M8 - DMAR: DMA1_ST6 DEF_TIM(TIM4, CH3, PB8, TIM_USE_LED, 0, 0), // LED_STRIP / TRANSPONDER - DMA1_ST7 diff --git a/src/main/target/FF_PIKOF4/target.c b/src/main/target/FF_PIKOF4/target.c index 581dcd588ef..4bfd32c6175 100644 --- a/src/main/target/FF_PIKOF4/target.c +++ b/src/main/target/FF_PIKOF4/target.c @@ -26,14 +26,14 @@ timerHardware_t timerHardware[] = { #if defined(FF_PIKOF4OSD) - DEF_TIM(TIM2, CH4, PA3, TIM_USE_OUTPUT_AUTO, 0, 0 ), + DEF_TIM(TIM2, CH4, PA3, TIM_USE_OUTPUT_AUTO, 0, 1 ), // dmavar 1: dedicated stream, avoids sharing TIM3_CH3's DMA1 Stream7 (TIM3_CH3 has no other option) DEF_TIM(TIM3, CH3, PB1, TIM_USE_OUTPUT_AUTO, 0, 0 ), DEF_TIM(TIM5, CH3, PA2, TIM_USE_OUTPUT_AUTO, 0, 0 ), DEF_TIM(TIM3, CH4, PB0, TIM_USE_OUTPUT_AUTO, 0, 0 ), - DEF_TIM(TIM12, CH1, PB14, TIM_USE_OUTPUT_AUTO, 0, 0 ), - DEF_TIM(TIM12, CH2, PB15, TIM_USE_OUTPUT_AUTO, 0, 0 ), + DEF_TIM(TIM12, CH1, PB14, TIM_USE_OUTPUT_AUTO, 0, 0 ), // no DMA request line on this MCU for TIM12 -- DSHOT will not work on this output regardless of dmavar + DEF_TIM(TIM12, CH2, PB15, TIM_USE_OUTPUT_AUTO, 0, 0 ), // no DMA request line on this MCU for TIM12 -- DSHOT will not work on this output regardless of dmavar #else - DEF_TIM(TIM2, CH4, PA3, TIM_USE_OUTPUT_AUTO, 0, 0 ), + DEF_TIM(TIM2, CH4, PA3, TIM_USE_OUTPUT_AUTO, 0, 1 ), // dmavar 1: dedicated stream, avoids sharing TIM3_CH3's DMA1 Stream7 (TIM3_CH3 has no other option) DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0 ), DEF_TIM(TIM5, CH3, PA2, TIM_USE_OUTPUT_AUTO, 0, 0 ), DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0 ), diff --git a/src/main/target/FISHDRONEF4/target.c b/src/main/target/FISHDRONEF4/target.c index 93354b51758..401f45d0fae 100644 --- a/src/main/target/FISHDRONEF4/target.c +++ b/src/main/target/FISHDRONEF4/target.c @@ -33,8 +33,8 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM12, CH1, PB14, TIM_USE_OUTPUT_AUTO, 0, 0 ), DEF_TIM(TIM12, CH2, PB15, TIM_USE_OUTPUT_AUTO, 0, 0 ), DEF_TIM(TIM8, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0 ), - DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 0 ), - DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 0 ), + DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 1 ), // dmavar 1: dedicated stream, avoids sharing TIM8_CH1's combined-channel request + DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 1 ), // dmavar 1: dedicated stream, avoids sharing TIM8_CH1's combined-channel request DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0 ), DEF_TIM(TIM3, CH4, PB1, TIM_USE_LED, 0, 0 ), diff --git a/src/main/target/FRSKYF4/target.c b/src/main/target/FRSKYF4/target.c index cd83979c505..4a7aa591325 100755 --- a/src/main/target/FRSKYF4/target.c +++ b/src/main/target/FRSKYF4/target.c @@ -25,7 +25,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 1, 0), // S1_OUT DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 1, 0), // S2_OUT - DEF_TIM(TIM2, CH4, PA3, TIM_USE_OUTPUT_AUTO, 1, 0), // S3_OUT + DEF_TIM(TIM2, CH4, PA3, TIM_USE_OUTPUT_AUTO, 1, 1), // S3_OUT -- dmavar 1: dedicated stream, avoids sharing S1_OUT's DMA stream DEF_TIM(TIM2, CH3, PA2, TIM_USE_OUTPUT_AUTO, 1, 0), // S4_OUT DEF_TIM(TIM5, CH2, PA1, TIM_USE_OUTPUT_AUTO, 1, 0), // S5_OUT DEF_TIM(TIM1, CH1, PA8, TIM_USE_OUTPUT_AUTO, 1, 0), // S6_OUT diff --git a/src/main/target/FRSKYPILOT/target.c b/src/main/target/FRSKYPILOT/target.c index 95989f5f42a..fabee0084ab 100644 --- a/src/main/target/FRSKYPILOT/target.c +++ b/src/main/target/FRSKYPILOT/target.c @@ -32,12 +32,12 @@ BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, timerHardware_t timerHardware[] = { DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), // S1 DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), // S2 - DEF_TIM(TIM1, CH1, PE9, TIM_USE_OUTPUT_AUTO, 0, 0), // S3 - DEF_TIM(TIM1, CH2, PE11, TIM_USE_OUTPUT_AUTO, 0, 0), // S4 + DEF_TIM(TIM1, CH1, PE9, TIM_USE_OUTPUT_AUTO, 0, 1), // S3 -- dmavar 1: dedicated stream, avoids sharing S5's combined-channel request + DEF_TIM(TIM1, CH2, PE11, TIM_USE_OUTPUT_AUTO, 0, 1), // S4 -- dmavar 1: dedicated stream, avoids sharing S3's (default) combined-channel request DEF_TIM(TIM1, CH3, PE13, TIM_USE_OUTPUT_AUTO, 0, 0), // S5 DEF_TIM(TIM1, CH4, PE14, TIM_USE_OUTPUT_AUTO, 0, 0), // S6 DEF_TIM(TIM4, CH2, PB7, TIM_USE_OUTPUT_AUTO, 0, 0), // S7 - DEF_TIM(TIM4, CH3, PB8, TIM_USE_OUTPUT_AUTO, 0, 0), // S8 + DEF_TIM(TIM4, CH3, PB8, TIM_USE_OUTPUT_AUTO, 0, 0), // S8 -- shares S1's DMA stream (TIM4_CH3 has no other dmavar option); DSHOT does not work on S8 DEF_TIM(TIM4, CH4, PB9, TIM_USE_OUTPUT_AUTO, 0, 0), // S9 DEF_TIM(TIM2, CH2, PA1, TIM_USE_OUTPUT_AUTO, 0, 0), // S10 DEF_TIM(TIM2, CH3, PB10, TIM_USE_OUTPUT_AUTO, 0, 0), // S11 diff --git a/src/main/target/PIXRACER/target.c b/src/main/target/PIXRACER/target.c index 2364e60aec5..58226883e0e 100755 --- a/src/main/target/PIXRACER/target.c +++ b/src/main/target/PIXRACER/target.c @@ -41,8 +41,8 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM1, CH4, PE14, TIM_USE_OUTPUT_AUTO, 0, 0), // S1_OUT DEF_TIM(TIM1, CH3, PE13, TIM_USE_OUTPUT_AUTO, 0, 0), // S2_OUT - DEF_TIM(TIM1, CH2, PE11, TIM_USE_OUTPUT_AUTO, 0, 0), // S3_OUT - DEF_TIM(TIM1, CH1, PE9, TIM_USE_OUTPUT_AUTO, 0, 0), // S4_OUT + DEF_TIM(TIM1, CH2, PE11, TIM_USE_OUTPUT_AUTO, 0, 1), // S3_OUT -- dmavar 1: dedicated stream, avoids sharing S2_OUT's combined-channel request + DEF_TIM(TIM1, CH1, PE9, TIM_USE_OUTPUT_AUTO, 0, 1), // S4_OUT -- dmavar 1: dedicated stream, avoids sharing S2_OUT's combined-channel request DEF_TIM(TIM4, CH2, PD13, TIM_USE_OUTPUT_AUTO, 0, 0), // S5_OUT DEF_TIM(TIM4, CH3, PD14, TIM_USE_OUTPUT_AUTO, 0, 0), // S6_OUT diff --git a/src/main/target/TMOTORF7/target.c b/src/main/target/TMOTORF7/target.c index 0af36aa68ce..ba3d6ecd039 100644 --- a/src/main/target/TMOTORF7/target.c +++ b/src/main/target/TMOTORF7/target.c @@ -30,12 +30,12 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM8, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 1), - DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 1), + DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 0), // dmavar 0: dedicated stream on F7 (index order is reversed vs F4 for TIM8 CH1-3), avoids sharing CH1's combined-channel request DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), DEF_TIM(TIM4, CH1, PB6, TIM_USE_OUTPUT_AUTO, 0, 0), - DEF_TIM(TIM4, CH3, PB8, TIM_USE_OUTPUT_AUTO, 0, 0), + DEF_TIM(TIM4, CH3, PB8, TIM_USE_OUTPUT_AUTO, 0, 0), // shares TIM3_CH3's DMA stream (both have only one DMA option); DSHOT does not work on this output // DEF_TIM(TIM2, CH1, PA15, TIM_USE_PPM, 0, 0), DEF_TIM(TIM11, CH1, PB9, TIM_USE_ANY, 0, 0), diff --git a/src/main/target/WARPF7/target.c b/src/main/target/WARPF7/target.c index 0d5e35b9255..a3a4263729e 100644 --- a/src/main/target/WARPF7/target.c +++ b/src/main/target/WARPF7/target.c @@ -40,7 +40,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM2, CH3, PB10, TIM_USE_OUTPUT_AUTO, 0, 0), // S3 - DEF_TIM(TIM2, CH4, PB11, TIM_USE_OUTPUT_AUTO, 0, 0), // S4 + DEF_TIM(TIM2, CH4, PB11, TIM_USE_OUTPUT_AUTO, 0, 1), // S4 -- dmavar 1: dedicated stream, avoids sharing S1's DMA stream // DEF_TIM(TIM3, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0), // S5 DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0), From 52fa09dc20c9be6369d6d1bd3c0a2786f001decf Mon Sep 17 00:00:00 2001 From: Ray Morris Date: Thu, 20 Aug 2026 23:16:21 -0500 Subject: [PATCH 2/5] Document unfixable DMA stream collision on NEXUSX/VANTAC_RF007 TAIL TIM2_CH1 (TAIL, PA15) and TIM3_CH2 (S2, PB5) both resolve to DMA1 Stream5 and both have exactly one DMA option in the F7 table -- no alternate dmavar or same-pin timer channel exists on either side, so this can't be fixed without a PCB rewire. Same known-unfixable pair already documented on BEEROTORF4's M4/M7. TAIL loses the claim and DSHOT silently doesn't work on it. Comment-only change; both targets build clean. --- src/main/target/NEXUSX/target.c | 2 +- src/main/target/VANTAC_RF007/target.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/target/NEXUSX/target.c b/src/main/target/NEXUSX/target.c index 799dc762322..1ebed2cad38 100644 --- a/src/main/target/NEXUSX/target.c +++ b/src/main/target/NEXUSX/target.c @@ -29,7 +29,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM3, CH2, PB5, TIM_USE_OUTPUT_AUTO, 0, 0), // labelled "S2" DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), // labelled "S3" - DEF_TIM(TIM2, CH1, PA15, TIM_USE_OUTPUT_AUTO, 0, 0), // labelled "TAIL" + DEF_TIM(TIM2, CH1, PA15, TIM_USE_OUTPUT_AUTO, 0, 0), // labelled "TAIL" - shares S2's DMA stream (TIM2_CH1/TIM3_CH2 both have only one DMA option); DSHOT does not work on TAIL DEF_TIM(TIM1, CH2, PA9, TIM_USE_OUTPUT_AUTO, 0, 0), // labelled "ESC" diff --git a/src/main/target/VANTAC_RF007/target.c b/src/main/target/VANTAC_RF007/target.c index 799dc762322..1ebed2cad38 100644 --- a/src/main/target/VANTAC_RF007/target.c +++ b/src/main/target/VANTAC_RF007/target.c @@ -29,7 +29,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM3, CH2, PB5, TIM_USE_OUTPUT_AUTO, 0, 0), // labelled "S2" DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), // labelled "S3" - DEF_TIM(TIM2, CH1, PA15, TIM_USE_OUTPUT_AUTO, 0, 0), // labelled "TAIL" + DEF_TIM(TIM2, CH1, PA15, TIM_USE_OUTPUT_AUTO, 0, 0), // labelled "TAIL" - shares S2's DMA stream (TIM2_CH1/TIM3_CH2 both have only one DMA option); DSHOT does not work on TAIL DEF_TIM(TIM1, CH2, PA9, TIM_USE_OUTPUT_AUTO, 0, 0), // labelled "ESC" From 48dee9df44279f403943df462927c27945730ca5 Mon Sep 17 00:00:00 2001 From: Ray Morris Date: Fri, 21 Aug 2026 10:40:26 -0500 Subject: [PATCH 3/5] Document 41 NOTICE-tier and 6 LED-strip DMA collisions (Phase 2 step 3) 37 targets, comment-only: appended an explanatory comment to the losing DEF_TIM line for each undocumented NOTICE-tier motor-vs-motor collision (S5+ output silently loses DSHOT, basic quad unaffected) and each LED-strip collision (motor always wins over TIM_USE_LED, motors init before ledStripInit() in fc_init.c -- LED silently doesn't light). 6 targets (HGLRCF722, MATEKF411, MATEKF722SE, SPEEDYBEEF7MINI, TMOTORF7, TMOTORVELOXF7V2) were already fully documented and untouched. No DEF_TIM argument changed anywhere -- verified programmatically and by independent code review that every diff line is comment-only. MAMBAF405US excluded from this pass: its default (non-I2C) build variant has a genuine, previously-undetected CERTAIN hazard behind an undocumented #ifdef, found while isolating a same-(tim,ch) duplicate during this work. Needs the same fix-or-document workflow as the original 11 CERTAIN targets, not a NOTICE-tier comment -- tracked as a follow-up. --- src/main/target/AIKONF7/target.c | 4 ++-- src/main/target/ALIENFLIGHTF4/target.c | 2 +- src/main/target/ALIENFLIGHTNGF7/target.c | 4 ++-- src/main/target/ANYFC/target.c | 8 ++++---- src/main/target/ANYFCF7/target.c | 2 +- src/main/target/ANYFCM7/target.c | 2 +- src/main/target/AOCODARCF7DUAL/target.c | 2 +- src/main/target/AOCODARCF7MINI/target.c | 2 +- src/main/target/ATOMRCF405NAVI_DELUX/target.c | 4 ++-- src/main/target/BLUEJAYF4/target.c | 2 +- src/main/target/BOTWINGF722/target.c | 2 +- src/main/target/BRAHMA_F405/target.c | 2 +- src/main/target/COREWINGF405WINGV2/target.c | 4 ++-- src/main/target/CORVON405V2/target.c | 4 ++-- src/main/target/DALRCF722DUAL/target.c | 2 +- src/main/target/F4BY/target.c | 4 ++-- src/main/target/FF_F35_LIGHTNING/target.c | 2 +- src/main/target/FLYDRAGONPRO/target.c | 4 ++-- src/main/target/FOXEERF405/target.c | 4 ++-- src/main/target/FOXEERF722V4/target.c | 2 +- src/main/target/FRSKYPILOT/target.c | 2 +- src/main/target/FURYF4OSD/target.c | 6 +++--- src/main/target/HAKRCKD722/target.c | 2 +- src/main/target/IFLIGHT_BLITZ_ATF435/target.c | 2 +- src/main/target/IFLIGHT_BLITZ_F7_AIO/target.c | 4 ++-- src/main/target/JHEMCUF405WING/target.c | 4 ++-- src/main/target/KROOZX/target.c | 6 +++--- src/main/target/MATEKF765/target.c | 4 ++-- src/main/target/MICOAIR405MINI/target.c | 4 ++-- src/main/target/MICOAIR405V2/target.c | 4 ++-- src/main/target/NEXUS/target.c | 2 +- src/main/target/PRINCIPIOTF7/target.c | 2 +- src/main/target/REVO/target.c | 4 ++-- src/main/target/SPARKY2/target.c | 2 +- src/main/target/SPEEDYBEEF4/target.c | 4 ++-- src/main/target/SPEEDYBEEF405WING/target.c | 4 ++-- src/main/target/SPEEDYBEEF405WINGV2/target.c | 4 ++-- 37 files changed, 61 insertions(+), 61 deletions(-) diff --git a/src/main/target/AIKONF7/target.c b/src/main/target/AIKONF7/target.c index 7f5d8453e14..e3d380f560f 100644 --- a/src/main/target/AIKONF7/target.c +++ b/src/main/target/AIKONF7/target.c @@ -44,7 +44,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM4, CH1, PB6, TIM_USE_OUTPUT_AUTO, 0, 0), - DEF_TIM(TIM4, CH3, PB8, TIM_USE_OUTPUT_AUTO, 0, 0), + DEF_TIM(TIM4, CH3, PB8, TIM_USE_OUTPUT_AUTO, 0, 0), // Clash with TIM3_CH3, DSHOT does not work //DEF_TIM(TIM10, CH1, PB8, TIM_USE_OUTPUT_AUTO, 0, 0), DEF_TIM(TIM4, CH2, PB7, TIM_USE_OUTPUT_AUTO, 0, 0), @@ -53,7 +53,7 @@ timerHardware_t timerHardware[] = { //DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), //DEF_TIM(TIM8, CH3N, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), - DEF_TIM(TIM2, CH1, PA15, TIM_USE_LED, 0, 0), + DEF_TIM(TIM2, CH1, PA15, TIM_USE_LED, 0, 0), // Clash with TIM3_CH2's DMA stream; LED strip does not light }; diff --git a/src/main/target/ALIENFLIGHTF4/target.c b/src/main/target/ALIENFLIGHTF4/target.c index 7c6fd6ed84a..97b40276f90 100644 --- a/src/main/target/ALIENFLIGHTF4/target.c +++ b/src/main/target/ALIENFLIGHTF4/target.c @@ -32,7 +32,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM5, CH1, PA0, TIM_USE_OUTPUT_AUTO, 0, 0), // PWM8 - PA0 OUT3 - DMA1_ST2 DEF_TIM(TIM5, CH2, PA1, TIM_USE_OUTPUT_AUTO, 0, 0), // PWM9 - PA1 OUT4 - DMA1_ST4 DEF_TIM(TIM8, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0), // PWM10 - PC6 OUT5 - DMA2_ST2 - DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 0), // PWM11 - PC7 OUT6 - DMA2_ST3 + DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 0), // PWM11 - PC7 OUT6 - DMA2_ST3 -- clash with PWM10, DSHOT does not work DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 1), // PWM13 - PC8 OUT7 - DMA2_ST4 DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0), // PWM13 - PC9 OUT8 - DMA2_ST7 DEF_TIM(TIM1, CH3, PB15, TIM_USE_LED, 0, 0), // PWM5 - PA15 RC5 - DMA2_ST6 diff --git a/src/main/target/ALIENFLIGHTNGF7/target.c b/src/main/target/ALIENFLIGHTNGF7/target.c index ba8ab6111c3..1da85fba2c5 100644 --- a/src/main/target/ALIENFLIGHTNGF7/target.c +++ b/src/main/target/ALIENFLIGHTNGF7/target.c @@ -31,9 +31,9 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 0), // PWM6 - DMA2_ST4 DEF_TIM(TIM5, CH2, PA1, TIM_USE_OUTPUT_AUTO, 0, 0), // PWM7 - DMA1_ST4 DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0), // PWM8 - DMA2_ST7 - DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), // PWM9 - DMA1_ST2 + DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), // PWM9 - DMA1_ST2 -- clash with PWM5, DSHOT does not work DEF_TIM(TIM1, CH3N, PB15, TIM_USE_OUTPUT_AUTO, 0, 0), // PWM10 - DMA2_ST6 - DEF_TIM(TIM4, CH3, PB8, TIM_USE_OUTPUT_AUTO, 0, 0), // PWM11 - DMA1_ST7 + DEF_TIM(TIM4, CH3, PB8, TIM_USE_OUTPUT_AUTO, 0, 0), // PWM11 - DMA1_ST7 -- clash with PWM4, DSHOT does not work DEF_TIM(TIM4, CH4, PB9, TIM_USE_OUTPUT_AUTO, 0, 0), // PWM12 - DMA_NONE DEF_TIM(TIM1, CH1, PA8, TIM_USE_LED, 0, 1), // PPM - DMA2_ST1 }; diff --git a/src/main/target/ANYFC/target.c b/src/main/target/ANYFC/target.c index a8adb8578e3..8c68672d88c 100644 --- a/src/main/target/ANYFC/target.c +++ b/src/main/target/ANYFC/target.c @@ -34,12 +34,12 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM5, CH1, PA0, TIM_USE_OUTPUT_AUTO, 0, 0), // S6_OUT 12 DEF_TIM(TIM5, CH2, PA1, TIM_USE_OUTPUT_AUTO, 0, 0), // S5_OUT 11 DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), // S1_OUT 7 - DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), // S2_OUT 8 - DEF_TIM(TIM2, CH4, PA3, TIM_USE_OUTPUT_AUTO, 0, 0), // S3_OUT 9 + DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), // S2_OUT 8 -- clash with S6_OUT, DSHOT does not work + DEF_TIM(TIM2, CH4, PA3, TIM_USE_OUTPUT_AUTO, 0, 0), // S3_OUT 9 -- clash with S1_OUT, DSHOT does not work DEF_TIM(TIM2, CH3, PA2, TIM_USE_OUTPUT_AUTO, 0, 0), // S4_OUT 10 DEF_TIM(TIM2, CH1, PA15, TIM_USE_OUTPUT_AUTO, 0, 0), // S7_OUT 13 - DEF_TIM(TIM3, CH2, PB5, TIM_USE_OUTPUT_AUTO, 0, 0), // S8_OUT 14 - DEF_TIM(TIM3, CH1, PB4, TIM_USE_OUTPUT_AUTO, 0, 0), // S9_OUT 15 + DEF_TIM(TIM3, CH2, PB5, TIM_USE_OUTPUT_AUTO, 0, 0), // S8_OUT 14 -- clash with S7_OUT, DSHOT does not work + DEF_TIM(TIM3, CH1, PB4, TIM_USE_OUTPUT_AUTO, 0, 0), // S9_OUT 15 -- clash with S5_OUT, DSHOT does not work }; const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); diff --git a/src/main/target/ANYFCF7/target.c b/src/main/target/ANYFCF7/target.c index b5ef1f12c4a..396377aa440 100644 --- a/src/main/target/ANYFCF7/target.c +++ b/src/main/target/ANYFCF7/target.c @@ -40,7 +40,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM3, CH2, PB5, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S4_OUT DMA1_ST5 DEF_TIM(TIM5, CH1, PA0, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S7_OUT DMA1_ST2 DEF_TIM(TIM2, CH2, PB3, TIM_USE_OUTPUT_AUTO | TIM_USE_LED, 0, 0 ), // S8_OUT DMA1_ST6 - DEF_TIM(TIM3, CH1, PB4, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S9_OUT DMA1_ST4 + DEF_TIM(TIM3, CH1, PB4, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S9_OUT DMA1_ST4 -- clash with S2_OUT, DSHOT does not work }; diff --git a/src/main/target/ANYFCM7/target.c b/src/main/target/ANYFCM7/target.c index aae6922a374..3a04a10d212 100644 --- a/src/main/target/ANYFCM7/target.c +++ b/src/main/target/ANYFCM7/target.c @@ -36,7 +36,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM3, CH2, PB5, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S4_OUT DMA1_ST5 -- Used to have TIM_USE_LED DEF_TIM(TIM5, CH1, PA0, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S7_OUT DMA1_ST2 DEF_TIM(TIM1, CH3N, PB1, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S8_OUT DMA2_ST6 - DEF_TIM(TIM3, CH1, PB4, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S9_OUT DMA1_ST4 + DEF_TIM(TIM3, CH1, PB4, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S9_OUT DMA1_ST4 -- clash with S2_OUT, DSHOT does not work // DEF_TIM(TIM12, CH1, PB14, TIM_USE_PWM | TIM_USE_PPM, 0, 0 ), // S1_IN // DEF_TIM(TIM12, CH2, PB15, TIM_USE_PWM, 0, 0 ), // S2_IN diff --git a/src/main/target/AOCODARCF7DUAL/target.c b/src/main/target/AOCODARCF7DUAL/target.c index 2e7de30b5d8..395d985f8d1 100644 --- a/src/main/target/AOCODARCF7DUAL/target.c +++ b/src/main/target/AOCODARCF7DUAL/target.c @@ -42,7 +42,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM4, CH1, PB6, TIM_USE_OUTPUT_AUTO, 0, 0), // S7 D(1, 0, 2) DEF_TIM(TIM4, CH2, PB7, TIM_USE_OUTPUT_AUTO, 0, 0), // S8 D(1, 3, 2) - DEF_TIM(TIM2, CH1, PA0, TIM_USE_LED, 0, 0), // LED_TRIP + DEF_TIM(TIM2, CH1, PA0, TIM_USE_LED, 0, 0), // LED_TRIP -- clash with S2's DMA stream; LED strip does not light }; const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); diff --git a/src/main/target/AOCODARCF7MINI/target.c b/src/main/target/AOCODARCF7MINI/target.c index 223d51e5381..6c4f2247de7 100644 --- a/src/main/target/AOCODARCF7MINI/target.c +++ b/src/main/target/AOCODARCF7MINI/target.c @@ -48,7 +48,7 @@ timerHardware_t timerHardware[] = { #else DEF_TIM(TIM4, CH1, PB6, TIM_USE_OUTPUT_AUTO, 0, 0), // S5 DEF_TIM(TIM2, CH2, PB3, TIM_USE_OUTPUT_AUTO, 0, 0), // S6 D(1, 6, 3) - DEF_TIM(TIM2, CH1, PA15, TIM_USE_OUTPUT_AUTO, 0, 0), // S7 + DEF_TIM(TIM2, CH1, PA15, TIM_USE_OUTPUT_AUTO, 0, 0), // S7 -- clash with S2, DSHOT does not work (base/non-V2 build only) #endif DEF_TIM(TIM4, CH2, PB7, TIM_USE_OUTPUT_AUTO, 0, 0), // S8 D(1, 3, 2) diff --git a/src/main/target/ATOMRCF405NAVI_DELUX/target.c b/src/main/target/ATOMRCF405NAVI_DELUX/target.c index 54d715d8cbf..48beb17ae28 100644 --- a/src/main/target/ATOMRCF405NAVI_DELUX/target.c +++ b/src/main/target/ATOMRCF405NAVI_DELUX/target.c @@ -42,11 +42,11 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM2, CH1, PA15, TIM_USE_OUTPUT_AUTO, 0, 0), // S5 DEF_TIM(TIM2, CH3, PB10, TIM_USE_OUTPUT_AUTO, 0, 0), // S6 - DEF_TIM(TIM2, CH4, PB11, TIM_USE_OUTPUT_AUTO, 0, 0), // S7 + DEF_TIM(TIM2, CH4, PB11, TIM_USE_OUTPUT_AUTO, 0, 0), // S7 -- clash with S1, DSHOT does not work DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 0), // S8 DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0), // S9 - DEF_TIM(TIM8, CH2N, PB14, TIM_USE_OUTPUT_AUTO, 0, 0), // S10 + DEF_TIM(TIM8, CH2N, PB14, TIM_USE_OUTPUT_AUTO, 0, 0), // S10 -- clash with S8, DSHOT does not work DEF_TIM(TIM1, CH3N, PB15, TIM_USE_OUTPUT_AUTO, 0, 0), // S11 diff --git a/src/main/target/BLUEJAYF4/target.c b/src/main/target/BLUEJAYF4/target.c index 37afb69b1ce..22a3f4be928 100644 --- a/src/main/target/BLUEJAYF4/target.c +++ b/src/main/target/BLUEJAYF4/target.c @@ -30,7 +30,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM2, CH3, PA2, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S3_OUT - DMA1_ST1 DEF_TIM(TIM9, CH2, PA3, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S4_OUT - no DMA //DEF_TIM(TIM5, CH4, PA3, TIM_USE_OUTPUT_AUTO, 0, 1 ), // S4_OUT - DMA1_ST3 (Could be DMA1_ST1 with dmaopt=0) - DEF_TIM(TIM3, CH4, PB0, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S5_OUT - DMA1_ST2 -- used to be TIM_USE_LED + DEF_TIM(TIM3, CH4, PB0, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S5_OUT - DMA1_ST2 -- used to be TIM_USE_LED -- clash with S1_OUT, DSHOT does not work DEF_TIM(TIM3, CH3, PB1, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S6_OUT - DMA1_ST7 }; diff --git a/src/main/target/BOTWINGF722/target.c b/src/main/target/BOTWINGF722/target.c index 2af89d6863b..9c5d079a4c9 100644 --- a/src/main/target/BOTWINGF722/target.c +++ b/src/main/target/BOTWINGF722/target.c @@ -14,7 +14,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM3, CH2, PB5, TIM_USE_OUTPUT_AUTO, 0, 0), // S2 DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), // S3 DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), // S4 - DEF_TIM(TIM2, CH1, PA15, TIM_USE_OUTPUT_AUTO, 0, 0),// Servo 1 + DEF_TIM(TIM2, CH1, PA15, TIM_USE_OUTPUT_AUTO, 0, 0),// Servo 1 -- clash with S2, DSHOT does not work DEF_TIM(TIM2, CH2, PB3, TIM_USE_OUTPUT_AUTO, 0, 0),// Servo 2 DEF_TIM(TIM4, CH1, PB6, TIM_USE_LED, 0, 0), }; diff --git a/src/main/target/BRAHMA_F405/target.c b/src/main/target/BRAHMA_F405/target.c index 8e0291d7136..0c2bbaed6a0 100644 --- a/src/main/target/BRAHMA_F405/target.c +++ b/src/main/target/BRAHMA_F405/target.c @@ -35,7 +35,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM3, CH2, PB5, TIM_USE_OUTPUT_AUTO, 0, 0 ), DEF_TIM(TIM3, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0 ), - DEF_TIM(TIM8, CH3, PC8, TIM_USE_LED, 0, 0 ), + DEF_TIM(TIM8, CH3, PC8, TIM_USE_LED, 0, 0 ), // Clash with TIM1_CH2N's DMA stream; LED strip does not light }; const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); diff --git a/src/main/target/COREWINGF405WINGV2/target.c b/src/main/target/COREWINGF405WINGV2/target.c index a64e03b2230..f01c30611f1 100644 --- a/src/main/target/COREWINGF405WINGV2/target.c +++ b/src/main/target/COREWINGF405WINGV2/target.c @@ -35,10 +35,10 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 1, 0), // S5 D(2,4,7) DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 1, 0), // S6 D(2,7,7) - DEF_TIM(TIM8, CH2N, PB14, TIM_USE_OUTPUT_AUTO, 1, 0), // S7 + DEF_TIM(TIM8, CH2N, PB14, TIM_USE_OUTPUT_AUTO, 1, 0), // S7 -- clash with S5, DSHOT does not work DEF_TIM(TIM2, CH1, PA15, TIM_USE_OUTPUT_AUTO, 1, 0), // S8 DEF_TIM(TIM2, CH3, PB10, TIM_USE_OUTPUT_AUTO, 1, 0), // S9 - DEF_TIM(TIM2, CH4, PB11, TIM_USE_OUTPUT_AUTO, 1, 0), // S10 + DEF_TIM(TIM2, CH4, PB11, TIM_USE_OUTPUT_AUTO, 1, 0), // S10 -- clash with S3, DSHOT does not work DEF_TIM(TIM12, CH2, PB15, TIM_USE_OUTPUT_AUTO, 1, 0), // S11 DEF_TIM(TIM1, CH1, PA8, TIM_USE_LED, 0, 0), //2812LED D(1,5,3) diff --git a/src/main/target/CORVON405V2/target.c b/src/main/target/CORVON405V2/target.c index 8c93f5394af..9df6e19491d 100644 --- a/src/main/target/CORVON405V2/target.c +++ b/src/main/target/CORVON405V2/target.c @@ -27,8 +27,8 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM2, CH1, PA15, TIM_USE_OUTPUT_AUTO, 0, 0), // S3 -D(1,5) DEF_TIM(TIM2, CH2, PB3, TIM_USE_OUTPUT_AUTO, 0, 0), // S4 D(1,6) DEF_TIM(TIM3, CH1, PB4, TIM_USE_OUTPUT_AUTO, 0, 0), // S5 D(1,4) - DEF_TIM(TIM3, CH2, PB5, TIM_USE_OUTPUT_AUTO, 0, 0), // S6 -D(1,5) - DEF_TIM(TIM4, CH3, PB8, TIM_USE_OUTPUT_AUTO, 0, 0), // S7 + DEF_TIM(TIM3, CH2, PB5, TIM_USE_OUTPUT_AUTO, 0, 0), // S6 -D(1,5) -- clash with S3, DSHOT does not work + DEF_TIM(TIM4, CH3, PB8, TIM_USE_OUTPUT_AUTO, 0, 0), // S7 -- clash with S1, DSHOT does not work DEF_TIM(TIM4, CH4, PB9, TIM_USE_OUTPUT_AUTO, 0, 0), // S8 DEF_TIM(TIM12, CH1, PB14, TIM_USE_OUTPUT_AUTO, 0, 0), // S9 DEF_TIM(TIM12, CH2, PB15, TIM_USE_OUTPUT_AUTO, 0, 0), // S10 diff --git a/src/main/target/DALRCF722DUAL/target.c b/src/main/target/DALRCF722DUAL/target.c index 8c4fa74475e..eb199e18035 100644 --- a/src/main/target/DALRCF722DUAL/target.c +++ b/src/main/target/DALRCF722DUAL/target.c @@ -35,7 +35,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO,0,0), //S3 DMA2_ST4 T8CH3 DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO,0,0), //S4 DMA2_ST7 T8CH4 DEF_TIM(TIM1, CH1, PA8, TIM_USE_OUTPUT_AUTO,0,0), //S5 DMA2_ST1 T1CH1 - DEF_TIM(TIM1, CH2, PA9, TIM_USE_OUTPUT_AUTO,0,0), //S6 DMA2_ST6 T1CH2 + DEF_TIM(TIM1, CH2, PA9, TIM_USE_OUTPUT_AUTO,0,0), //S6 DMA2_ST6 T1CH2 -- clash with S5, DSHOT does not work DEF_TIM(TIM2, CH1, PA15,TIM_USE_LED,0,0), //2812 STRIP DMA1_ST5 }; diff --git a/src/main/target/F4BY/target.c b/src/main/target/F4BY/target.c index b1654e27ec0..824e7e44a3c 100644 --- a/src/main/target/F4BY/target.c +++ b/src/main/target/F4BY/target.c @@ -12,8 +12,8 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM5, CH3, PA2, TIM_USE_OUTPUT_AUTO, 0, 0), // S3_OUT DEF_TIM(TIM5, CH4, PA3, TIM_USE_OUTPUT_AUTO, 0, 0), // S4_OUT DEF_TIM(TIM1, CH1, PE9, TIM_USE_OUTPUT_AUTO, 0, 0), // S5_OUT - DEF_TIM(TIM1, CH2, PE11, TIM_USE_OUTPUT_AUTO, 0, 0), // S6_OUT - DEF_TIM(TIM1, CH3, PE13, TIM_USE_OUTPUT_AUTO, 0, 0), // S7_OUT + DEF_TIM(TIM1, CH2, PE11, TIM_USE_OUTPUT_AUTO, 0, 0), // S6_OUT -- clash with S5_OUT, DSHOT does not work + DEF_TIM(TIM1, CH3, PE13, TIM_USE_OUTPUT_AUTO, 0, 0), // S7_OUT -- clash with S5_OUT, DSHOT does not work DEF_TIM(TIM1, CH4, PE14, TIM_USE_OUTPUT_AUTO, 0, 0), // S8_OUT DEF_TIM(TIM9, CH2, PE6, TIM_USE_ANY, 0, 0), // sonar echo if needed diff --git a/src/main/target/FF_F35_LIGHTNING/target.c b/src/main/target/FF_F35_LIGHTNING/target.c index 617c085a925..df438da8199 100644 --- a/src/main/target/FF_F35_LIGHTNING/target.c +++ b/src/main/target/FF_F35_LIGHTNING/target.c @@ -27,7 +27,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 1, 0), DEF_TIM(TIM4, CH3, PB8, TIM_USE_OUTPUT_AUTO, 1, 0), DEF_TIM(TIM4, CH4, PB9, TIM_USE_OUTPUT_AUTO, 1, 0), - DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 1, 0), + DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 1, 0), // Clash with TIM4_CH3, DSHOT does not work DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 1, 0), DEF_TIM(TIM5, CH3, PA2, TIM_USE_ANY, 0, 0), diff --git a/src/main/target/FLYDRAGONPRO/target.c b/src/main/target/FLYDRAGONPRO/target.c index 39c405ebd20..7934a4f685a 100644 --- a/src/main/target/FLYDRAGONPRO/target.c +++ b/src/main/target/FLYDRAGONPRO/target.c @@ -31,7 +31,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM3, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 0), // labelled "CH2" DEF_TIM(TIM3, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0), // labelled "CH1" - DEF_TIM(TIM2, CH1, PA0, TIM_USE_OUTPUT_AUTO, 0, 0), // labelled "ESC", clashes with UART4 TX + DEF_TIM(TIM2, CH1, PA0, TIM_USE_OUTPUT_AUTO, 0, 0), // labelled "ESC", clashes with UART4 TX -- also clashes with TIM3_CH2's DMA stream (burst-mode DMA), DSHOT does not work DEF_TIM(TIM2, CH2, PA1, TIM_USE_OUTPUT_AUTO, 0, 0), // labelled "RPM", clashes with UART4 RX DEF_TIM(TIM5, CH4, PA3, TIM_USE_OUTPUT_AUTO, 0, 0), // labelled "RX2", clashes with UART2 RX @@ -39,7 +39,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM11, CH1, PB9, TIM_USE_OUTPUT_AUTO, 0, 0), // labelled "AUX" - DEF_TIM(TIM4, CH3, PB8, TIM_USE_LED, 0, 0), // WS2812B + DEF_TIM(TIM4, CH3, PB8, TIM_USE_LED, 0, 0), // WS2812B -- clash with TIM3_CH3's DMA stream; LED strip does not light }; const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); diff --git a/src/main/target/FOXEERF405/target.c b/src/main/target/FOXEERF405/target.c index ca6ebe3507e..8ad686369a6 100644 --- a/src/main/target/FOXEERF405/target.c +++ b/src/main/target/FOXEERF405/target.c @@ -28,8 +28,8 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM3, CH1, PB4, TIM_USE_OUTPUT_AUTO, 0, 0), // S2 (1,4) DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 0), // S3 (2,4) DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0), // S4 (2,7) - DEF_TIM(TIM8, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0), // S5 (2,2) - DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 0), // S6 (2,3) + DEF_TIM(TIM8, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0), // S5 (2,2) -- clash with S3, DSHOT does not work + DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 0), // S6 (2,3) -- clash with S3, DSHOT does not work DEF_TIM(TIM1, CH3, PA10, TIM_USE_LED, 0, 0), // LED STRIP(2,6) diff --git a/src/main/target/FOXEERF722V4/target.c b/src/main/target/FOXEERF722V4/target.c index be84ee8b909..7ac7b2993cf 100644 --- a/src/main/target/FOXEERF722V4/target.c +++ b/src/main/target/FOXEERF722V4/target.c @@ -31,7 +31,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 0), // S4 - D(2, 4, 7) #ifdef FOXEERF722V4_X8 - DEF_TIM(TIM8, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0), // S5 + DEF_TIM(TIM8, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0), // S5 -- clash with S1, DSHOT does not work (FOXEERF722V4_X8 build only) DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 0), // S6 DEF_TIM(TIM2, CH4, PA3, TIM_USE_OUTPUT_AUTO, 0, 0), // S6 DEF_TIM(TIM2, CH3, PA2, TIM_USE_OUTPUT_AUTO, 0, 0), // S6 diff --git a/src/main/target/FRSKYPILOT/target.c b/src/main/target/FRSKYPILOT/target.c index fabee0084ab..6a05d086506 100644 --- a/src/main/target/FRSKYPILOT/target.c +++ b/src/main/target/FRSKYPILOT/target.c @@ -41,7 +41,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM4, CH4, PB9, TIM_USE_OUTPUT_AUTO, 0, 0), // S9 DEF_TIM(TIM2, CH2, PA1, TIM_USE_OUTPUT_AUTO, 0, 0), // S10 DEF_TIM(TIM2, CH3, PB10, TIM_USE_OUTPUT_AUTO, 0, 0), // S11 - DEF_TIM(TIM2, CH4, PB11, TIM_USE_OUTPUT_AUTO, 0, 0), // S12 + DEF_TIM(TIM2, CH4, PB11, TIM_USE_OUTPUT_AUTO, 0, 0), // S12 -- also clashes with S1's DMA stream, DSHOT does not work DEF_TIM(TIM5, CH1, PA0, TIM_USE_BEEPER, 0, 0), // beeper }; diff --git a/src/main/target/FURYF4OSD/target.c b/src/main/target/FURYF4OSD/target.c index ef414db35e4..33d630c1e56 100644 --- a/src/main/target/FURYF4OSD/target.c +++ b/src/main/target/FURYF4OSD/target.c @@ -28,9 +28,9 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S2_OUT - D(1, 7, 5) DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S3_OUT - D(1, 2, 5) DEF_TIM(TIM2, CH3, PA2, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S4_OUT - D(1, 1, 3) - DEF_TIM(TIM2, CH3, PB10, TIM_USE_ANY, 0, 0), - DEF_TIM(TIM2, CH4, PB11, TIM_USE_ANY, 0, 0), - DEF_TIM(TIM5, CH1, PA0, TIM_USE_LED, 0, 0 ), // LED_STRIP - DMA1_ST2_CH6 + DEF_TIM(TIM2, CH3, PB10, TIM_USE_ANY, 0, 0), // Same (TIM2,CH3) as S4_OUT above; DSHOT does not work on this output + DEF_TIM(TIM2, CH4, PB11, TIM_USE_ANY, 0, 0), // Clash with S2_OUT, DSHOT does not work + DEF_TIM(TIM5, CH1, PA0, TIM_USE_LED, 0, 0 ), // LED_STRIP - DMA1_ST2_CH6 -- clash with S3_OUT's DMA stream; LED strip does not light }; const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); diff --git a/src/main/target/HAKRCKD722/target.c b/src/main/target/HAKRCKD722/target.c index e114f4410bf..28fcbc71773 100644 --- a/src/main/target/HAKRCKD722/target.c +++ b/src/main/target/HAKRCKD722/target.c @@ -36,7 +36,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM3, CH2, PB5, TIM_USE_OUTPUT_AUTO, 0, 0), // S2 DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), // S3 DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), // S4 - DEF_TIM(TIM2, CH1, PA15, TIM_USE_OUTPUT_AUTO, 0, 0), // S5 + DEF_TIM(TIM2, CH1, PA15, TIM_USE_OUTPUT_AUTO, 0, 0), // S5 -- clash with S2, DSHOT does not work DEF_TIM(TIM2, CH2, PB3, TIM_USE_OUTPUT_AUTO, 0, 0), // S6 DEF_TIM(TIM4, CH1, PB6, TIM_USE_OUTPUT_AUTO, 0, 0), // S7 DEF_TIM(TIM4, CH2, PB7, TIM_USE_OUTPUT_AUTO, 0, 0), // S8 diff --git a/src/main/target/IFLIGHT_BLITZ_ATF435/target.c b/src/main/target/IFLIGHT_BLITZ_ATF435/target.c index 947d19c0d20..2d353b0aaf6 100644 --- a/src/main/target/IFLIGHT_BLITZ_ATF435/target.c +++ b/src/main/target/IFLIGHT_BLITZ_ATF435/target.c @@ -43,7 +43,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TMR2, CH3, PB10, TIM_USE_OUTPUT_AUTO, 0,5), //S7 DEF_TIM(TMR2, CH4, PB11, TIM_USE_OUTPUT_AUTO, 0,6), //S8 - DEF_TIM(TMR1, CH1, PA8, TIM_USE_LED, 0, 0), // LED STRIP + DEF_TIM(TMR1, CH1, PA8, TIM_USE_LED, 0, 0), // LED STRIP -- clash with S4's DMA stream; LED strip does not light }; const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); diff --git a/src/main/target/IFLIGHT_BLITZ_F7_AIO/target.c b/src/main/target/IFLIGHT_BLITZ_F7_AIO/target.c index e46c36e0507..ba241eb4109 100644 --- a/src/main/target/IFLIGHT_BLITZ_F7_AIO/target.c +++ b/src/main/target/IFLIGHT_BLITZ_F7_AIO/target.c @@ -37,8 +37,8 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM3, CH2, PB5, TIM_USE_MOTOR, 0, 0), // S3 DEF_TIM(TIM3, CH4, PB1, TIM_USE_MOTOR, 0, 0), // S4 DEF_TIM(TIM1, CH1, PE9, TIM_USE_OUTPUT_AUTO, 0, 0), // S5 - DEF_TIM(TIM1, CH2, PE11, TIM_USE_OUTPUT_AUTO, 0, 0), // S6 - DEF_TIM(TIM1, CH3, PE13, TIM_USE_OUTPUT_AUTO, 0, 0), // S7 + DEF_TIM(TIM1, CH2, PE11, TIM_USE_OUTPUT_AUTO, 0, 0), // S6 -- clash with S5, DSHOT does not work + DEF_TIM(TIM1, CH3, PE13, TIM_USE_OUTPUT_AUTO, 0, 0), // S7 -- clash with S5, DSHOT does not work DEF_TIM(TIM1, CH4, PE14, TIM_USE_OUTPUT_AUTO, 0, 0), // S8 DEF_TIM(TIM4, CH1, PB6, TIM_USE_OUTPUT_AUTO, 0, 0), // S9 DEF_TIM(TIM4, CH2, PB7, TIM_USE_OUTPUT_AUTO, 0, 0), // S10 diff --git a/src/main/target/JHEMCUF405WING/target.c b/src/main/target/JHEMCUF405WING/target.c index e8187f936b2..270b78dd734 100644 --- a/src/main/target/JHEMCUF405WING/target.c +++ b/src/main/target/JHEMCUF405WING/target.c @@ -34,10 +34,10 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 1, 0), // S5 D(2,4,7) DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 1, 0), // S6 D(2,7,7) - DEF_TIM(TIM8, CH2N,PB14, TIM_USE_OUTPUT_AUTO, 1, 0), // S7 + DEF_TIM(TIM8, CH2N,PB14, TIM_USE_OUTPUT_AUTO, 1, 0), // S7 -- clash with S5, DSHOT does not work DEF_TIM(TIM2, CH1, PA15, TIM_USE_OUTPUT_AUTO, 1, 0), // S8 DEF_TIM(TIM2, CH3, PB10, TIM_USE_OUTPUT_AUTO, 1, 0), // S9 - DEF_TIM(TIM2, CH4, PB11, TIM_USE_OUTPUT_AUTO, 1, 0), // S10 + DEF_TIM(TIM2, CH4, PB11, TIM_USE_OUTPUT_AUTO, 1, 0), // S10 -- clash with S3, DSHOT does not work DEF_TIM(TIM12, CH2,PB15, TIM_USE_OUTPUT_AUTO, 1, 0), // S11 DEF_TIM(TIM1, CH1, PA8, TIM_USE_LED, 0, 0), // 2812LED diff --git a/src/main/target/KROOZX/target.c b/src/main/target/KROOZX/target.c index a445a9656f6..2a5d8ea3474 100755 --- a/src/main/target/KROOZX/target.c +++ b/src/main/target/KROOZX/target.c @@ -29,11 +29,11 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM5, CH4, PA3, TIM_USE_MOTOR, 0, 0), // PWM2 DEF_TIM(TIM5, CH1, PA0, TIM_USE_MOTOR, 0, 0), // PWM3 DEF_TIM(TIM5, CH3, PA2, TIM_USE_MOTOR, 0, 0), // PWM1 - DEF_TIM(TIM3, CH4, PB1, TIM_USE_MOTOR, 0, 0), // PWM5 + DEF_TIM(TIM3, CH4, PB1, TIM_USE_MOTOR, 0, 0), // PWM5 -- clash with PWM3, DSHOT does not work DEF_TIM(TIM3, CH3, PB0, TIM_USE_MOTOR, 0, 0), // PWM6 - DEF_TIM(TIM4, CH3, PB8, TIM_USE_MOTOR, 0, 0), // PWM7 + DEF_TIM(TIM4, CH3, PB8, TIM_USE_MOTOR, 0, 0), // PWM7 -- clash with PWM6, DSHOT does not work DEF_TIM(TIM4, CH4, PB9, TIM_USE_MOTOR, 0, 0), // PWM8 - DEF_TIM(TIM4, CH1, PB14, TIM_USE_MOTOR, 0, 0), // PWM9 + DEF_TIM(TIM4, CH1, PB14, TIM_USE_MOTOR, 0, 0), // PWM9 -- clash with PWM1, DSHOT does not work DEF_TIM(TIM4, CH2, PB15, TIM_USE_MOTOR, 0, 0), // PWM10 DEF_TIM(TIM8, CH1, PC6, TIM_USE_LED, 0, 0), // LED_STRIP diff --git a/src/main/target/MATEKF765/target.c b/src/main/target/MATEKF765/target.c index 6d0599a29f9..c80def398ce 100644 --- a/src/main/target/MATEKF765/target.c +++ b/src/main/target/MATEKF765/target.c @@ -42,9 +42,9 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), // S5 UP(1,2), D(1,7,5)** DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), // S6 UP(1,2), D(1,2,5) - DEF_TIM(TIM4, CH1, PD12, TIM_USE_OUTPUT_AUTO, 0, 0), // S7 UP(1,6), D(1,0,2)* + DEF_TIM(TIM4, CH1, PD12, TIM_USE_OUTPUT_AUTO, 0, 0), // S7 UP(1,6), D(1,0,2)* -- clash with S3, DSHOT does not work DEF_TIM(TIM4, CH2, PD13, TIM_USE_OUTPUT_AUTO, 0, 0), // S8 UP(1,6), D(1,3,2) - DEF_TIM(TIM4, CH3, PD14, TIM_USE_OUTPUT_AUTO, 0, 0), // S9 UP(1,6), D(1,7,2)** + DEF_TIM(TIM4, CH3, PD14, TIM_USE_OUTPUT_AUTO, 0, 0), // S9 UP(1,6), D(1,7,2)** -- clash with S5, DSHOT does not work DEF_TIM(TIM4, CH4, PD15, TIM_USE_OUTPUT_AUTO, 0, 0), // S10 UP(1,6) DEF_TIM(TIM9, CH1, PE5, TIM_USE_OUTPUT_AUTO, 0, 0), // S11 diff --git a/src/main/target/MICOAIR405MINI/target.c b/src/main/target/MICOAIR405MINI/target.c index 6903cb1cc49..7491b72ef1b 100644 --- a/src/main/target/MICOAIR405MINI/target.c +++ b/src/main/target/MICOAIR405MINI/target.c @@ -27,8 +27,8 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM2, CH1, PA15, TIM_USE_OUTPUT_AUTO, 0, 0), // S3 DEF_TIM(TIM2, CH2, PB3, TIM_USE_OUTPUT_AUTO, 0, 0), // S4 DEF_TIM(TIM3, CH1, PB4, TIM_USE_OUTPUT_AUTO, 0, 0), // S5 - DEF_TIM(TIM3, CH2, PB5, TIM_USE_OUTPUT_AUTO, 0, 0), // S6 - DEF_TIM(TIM4, CH3, PB8, TIM_USE_OUTPUT_AUTO, 0, 0), // S7 + DEF_TIM(TIM3, CH2, PB5, TIM_USE_OUTPUT_AUTO, 0, 0), // S6 -- clash with S3, DSHOT does not work + DEF_TIM(TIM4, CH3, PB8, TIM_USE_OUTPUT_AUTO, 0, 0), // S7 -- clash with S1, DSHOT does not work DEF_TIM(TIM4, CH4, PB9, TIM_USE_OUTPUT_AUTO, 0, 0), // S8 DEF_TIM(TIM12, CH1, PB14, TIM_USE_OUTPUT_AUTO, 0, 0), // S9 }; diff --git a/src/main/target/MICOAIR405V2/target.c b/src/main/target/MICOAIR405V2/target.c index 8c93f5394af..9df6e19491d 100644 --- a/src/main/target/MICOAIR405V2/target.c +++ b/src/main/target/MICOAIR405V2/target.c @@ -27,8 +27,8 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM2, CH1, PA15, TIM_USE_OUTPUT_AUTO, 0, 0), // S3 -D(1,5) DEF_TIM(TIM2, CH2, PB3, TIM_USE_OUTPUT_AUTO, 0, 0), // S4 D(1,6) DEF_TIM(TIM3, CH1, PB4, TIM_USE_OUTPUT_AUTO, 0, 0), // S5 D(1,4) - DEF_TIM(TIM3, CH2, PB5, TIM_USE_OUTPUT_AUTO, 0, 0), // S6 -D(1,5) - DEF_TIM(TIM4, CH3, PB8, TIM_USE_OUTPUT_AUTO, 0, 0), // S7 + DEF_TIM(TIM3, CH2, PB5, TIM_USE_OUTPUT_AUTO, 0, 0), // S6 -D(1,5) -- clash with S3, DSHOT does not work + DEF_TIM(TIM4, CH3, PB8, TIM_USE_OUTPUT_AUTO, 0, 0), // S7 -- clash with S1, DSHOT does not work DEF_TIM(TIM4, CH4, PB9, TIM_USE_OUTPUT_AUTO, 0, 0), // S8 DEF_TIM(TIM12, CH1, PB14, TIM_USE_OUTPUT_AUTO, 0, 0), // S9 DEF_TIM(TIM12, CH2, PB15, TIM_USE_OUTPUT_AUTO, 0, 0), // S10 diff --git a/src/main/target/NEXUS/target.c b/src/main/target/NEXUS/target.c index a903264269e..cac72f9c9cd 100644 --- a/src/main/target/NEXUS/target.c +++ b/src/main/target/NEXUS/target.c @@ -22,7 +22,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), // S3 DEF_TIM(TIM2, CH2, PB3, TIM_USE_OUTPUT_AUTO, 0, 0), // S4 DEF_TIM(TIM4, CH1, PB6, TIM_USE_OUTPUT_AUTO, 0, 0), // M1/ESC - DEF_TIM(TIM5, CH3, PA2, TIM_USE_OUTPUT_AUTO, 0, 0), // shared w/ UART2 TX + DEF_TIM(TIM5, CH3, PA2, TIM_USE_OUTPUT_AUTO, 0, 0), // shared w/ UART2 TX -- also clashes with M1/ESC's DMA stream, DSHOT does not work DEF_TIM(TIM9, CH2, PA3, TIM_USE_OUTPUT_AUTO, 0, 0), // shared w/ UART2 RX }; diff --git a/src/main/target/PRINCIPIOTF7/target.c b/src/main/target/PRINCIPIOTF7/target.c index 9268af45585..d67997eb9fb 100644 --- a/src/main/target/PRINCIPIOTF7/target.c +++ b/src/main/target/PRINCIPIOTF7/target.c @@ -58,7 +58,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM2, CH3, PB10, TIM_USE_OUTPUT_AUTO, 0, 0), // S7 // Motor 8 - DEF_TIM(TIM2, CH4, PB11, TIM_USE_OUTPUT_AUTO, 0, 0), // S8 + DEF_TIM(TIM2, CH4, PB11, TIM_USE_OUTPUT_AUTO, 0, 0), // S8 -- clash with S1, DSHOT does not work // Servo 1 DEF_TIM(TIM4, CH1, PB6, TIM_USE_OUTPUT_AUTO, 0, 0), // S9 diff --git a/src/main/target/REVO/target.c b/src/main/target/REVO/target.c index e1a2c2e8418..ea236f89df4 100644 --- a/src/main/target/REVO/target.c +++ b/src/main/target/REVO/target.c @@ -44,8 +44,8 @@ timerHardware_t timerHardware[] = { // DEF_TIM(TIM12, CH1, PB14, TIM_USE_PWM | TIM_USE_PPM, 0, 0), // PPM (5th pin on FlexiIO port) // DEF_TIM(TIM12, CH2, PB15, TIM_USE_PWM, 0, 0), // S2_IN DEF_TIM(TIM8, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0), // S3_IN - DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 0), // S4_IN - DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 0), // S5_IN + DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 0), // S4_IN -- clash with S3_IN, DSHOT does not work + DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 0), // S5_IN -- clash with S3_IN, DSHOT does not work DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0), // S6_IN }; diff --git a/src/main/target/SPARKY2/target.c b/src/main/target/SPARKY2/target.c index 9364f231c54..58447a998bb 100644 --- a/src/main/target/SPARKY2/target.c +++ b/src/main/target/SPARKY2/target.c @@ -35,7 +35,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM9, CH2, PA3, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S3_OUT DEF_TIM(TIM2, CH3, PA2, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S4_OUT DEF_TIM(TIM5, CH2, PA1, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S5_OUT - GPIO_PartialRemap_TIM3 - DEF_TIM(TIM5, CH1, PA0, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S6_OUT + DEF_TIM(TIM5, CH1, PA0, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S6_OUT -- clash with S2_OUT, DSHOT does not work }; const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); diff --git a/src/main/target/SPEEDYBEEF4/target.c b/src/main/target/SPEEDYBEEF4/target.c index 075640d0f05..ad7ab42ea82 100644 --- a/src/main/target/SPEEDYBEEF4/target.c +++ b/src/main/target/SPEEDYBEEF4/target.c @@ -31,9 +31,9 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM3, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 0), // S3 UP(2,1) DEF_TIM(TIM3, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0), // S4 UP(2,1) - DEF_TIM(TIM2, CH1, PA15, TIM_USE_OUTPUT_AUTO, 0, 0), // S5 UP(1,7) // used to be fw motor + DEF_TIM(TIM2, CH1, PA15, TIM_USE_OUTPUT_AUTO, 0, 0), // S5 UP(1,7) // used to be fw motor -- also clashes with S2's DMA stream, DSHOT does not work DEF_TIM(TIM1, CH1, PA8, TIM_USE_OUTPUT_AUTO, 0, 0), // S6 UP(2,5) // used to be fw motor - DEF_TIM(TIM4, CH3, PB8, TIM_USE_OUTPUT_AUTO, 0, 0), // S7 D(1,7)!S5 UP(2,6) + DEF_TIM(TIM4, CH3, PB8, TIM_USE_OUTPUT_AUTO, 0, 0), // S7 D(1,7)!S5 UP(2,6) -- clash with S3, DSHOT does not work DEF_TIM(TIM4, CH1, PB6, TIM_USE_LED, 0, 0), // LED D(1,0) UP(2,6) }; diff --git a/src/main/target/SPEEDYBEEF405WING/target.c b/src/main/target/SPEEDYBEEF405WING/target.c index c6141b9a731..a1c5621dde9 100644 --- a/src/main/target/SPEEDYBEEF405WING/target.c +++ b/src/main/target/SPEEDYBEEF405WING/target.c @@ -30,10 +30,10 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 1, 0), // S5 D(2,4,7) DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 1, 0), // S6 D(2,7,7) - DEF_TIM(TIM8, CH2N, PB14, TIM_USE_OUTPUT_AUTO, 1, 0), // S7 + DEF_TIM(TIM8, CH2N, PB14, TIM_USE_OUTPUT_AUTO, 1, 0), // S7 -- clash with S5, DSHOT does not work DEF_TIM(TIM2, CH1, PA15, TIM_USE_OUTPUT_AUTO, 1, 0), // S8 DEF_TIM(TIM2, CH3, PB10, TIM_USE_OUTPUT_AUTO, 1, 0), // S9 - DEF_TIM(TIM2, CH4, PB11, TIM_USE_OUTPUT_AUTO, 1, 0), // S10 + DEF_TIM(TIM2, CH4, PB11, TIM_USE_OUTPUT_AUTO, 1, 0), // S10 -- clash with S3, DSHOT does not work DEF_TIM(TIM12, CH2, PB15, TIM_USE_OUTPUT_AUTO, 1, 0), // S11 DEF_TIM(TIM1, CH1, PA8, TIM_USE_LED, 0, 0), //2812LED D(1,5,3) diff --git a/src/main/target/SPEEDYBEEF405WINGV2/target.c b/src/main/target/SPEEDYBEEF405WINGV2/target.c index a64e03b2230..f01c30611f1 100644 --- a/src/main/target/SPEEDYBEEF405WINGV2/target.c +++ b/src/main/target/SPEEDYBEEF405WINGV2/target.c @@ -35,10 +35,10 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 1, 0), // S5 D(2,4,7) DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 1, 0), // S6 D(2,7,7) - DEF_TIM(TIM8, CH2N, PB14, TIM_USE_OUTPUT_AUTO, 1, 0), // S7 + DEF_TIM(TIM8, CH2N, PB14, TIM_USE_OUTPUT_AUTO, 1, 0), // S7 -- clash with S5, DSHOT does not work DEF_TIM(TIM2, CH1, PA15, TIM_USE_OUTPUT_AUTO, 1, 0), // S8 DEF_TIM(TIM2, CH3, PB10, TIM_USE_OUTPUT_AUTO, 1, 0), // S9 - DEF_TIM(TIM2, CH4, PB11, TIM_USE_OUTPUT_AUTO, 1, 0), // S10 + DEF_TIM(TIM2, CH4, PB11, TIM_USE_OUTPUT_AUTO, 1, 0), // S10 -- clash with S3, DSHOT does not work DEF_TIM(TIM12, CH2, PB15, TIM_USE_OUTPUT_AUTO, 1, 0), // S11 DEF_TIM(TIM1, CH1, PA8, TIM_USE_LED, 0, 0), //2812LED D(1,5,3) From 454391bb46e1a6a526d8c2d9ef1ae62dce48d192 Mon Sep 17 00:00:00 2001 From: Ray Morris Date: Fri, 21 Aug 2026 11:13:55 -0500 Subject: [PATCH 4/5] Fix silent DSHOT loss on MAMBAF405US S1_OUT (TIM8_CH3/TIM1_CH2 collision) TIM8_CH3 (S1_OUT, PC8) used dmavar 0, resolving to DMA2 Stream2 -- the same stream TIM1_CH2 (S4_OUT, PA9, array position 0) claims with dmavar 1. Same stream, different channel selector, so on a basic quad build S1_OUT silently lost DSHOT since it initializes later. Fixed by switching TIM8_CH3 to dmavar 1 (DMA2 Stream4), matching the value the target's #ifdef MAMBAF405US_I2C build variant already used safely for the same pin. That made both branches byte-identical, so collapsed the #ifdef/#else/#endif into one unconditional block -- confirmed via grep that MAMBAF405US_I2C is otherwise only used for USB string and I2C bus/pin selection, unrelated to timerHardware[]. Both MAMBAF405US and MAMBAF405US_I2C build clean. classify_collisions.py and a full motorCount 1-12 sweep confirm zero hazards on MAMBAF405US now. --- src/main/target/MAMBAF405US/target.c | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/main/target/MAMBAF405US/target.c b/src/main/target/MAMBAF405US/target.c index 19ba5944c20..ef12ae41ecf 100644 --- a/src/main/target/MAMBAF405US/target.c +++ b/src/main/target/MAMBAF405US/target.c @@ -27,17 +27,10 @@ timerHardware_t timerHardware[] = { // DEF_TIM(TIM11, CH1, PB9, TIM_USE_PPM, 0, 0 ), // PPM IN -#ifdef MAMBAF405US_I2C - DEF_TIM(TIM1, CH2, PA9, TIM_USE_OUTPUT_AUTO, 0, 1 ), // S1 pin A9: DMA2 Stream 6 Channel 0 - DEF_TIM(TIM1, CH1, PA8, TIM_USE_OUTPUT_AUTO, 0, 1 ), // S2 pin A8: DMA2 Stream 6 Channel 0 - DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S3 pin C9: DMA2 Stream 7 Channel 7 - DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 1 ), // S4 pin C8: DMA2 Stream 2 Channel 0 -#else DEF_TIM(TIM1, CH2, PA9, TIM_USE_OUTPUT_AUTO, 0, 1 ), // S4_OUT – D(2, 2, 6) DEF_TIM(TIM1, CH1, PA8, TIM_USE_OUTPUT_AUTO, 0, 1 ), // S3_OUT – D(2, 1, 6) DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S2_OUT – D(2, 7, 7) - DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S1_OUT – D(2, 4, 7) -#endif + DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 1 ), // S1_OUT – D(2, 4, 7) (dmavar 1 avoids DMA2 Stream2 collision with S4_OUT/TIM1_CH2) DEF_TIM(TIM2, CH2, PB3, TIM_USE_LED, 0, 0 ), // LED_STRIP – D(1, 6, 3) }; From 05f40e45db72946b94548fca0fbe6e0fc2346c02 Mon Sep 17 00:00:00 2001 From: Ray Morris Date: Fri, 21 Aug 2026 11:26:49 -0500 Subject: [PATCH 5/5] Fix reversed S1-S4 labels on MAMBAF405US from the previous commit The default (#else) branch's old "S4_OUT..S1_OUT" labels had the convention backwards. Confirmed with the board owner: silkscreen labels are always assigned in top-to-bottom array declaration order, same as the MAMBAF405US_I2C branch's plain "S1".."S4" labels this target.c used to carry before the two branches were collapsed. Fixed to match: S1=TIM1_CH2, S2=TIM1_CH1, S3=TIM8_CH4, S4=TIM8_CH3. This also corrects which physical output was actually losing DSHOT in the previous commit's description: it's S4 (TIM8_CH3, array position 3), not S1. The dmavar fix itself (454391bb46) is unaffected -- comment-only change. --- src/main/target/MAMBAF405US/target.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/target/MAMBAF405US/target.c b/src/main/target/MAMBAF405US/target.c index ef12ae41ecf..629aab1e8f8 100644 --- a/src/main/target/MAMBAF405US/target.c +++ b/src/main/target/MAMBAF405US/target.c @@ -27,10 +27,10 @@ timerHardware_t timerHardware[] = { // DEF_TIM(TIM11, CH1, PB9, TIM_USE_PPM, 0, 0 ), // PPM IN - DEF_TIM(TIM1, CH2, PA9, TIM_USE_OUTPUT_AUTO, 0, 1 ), // S4_OUT – D(2, 2, 6) - DEF_TIM(TIM1, CH1, PA8, TIM_USE_OUTPUT_AUTO, 0, 1 ), // S3_OUT – D(2, 1, 6) - DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S2_OUT – D(2, 7, 7) - DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 1 ), // S1_OUT – D(2, 4, 7) (dmavar 1 avoids DMA2 Stream2 collision with S4_OUT/TIM1_CH2) + DEF_TIM(TIM1, CH2, PA9, TIM_USE_OUTPUT_AUTO, 0, 1 ), // S1 – D(2, 2, 6) + DEF_TIM(TIM1, CH1, PA8, TIM_USE_OUTPUT_AUTO, 0, 1 ), // S2 – D(2, 1, 6) + DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S3 – D(2, 7, 7) + DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 1 ), // S4 – D(2, 4, 7) (dmavar 1 avoids DMA2 Stream2 collision with S1/TIM1_CH2) DEF_TIM(TIM2, CH2, PB3, TIM_USE_LED, 0, 0 ), // LED_STRIP – D(1, 6, 3) };