Hi all,
I’m debugging DShot on a custom STM32H743 PX4 board and I now observe a more serious system-level issue that looks like a boot failure / possible memory corruption.
Board info
-
MCU: STM32H743
-
Timer layout same as hkust-nxt-dual
-
HRT uses TIM8 CH1 (TIM2 not used by HRT/RC/tone)
-
8 outputs enabled
-
TIM1/TIM2/TIM3 all assigned to DMA1
-
Other DMA users: SPI2 + TIM4 only
-
Pins verified working using STM32Cube HAL
DShot behavior
-
TIM1 works fine for PWM and DShot
-
TIM2/TIM3 show abnormal behavior (DShot stuck HIGH)
-
Still debugging DMA/DMAMUX mapping
Critical issue (boot failure)
When all 8 outputs are configured as DShot:
Symptom A
After reboot:
-
red LED blinking
-
green LED blinks 3 times then off
-
USB not detected by PC
-
board appears completely dead
Only full flash erase + reflash recovers the board.
Symptom B
If SD card remains inserted and I only erase flash:
-
green LED turns solid on
-
still no USB connection
Board does not boot until both flash and SD state are cleared.
My suspicion
This looks like:
-
DMA stream/DMAMUX misconfiguration
-
or multiple timers sharing DMA causing memory corruption
-
possibly overwriting stack/flash/FS during DShot DMA transfers
Because:
-
happens only when many DShot channels enabled
-
persists across reboot
-
requires full erase to recover
Questions
-
Has anyone seen DMA/DShot causing memory corruption or boot failure on STM32H7?
-
Is it safe for multiple IO timers to share the same DMA controller/index for DShot?
-
Is there a recommended way to verify final DMA stream + DMAMUX request mapping at runtime?
-
Any known restrictions for using DShot on TIM2/TIM3 vs TIM1?
Any debugging suggestions appreciated.
Thanks!