1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-16 12:55:19 +03:00

Merge pull request #10383 from mluessi/ml_h7_dshot_opt

This commit is contained in:
Michael Keller 2020-12-09 15:40:16 +01:00 committed by GitHub
commit 57c9c12781
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 2 deletions

View file

@ -131,3 +131,6 @@ void IOInitGlobal(void);
typedef void (*IOTraverseFuncPtr_t)(IO_t io);
void IOTraversePins(IOTraverseFuncPtr_t func);
GPIO_TypeDef* IO_GPIO(IO_t io);
uint16_t IO_Pin(IO_t io);

View file

@ -117,13 +117,24 @@ FAST_CODE static void pwmDshotSetDirectionInput(
timer->ARR = 0xffffffff;
#ifdef STM32H7
IOConfigGPIO(motor->io, GPIO_MODE_OUTPUT_PP);
// Configure pin as GPIO output to avoid glitch during timer configuration
uint32_t pin = IO_Pin(motor->io);
LL_GPIO_SetPinMode(IO_GPIO(motor->io), pin, LL_GPIO_MODE_OUTPUT);
LL_GPIO_SetPinSpeed(IO_GPIO(motor->io), pin, LL_GPIO_SPEED_FREQ_LOW); // Needs to be low
LL_GPIO_SetPinPull(IO_GPIO(motor->io), pin, LL_GPIO_PULL_NO);
LL_GPIO_SetPinOutputType(IO_GPIO(motor->io), pin, LL_GPIO_OUTPUT_PUSHPULL);
#endif
LL_TIM_IC_Init(timer, motor->llChannel, &motor->icInitStruct);
#ifdef STM32H7
IOConfigGPIOAF(motor->io, motor->iocfg, timerHardware->alternateFunction);
// Configure pin back to timer
LL_GPIO_SetPinMode(IO_GPIO(motor->io), IO_Pin(motor->io), LL_GPIO_MODE_ALTERNATE);
if (IO_Pin(motor->io) & 0xFF) {
LL_GPIO_SetAFPin_0_7(IO_GPIO(motor->io), IO_Pin(motor->io), timerHardware->alternateFunction);
} else {
LL_GPIO_SetAFPin_8_15(IO_GPIO(motor->io), IO_Pin(motor->io), timerHardware->alternateFunction);
}
#endif
motor->dmaInitStruct.Direction = LL_DMA_DIRECTION_PERIPH_TO_MEMORY;