diff --git a/src/main/drivers/io.c b/src/main/drivers/io.c index 7d17b02d08..cfe25b4be1 100644 --- a/src/main/drivers/io.c +++ b/src/main/drivers/io.c @@ -155,16 +155,10 @@ uint32_t IO_EXTI_Line(IO_t io) if (!io) { return 0; } -#if defined(STM32F1) +#if defined(STM32F1) || defined(STM32F4) || defined(STM32F7) || defined(STM32H7) return 1 << IO_GPIOPinIdx(io); #elif defined(STM32F3) return IO_GPIOPinIdx(io); -#elif defined(STM32F4) - return 1 << IO_GPIOPinIdx(io); -#elif defined(STM32F7) - return 1 << IO_GPIOPinIdx(io); -#elif defined(STM32H7) - return 1 << IO_GPIOPinIdx(io); #elif defined(SIMULATOR_BUILD) return 0; #else @@ -194,11 +188,7 @@ void IOWrite(IO_t io, bool hi) #if defined(USE_FULL_LL_DRIVER) LL_GPIO_SetOutputPin(IO_GPIO(io), IO_Pin(io) << (hi ? 0 : 16)); #elif defined(USE_HAL_DRIVER) - if (hi) { - HAL_GPIO_WritePin(IO_GPIO(io), IO_Pin(io), GPIO_PIN_SET); - } else { - HAL_GPIO_WritePin(IO_GPIO(io), IO_Pin(io), GPIO_PIN_RESET); - } + HAL_GPIO_WritePin(IO_GPIO(io), IO_Pin(io), hi ? GPIO_PIN_SET : GPIO_PIN_RESET); #elif defined(STM32F4) if (hi) { IO_GPIO(io)->BSRRL = IO_Pin(io); @@ -337,21 +327,7 @@ void IOConfigGPIO(IO_t io, ioConfig_t cfg) void IOConfigGPIO(IO_t io, ioConfig_t cfg) { - if (!io) { - return; - } - - rccPeriphTag_t rcc = ioPortDefs[IO_GPIOPortIdx(io)].rcc; - RCC_ClockCmd(rcc, ENABLE); - - GPIO_InitTypeDef init = { - .Pin = IO_Pin(io), - .Mode = (cfg >> 0) & 0x13, - .Speed = (cfg >> 2) & 0x03, - .Pull = (cfg >> 5) & 0x03, - }; - - HAL_GPIO_Init(IO_GPIO(io), &init); + IOConfigGPIOAF(io, cfg, 0); } void IOConfigGPIOAF(IO_t io, ioConfig_t cfg, uint8_t af) diff --git a/src/main/drivers/io.h b/src/main/drivers/io.h index baaf12f847..3115283307 100644 --- a/src/main/drivers/io.h +++ b/src/main/drivers/io.h @@ -49,25 +49,7 @@ #define IOCFG_IPU IO_CONFIG(GPIO_Mode_IPU, GPIO_Speed_2MHz) #define IOCFG_IN_FLOATING IO_CONFIG(GPIO_Mode_IN_FLOATING, GPIO_Speed_2MHz) -#elif defined(STM32H7) -// Copied from F7. Need Review -//speed is packed inside modebits 5 and 2, -#define IO_CONFIG(mode, speed, pupd) ((mode) | ((speed) << 2) | ((pupd) << 5)) - -#define IOCFG_OUT_PP IO_CONFIG(GPIO_MODE_OUTPUT_PP, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL) -#define IOCFG_OUT_PP_UP IO_CONFIG(GPIO_MODE_OUTPUT_PP, GPIO_SPEED_FREQ_LOW, GPIO_PULLUP) -#define IOCFG_OUT_PP_25 IO_CONFIG(GPIO_MODE_OUTPUT_PP, GPIO_SPEED_FREQ_HIGH, GPIO_NOPULL) -#define IOCFG_OUT_OD IO_CONFIG(GPIO_MODE_OUTPUT_OD, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL) -#define IOCFG_AF_PP IO_CONFIG(GPIO_MODE_AF_PP, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL) -#define IOCFG_AF_PP_PD IO_CONFIG(GPIO_MODE_AF_PP, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN) -#define IOCFG_AF_PP_UP IO_CONFIG(GPIO_MODE_AF_PP, GPIO_SPEED_FREQ_LOW, GPIO_PULLUP) -#define IOCFG_AF_OD IO_CONFIG(GPIO_MODE_AF_OD, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL) -#define IOCFG_IPD IO_CONFIG(GPIO_MODE_INPUT, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN) -#define IOCFG_IPU IO_CONFIG(GPIO_MODE_INPUT, GPIO_SPEED_FREQ_LOW, GPIO_PULLUP) -#define IOCFG_IN_FLOATING IO_CONFIG(GPIO_MODE_INPUT, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL) -#define IOCFG_IPU_25 IO_CONFIG(GPIO_MODE_INPUT, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP) - -#elif defined(STM32F7) +#elif defined(STM32F7) || defined(STM32H7) //speed is packed inside modebits 5 and 2, #define IO_CONFIG(mode, speed, pupd) ((mode) | ((speed) << 2) | ((pupd) << 5))