diff --git a/src/main/drivers/io.c b/src/main/drivers/io.c index cfe25b4be1..04da6425ac 100644 --- a/src/main/drivers/io.c +++ b/src/main/drivers/io.c @@ -92,6 +92,15 @@ const struct ioPortDef_s ioPortDefs[] = { { RCC_AHB4(GPIOH) }, { RCC_AHB4(GPIOI) }, }; +#elif defined(STM32G4) +const struct ioPortDef_s ioPortDefs[] = { + { RCC_AHB2(GPIOA) }, + { RCC_AHB2(GPIOB) }, + { RCC_AHB2(GPIOC) }, + { RCC_AHB2(GPIOD) }, + { RCC_AHB2(GPIOE) }, + { RCC_AHB2(GPIOF) }, +}; #endif ioRec_t* IO_Rec(IO_t io) @@ -155,7 +164,7 @@ uint32_t IO_EXTI_Line(IO_t io) if (!io) { return 0; } -#if defined(STM32F1) || defined(STM32F4) || defined(STM32F7) || defined(STM32H7) +#if defined(STM32F1) || defined(STM32F4) || defined(STM32F7) || defined(STM32H7) || defined(STM32G4) return 1 << IO_GPIOPinIdx(io); #elif defined(STM32F3) return IO_GPIOPinIdx(io); @@ -323,7 +332,7 @@ void IOConfigGPIO(IO_t io, ioConfig_t cfg) GPIO_Init(IO_GPIO(io), &init); } -#elif defined(STM32H7) +#elif defined(STM32H7) || defined(STM32G4) void IOConfigGPIO(IO_t io, ioConfig_t cfg) { diff --git a/src/main/drivers/io.h b/src/main/drivers/io.h index 3115283307..7fe199eeb3 100644 --- a/src/main/drivers/io.h +++ b/src/main/drivers/io.h @@ -49,7 +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(STM32F7) || defined(STM32H7) +#elif defined(STM32F7) || defined(STM32H7) || defined(STM32G4) //speed is packed inside modebits 5 and 2, #define IO_CONFIG(mode, speed, pupd) ((mode) | ((speed) << 2) | ((pupd) << 5)) @@ -122,7 +122,7 @@ bool IOIsFreeOrPreinit(IO_t io); IO_t IOGetByTag(ioTag_t tag); void IOConfigGPIO(IO_t io, ioConfig_t cfg); -#if defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(STM32H7) +#if defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(STM32H7) || defined(STM32G4) void IOConfigGPIOAF(IO_t io, ioConfig_t cfg, uint8_t af); #endif diff --git a/src/main/drivers/rcc.h b/src/main/drivers/rcc.h index 0dae32b3b9..dd4da4db21 100644 --- a/src/main/drivers/rcc.h +++ b/src/main/drivers/rcc.h @@ -39,6 +39,11 @@ enum rcc_reg { RCC_APB3, RCC_AHB4, RCC_APB4, +#elif defined(STM32G4) + RCC_AHB2, + RCC_APB2, + RCC_APB1, + RCC_AHB1, #else RCC_AHB, RCC_APB2, @@ -64,5 +69,13 @@ enum rcc_reg { #define RCC_APB1H(periph) RCC_ENCODE(RCC_APB1H, RCC_APB1HENR_ ## periph ## EN) #endif +#ifdef STM32G4 +#undef RCC_APB1 +#define RCC_APB11(periph) RCC_ENCODE(RCC_APB1, RCC_APB1ENR1_ ## periph ## EN) +#define RCC_APB12(periph) RCC_ENCODE(RCC_APB1, RCC_APB1ENR2_ ## periph ## EN) +#define RCC_AHB1(periph) RCC_ENCODE(RCC_AHB1, RCC_AHB1ENR_ ## periph ## EN) +#define RCC_AHB2(periph) RCC_ENCODE(RCC_AHB2, RCC_AHB2ENR_ ## periph ## EN) +#endif + void RCC_ClockCmd(rccPeriphTag_t periphTag, FunctionalState NewState); void RCC_ResetCmd(rccPeriphTag_t periphTag, FunctionalState NewState);