diff --git a/arch/arm/include/stm32/stm32g47xxx_irq.h b/arch/arm/include/stm32/stm32g47xxx_irq.h new file mode 100644 index 0000000000..4daf9d4d0f --- /dev/null +++ b/arch/arm/include/stm32/stm32g47xxx_irq.h @@ -0,0 +1,200 @@ +/**************************************************************************************************** + * arch/arm/include/stm32/stm32g47xxx_irq.h + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************************************/ + +/* This file should never be included directly but, rather, only indirectly + * through nuttx/irq.h + */ + +#ifndef __ARCH_ARM_INCLUDE_STM32_STM32G47XXX_IRQ_H +#define __ARCH_ARM_INCLUDE_STM32_STM32G47XXX_IRQ_H + +/**************************************************************************************************** + * Included Files + ****************************************************************************************************/ + +#include +#include + +/**************************************************************************************************** + * Pre-processor Definitions + ****************************************************************************************************/ + +/* IRQ numbers. The IRQ numbers correspond to the vector numbers and hence + * map directly to bits in the NVIC. This does, however, waste several words + * of memory in the IRQ to handle mapping tables. + * + * Processor Exceptions (vectors 0-15) are common to all STM32 parts and are + * found in nuttx/arch/arm/include/stm32/irq.h. They are not repeated here. + * + * Other interrupts (vectors >= 16) are defined below. + */ + +#define STM32_IRQ_WWDG (STM32_IRQ_FIRST + 0) /* 0: Window Watchdog interrupt */ +#define STM32_IRQ_PVD (STM32_IRQ_FIRST + 1) /* 1: PVD through EXTI Line detection interrupt */ +#define STM32_IRQ_TAMPER (STM32_IRQ_FIRST + 2) /* 2: Tamper interrupt, or Time Stamp (shared with STM32_IRQ_TIMESTAMP) */ +#define STM32_IRQ_TIMESTAMP (STM32_IRQ_FIRST + 2) /* 2: Time stamp interrupt (shared with STM32_IRQ_TAMPER) */ +#define STM32_IRQ_RTC_WKUP (STM32_IRQ_FIRST + 3) /* 3: RTC global interrupt */ +#define STM32_IRQ_FLASH (STM32_IRQ_FIRST + 4) /* 4: Flash global interrupt */ +#define STM32_IRQ_RCC (STM32_IRQ_FIRST + 5) /* 5: RCC global interrupt */ +#define STM32_IRQ_EXTI0 (STM32_IRQ_FIRST + 6) /* 6: EXTI Line 0 interrupt */ +#define STM32_IRQ_EXTI1 (STM32_IRQ_FIRST + 7) /* 7: EXTI Line 1 interrupt */ +#define STM32_IRQ_EXTI2 (STM32_IRQ_FIRST + 8) /* 8: EXTI Line 2 interrupt, or */ +#define STM32_IRQ_EXTI3 (STM32_IRQ_FIRST + 9) /* 9: EXTI Line 3 interrupt */ + +#define STM32_IRQ_EXTI4 (STM32_IRQ_FIRST + 10) /* 10: EXTI Line 4 interrupt */ +#define STM32_IRQ_DMA1CH1 (STM32_IRQ_FIRST + 11) /* 11: DMA1 channel 1 global interrupt */ +#define STM32_IRQ_DMA1CH2 (STM32_IRQ_FIRST + 12) /* 12: DMA1 channel 2 global interrupt */ +#define STM32_IRQ_DMA1CH3 (STM32_IRQ_FIRST + 13) /* 13: DMA1 channel 3 global interrupt */ +#define STM32_IRQ_DMA1CH4 (STM32_IRQ_FIRST + 14) /* 14: DMA1 channel 4 global interrupt */ +#define STM32_IRQ_DMA1CH5 (STM32_IRQ_FIRST + 15) /* 15: DMA1 channel 5 global interrupt */ +#define STM32_IRQ_DMA1CH6 (STM32_IRQ_FIRST + 16) /* 16: DMA1 channel 6 global interrupt */ +#define STM32_IRQ_DMA1CH7 (STM32_IRQ_FIRST + 17) /* 17: DMA1 channel 7 global interrupt */ +#define STM32_IRQ_ADC12 (STM32_IRQ_FIRST + 18) /* 18: ADC1 and ADC2 shared global interrupt */ +#define STM32_IRQ_USBHP (STM32_IRQ_FIRST + 19) /* 19: USB High priority interrupt */ + +#define STM32_IRQ_USBLP (STM32_IRQ_FIRST + 20) /* 20: USB Low priority interrupt */ +#define STM32_IRQ_FDCAN1_0 (STM32_IRQ_FIRST + 21) /* 21: FDCAN1 interrupt 0 */ +#define STM32_IRQ_FDCAN1_1 (STM32_IRQ_FIRST + 22) /* 22: FDCAN1 interrupt 1 */ +#define STM32_IRQ_EXTI95 (STM32_IRQ_FIRST + 23) /* 23: EXTI Line[9:5] interrupts */ +#define STM32_IRQ_TIM15 (STM32_IRQ_FIRST + 24) /* 24: TIM15 global interrupt (shared with STM32_IRQ_TIM1BRK) */ +#define STM32_IRQ_TIM1BRK (STM32_IRQ_FIRST + 24) /* 24: TIM1 Break, Transition error, Index error (shared with STM32_IRQ_TIM15) */ +#define STM32_IRQ_TIM16 (STM32_IRQ_FIRST + 25) /* 25: TIM16 global interrupt (shared with STM32_IRQ_TIM1UP) */ +#define STM32_IRQ_TIM1UP (STM32_IRQ_FIRST + 25) /* 25: TIM1 Update interrupt (shared with STM32_IRQ_TIM16) */ +#define STM32_IRQ_TIM17 (STM32_IRQ_FIRST + 26) /* 26: TIM17 global interrupt (shared with STM32_IRQ_TIM1TRGCOM) */ +#define STM32_IRQ_TIM1TRGCOM (STM32_IRQ_FIRST + 26) /* 26: TIM1 Trigger, Commutation, Direction Change, and Index interrupt (shared with STM32_IRQ_TIM17) */ +#define STM32_IRQ_TIM1CC (STM32_IRQ_FIRST + 27) /* 27: TIM1 Capture Compare interrupt */ +#define STM32_IRQ_TIM2 (STM32_IRQ_FIRST + 28) /* 28: TIM2 global interrupt */ +#define STM32_IRQ_TIM3 (STM32_IRQ_FIRST + 29) /* 29: TIM3 global interrupt */ + +#define STM32_IRQ_TIM4 (STM32_IRQ_FIRST + 30) /* 30: TIM4 global interrupt */ +#define STM32_IRQ_I2C1EV (STM32_IRQ_FIRST + 31) /* 31: I2C1 event interrupt */ +#define STM32_IRQ_I2C1ER (STM32_IRQ_FIRST + 32) /* 32: I2C1 error interrupt */ +#define STM32_IRQ_I2C2EV (STM32_IRQ_FIRST + 33) /* 33: I2C2 event interrupt */ +#define STM32_IRQ_I2C2ER (STM32_IRQ_FIRST + 34) /* 34: I2C2 error interrupt */ +#define STM32_IRQ_SPI1 (STM32_IRQ_FIRST + 35) /* 35: SPI1 global interrupt */ +#define STM32_IRQ_SPI2 (STM32_IRQ_FIRST + 36) /* 36: SPI2 global interrupt */ +#define STM32_IRQ_USART1 (STM32_IRQ_FIRST + 37) /* 37: USART1 global interrupt */ +#define STM32_IRQ_USART2 (STM32_IRQ_FIRST + 38) /* 38: USART2 global interrupt */ +#define STM32_IRQ_USART3 (STM32_IRQ_FIRST + 39) /* 39: USART3 global interrupt */ + +#define STM32_IRQ_EXTI1510 (STM32_IRQ_FIRST + 40) /* 40: EXTI Line[15:10] interrupts */ +#define STM32_IRQ_RTCALRM (STM32_IRQ_FIRST + 41) /* 41: RTC alarm through EXTI line interrupt */ +#define STM32_IRQ_USBWKUP (STM32_IRQ_FIRST + 42) /* 42: 42: USB wakeup from suspend through EXTI line interrupt */ +#define STM32_IRQ_TIM8BRK (STM32_IRQ_FIRST + 43) /* 43: TIM8 Break, Transition error, Index error */ +#define STM32_IRQ_TIM8UP (STM32_IRQ_FIRST + 44) /* 44: TIM8 Update interrupt */ +#define STM32_IRQ_TIM8TRGCOM (STM32_IRQ_FIRST + 45) /* 45: TIM8 Trigger, Commutation, Direction Change, and Index interrupt */ +#define STM32_IRQ_TIM8CC (STM32_IRQ_FIRST + 46) /* 46: TIM8 Capture Compare interrupt */ +#define STM32_IRQ_ADC3 (STM32_IRQ_FIRST + 47) /* 47: ADC3 global interrupt */ +#define STM32_IRQ_FMC (STM32_IRQ_FIRST + 48) /* 48: FMC global interrupt */ +#define STM32_IRQ_LPTIM1 (STM32_IRQ_FIRST + 49) /* 49: LPTIM1 interrupt */ + +#define STM32_IRQ_TIM5 (STM32_IRQ_FIRST + 50) /* 50: TIM5 global interrupt */ +#define STM32_IRQ_SPI3 (STM32_IRQ_FIRST + 51) /* 51: SPI3 global interrupt */ +#define STM32_IRQ_UART4 (STM32_IRQ_FIRST + 52) /* 52: UART4 global interrupt */ +#define STM32_IRQ_UART5 (STM32_IRQ_FIRST + 53) /* 53: UART5 global interrupt */ +#define STM32_IRQ_TIM6 (STM32_IRQ_FIRST + 54) /* 54: TIM6 global interrupt (shared with STM32_IRQ_DAC1, STM32_IRQ_DAC3) */ +#define STM32_IRQ_DAC1 (STM32_IRQ_FIRST + 54) /* 54: DAC1 underrun error interrupt (shared with STM32_IRQ_TIM6, STM32_IRQ_DAC3) */ +#define STM32_IRQ_DAC3 (STM32_IRQ_FIRST + 54) /* 54: DAC3 underrun error interrupt (shared with STM32_IRQ_TIM6, STM32_IRQ_DAC1) */ +#define STM32_IRQ_TIM7 (STM32_IRQ_FIRST + 55) /* 55: TIM7 global interrupt (shared with STM32_IRQ_DAC2, STM32_IRQ_DAC4) */ +#define STM32_IRQ_DAC2 (STM32_IRQ_FIRST + 55) /* 55: DAC2 underrun error interrupt (shared with STM32_IRQ_TIM7) */ +#define STM32_IRQ_DAC4 (STM32_IRQ_FIRST + 55) /* 55: DAC4 underrun error interrupt (shared with STM32_IRQ_TIM7) */ +#define STM32_IRQ_DMA2CH1 (STM32_IRQ_FIRST + 56) /* 56: DMA2 channel 1 global interrupt */ +#define STM32_IRQ_DMA2CH2 (STM32_IRQ_FIRST + 57) /* 57: DMA2 channel 2 global interrupt */ +#define STM32_IRQ_DMA2CH3 (STM32_IRQ_FIRST + 58) /* 58: DMA2 channel 3 global interrupt */ +#define STM32_IRQ_DMA2CH4 (STM32_IRQ_FIRST + 59) /* 59: DMA2 channel 4 global interrupt */ + +#define STM32_IRQ_DMA2CH5 (STM32_IRQ_FIRST + 60) /* 60: DMA2 channel 5 global interrupt */ +#define STM32_IRQ_ADC4 (STM32_IRQ_FIRST + 61) /* 61: ADC4 global interrupt */ +#define STM32_IRQ_ADC5 (STM32_IRQ_FIRST + 62) /* 62: ADC5 global interrupt */ +#define STM32_IRQ_UCPD (STM32_IRQ_FIRST + 63) /* 63: UCPD global interrupt */ +#define STM32_IRQ_COMP123 (STM32_IRQ_FIRST + 64) /* 64: COMP1, COMP2, and COMP3 interrupts */ +#define STM32_IRQ_COMP456 (STM32_IRQ_FIRST + 65) /* 65: COMP4, COMP5, and COMP6 interrupts */ +#define STM32_IRQ_COMP7 (STM32_IRQ_FIRST + 66) /* 66: COMPP7 interrupt */ +#define STM32_IRQ_HRTIM1MST (STM32_IRQ_FIRST + 67) /* 67: HRTIM1 master timer interrupt */ +#define STM32_IRQ_HRTIM1TIMA (STM32_IRQ_FIRST + 68) /* 68: HRTIM1 timer A interrupt */ +#define STM32_IRQ_HRTIM1TIMB (STM32_IRQ_FIRST + 69) /* 69: HRTIM1 timer B interrupt */ + +#define STM32_IRQ_HRTIM1TIMC (STM32_IRQ_FIRST + 70) /* 70: HRTIM1 timer C interrupt */ +#define STM32_IRQ_HRTIM1TIMD (STM32_IRQ_FIRST + 71) /* 71: HRTIM1 timer D interrupt */ +#define STM32_IRQ_HRTIM1TIME (STM32_IRQ_FIRST + 72) /* 72: HRTIM1 timer E interrupt */ +#define STM32_IRQ_HRTIM1FLT (STM32_IRQ_FIRST + 73) /* 73: HRTIM1 fault interrupt */ +#define STM32_IRQ_HRTIM1TIMF (STM32_IRQ_FIRST + 74) /* 74: HRTIM1 timer E interrupt */ +#define STM32_IRQ_CRS (STM32_IRQ_FIRST + 75) /* 75: CRS (Clock Recovery System) global interrupt */ +#define STM32_IRQ_SAI1 (STM32_IRQ_FIRST + 76) /* 76: SAI4 global interrupt */ +#define STM32_IRQ_TIM20BRK (STM32_IRQ_FIRST + 77) /* 77: TIM20 Break, Transition error, Index error interrupt */ +#define STM32_IRQ_TIM20UP (STM32_IRQ_FIRST + 78) /* 78: TIM20 Update interrupt */ +#define STM32_IRQ_TIM20TRGCOM (STM32_IRQ_FIRST + 79) /* 79: TIM20 Trigger, Commutation, Direction Change, and Index interrupt */ + +#define STM32_IRQ_TIM20CC (STM32_IRQ_FIRST + 80) /* 80: TIM20 Capture Compare interrupt */ +#define STM32_IRQ_FPU (STM32_IRQ_FIRST + 81) /* 81: FPU global interrupt */ +#define STM32_IRQ_I2C4EV (STM32_IRQ_FIRST + 82) /* 82: I2C4 event interrupt */ +#define STM32_IRQ_I2C4ER (STM32_IRQ_FIRST + 83) /* 83: I2C4 error interrupt */ +#define STM32_IRQ_SPI4 (STM32_IRQ_FIRST + 84) /* 84: SPI4 global interrupt */ +#define STM32_IRQ_AES (STM32_IRQ_FIRST + 85) /* 85: AES global interrupt */ +#define STM32_IRQ_FDCAN2_0 (STM32_IRQ_FIRST + 86) /* 86: FDCAN2 interrupt 0 */ +#define STM32_IRQ_FDCAN2_1 (STM32_IRQ_FIRST + 87) /* 87: FDCAN2 interrupt 1 */ +#define STM32_IRQ_FDCAN3_0 (STM32_IRQ_FIRST + 88) /* 88: FDCAN3 interrupt 0 */ +#define STM32_IRQ_FDCAN3_1 (STM32_IRQ_FIRST + 89) /* 89: FDCAN3 interrupt 1 */ + +#define STM32_IRQ_RNG (STM32_IRQ_FIRST + 90) /* 90: RNG global interrupt */ +#define STM32_IRQ_LPUART (STM32_IRQ_FIRST + 91) /* 91: LPUART global interrupt */ +#define STM32_IRQ_I2C3EV (STM32_IRQ_FIRST + 92) /* 92: I2C3 event interrupt */ +#define STM32_IRQ_I2C3ER (STM32_IRQ_FIRST + 93) /* 93: I2C3 error interrupt */ +#define STM32_IRQ_DMAMUXOV (STM32_IRQ_FIRST + 94) /* 94: DMAMUX overrun interrupt */ +#define STM32_IRQ_QUADSPI (STM32_IRQ_FIRST + 95) /* 95: QuadSPI global interrupt */ +#define STM32_IRQ_DMA1CH8 (STM32_IRQ_FIRST + 96) /* 96: DMA1 channel 8 global interrupt */ +#define STM32_IRQ_DMA2CH6 (STM32_IRQ_FIRST + 97) /* 97: DMA2 channel 6 global interrupt */ +#define STM32_IRQ_DMA2CH7 (STM32_IRQ_FIRST + 98) /* 98: DMA2 channel 7 global interrupt */ +#define STM32_IRQ_DMA2CH8 (STM32_IRQ_FIRST + 99) /* 99: DMA2 channel 8 global interrupt */ + +#define STM32_IRQ_CORDIC (STM32_IRQ_FIRST + 100) /* 100: CORDIC trigonometric accelerator interrupt */ +#define STM32_IRQ_FMAC (STM32_IRQ_FIRST + 101) /* 101: FMAC filter math acclerator interrupt */ + +#define STM32_IRQ_NEXTINT (102) +#define NR_IRQS (STM32_IRQ_FIRST + 102) + +/**************************************************************************************************** + * Public Types + ****************************************************************************************************/ + +/**************************************************************************************************** + * Public Data + ****************************************************************************************************/ + +#ifndef __ASSEMBLY__ +#ifdef __cplusplus +#define EXTERN extern "C" +extern "C" +{ +#else +#define EXTERN extern +#endif + +/**************************************************************************************************** + * Public Function Prototypes + ****************************************************************************************************/ + +#undef EXTERN +#ifdef __cplusplus +} +#endif +#endif + +#endif /* __ARCH_ARM_INCLUDE_STM32F30XXX_IRQ_H */ diff --git a/arch/arm/src/stm32/hardware/stm32g474cxx_pinmap.h b/arch/arm/src/stm32/hardware/stm32g474cxx_pinmap.h new file mode 100644 index 0000000000..896cfaca59 --- /dev/null +++ b/arch/arm/src/stm32/hardware/stm32g474cxx_pinmap.h @@ -0,0 +1,723 @@ +/**************************************************************************************************** + * arch/arm/src/stm32/hardware/stm32g474cxx_pinmap.h + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************************************/ + +#ifndef __ARCH_ARM_SRC_STM32_HARDWARE_STM32G474CXX_PINMAP_H +#define __ARCH_ARM_SRC_STM32_HARDWARE_STM32G474CXX_PINMAP_H + +/**************************************************************************************************** + * Pre-processor Definitions + ****************************************************************************************************/ + +/* Alternate Pin Functions. All members of the STM32G47xxx family share the + * same pin multiplexing (although they differ in the pins physically + * available). + * + * Alternative pin selections are provided with a numeric suffix like _1, _2, + * etc. Drivers, however, will use the pin selection without the numeric + * suffix. Additional definitions are required in the board.h file. For + * example, if CAN1_RX connects via PA11 on some board, then the following + * definitions should appear in the board.h header file for that board: + * + * #define GPIO_CAN1_RX GPIO_CAN1_RX_1 + * + * The driver will then automatically configure PA11 as the CAN1 RX pin. + */ + +/* WARNING!!! WARNING!!! WARNING!!! WARNING!!! WARNING!!! WARNING!!! WARNING!!! + * Additional effort is required to select specific GPIO options such as + * frequency, open-drain/push-pull, and pull-up/down! Just the basics are + * defined for most pins in this file. + */ + +/* ADC - Analog Digital Converter *******************************************************************/ + +#define GPIO_ADC1_IN1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN0) +#define GPIO_ADC1_IN2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_ADC1_IN3 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN2) +#define GPIO_ADC1_IN4 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_ADC1_IN5 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_ADC1_IN10 (GPIO_ANALOG | GPIO_PORTF | GPIO_PIN0) +#define GPIO_ADC1_IN11 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN12) +#define GPIO_ADC1_IN12 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_ADC1_IN14 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN11) +#define GPIO_ADC1_IN15 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) + +#define GPIO_ADC2_IN1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN0) +#define GPIO_ADC2_IN2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_ADC2_IN3 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN6) +#define GPIO_ADC2_IN4 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN7) +#define GPIO_ADC2_IN5 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN4) +#define GPIO_ADC2_IN10 (GPIO_ANALOG | GPIO_PORTF | GPIO_PIN1) +#define GPIO_ADC2_IN12 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN2) +#define GPIO_ADC2_IN13 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_ADC2_IN14 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN11) +#define GPIO_ADC2_IN15 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) +#define GPIO_ADC2_IN17 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN4) + +#define GPIO_ADC3_IN1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_ADC3_IN5 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_ADC3_IN12 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) + +#define GPIO_ADC4_IN3 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN12) +#define GPIO_ADC4_IN4 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_ADC4_IN5 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) + +#define GPIO_ADC5_IN1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN8) +#define GPIO_ADC5_IN2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN9) + +/* COMP - Comparator ********************************************************************************/ + +#define GPIO_COMP1_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN0) +#define GPIO_COMP1_OUT_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_COMP1_OUT_3 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_COMP1_OUT_4 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN8) + +#define GPIO_COMP2_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN2) +#define GPIO_COMP2_OUT_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN7) +#define GPIO_COMP2_OUT_3 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_COMP2_OUT_4 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN9) + +#define GPIO_COMP3_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_COMP3_OUT_2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTB | GPIO_PIN15) + +#define GPIO_COMP4_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_COMP4_OUT_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_COMP4_OUT_3 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN14) + +#define GPIO_COMP5_OUT (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN9) + +#define GPIO_COMP6_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_COMP6_OUT_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN6) + +#define GPIO_COMP7_OUT (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN8) + +/* CRS **********************************************************************************************/ + +/* REVISIT: Clock Recovery System (CRS_SYNC signal exposed to pin(s)?) + * Before using the following defines, make sure they are correct! + */ + +#if 0 +# define GPIO_USB_CRS_SYNC (GPIO_ALT | GPIO_AF3 | GPIO_PORTA | GPIO_PIN10) +# define GPIO_UCPD1_CRS_SYNC (GPIO_ALT | GPIO_AF3 | GPIO_PORTB | GPIO_PIN3) +#endif + +/* DAC **********************************************************************************************/ + +#define GPIO_DAC1_OUT1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN4) +#define GPIO_DAC1_OUT2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_DAC2_OUT1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN6) + +/* Clocks outputs ***********************************************************************************/ + +/* MCU clock output */ + +#define GPIO_MCO_1 (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_MCO_2 (GPIO_ALT | GPIO_AF0 | GPIO_PORTG | GPIO_PIN10) + +/* Event outputs ************************************************************************************/ + +#define GPIO_PA0_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN0) +#define GPIO_PA1_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN1) +#define GPIO_PA2_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN2) +#define GPIO_PA3_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_PA4_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN4) +#define GPIO_PA5_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN5) +#define GPIO_PA6_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_PA7_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN7) +#define GPIO_PA8_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_PA9_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_PA10_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_PA11_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_PA12_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_PA13_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_PA14_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_PA15_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN15) + +#define GPIO_PB0_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN0) +#define GPIO_PB1_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_PB2_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN2) +#define GPIO_PB3_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN3) +#define GPIO_PB4_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_PB5_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_PB6_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_PB7_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_PB8_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_PB9_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN9) +#define GPIO_PB10_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_PB11_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN11) +#define GPIO_PB12_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_PB13_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_PB14_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN14) +#define GPIO_PB15_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN15) + +#define GPIO_PC4_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN4) +#define GPIO_PC6_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN6) +#define GPIO_PC10_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN10) +#define GPIO_PC11_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN11) +#define GPIO_PC13_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN13) +#define GPIO_PC14_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN14) +#define GPIO_PC15_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN15) + +#define GPIO_PF0_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTF | GPIO_PIN0) +#define GPIO_PF1_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTF | GPIO_PIN1) + +#define GPIO_PG10_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTG | GPIO_PIN10) + +/* FDCAN ********************************************************************************************/ + +#define GPIO_FDCAN1_RX_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN11) +#define GPIO_FDCAN1_RX_2 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN8) +#define GPIO_FDCAN1_TX_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN12) +#define GPIO_FDCAN1_TX_2 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN9) + +#define GPIO_FDCAN2_RX_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN5) +#define GPIO_FDCAN2_RX_2 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN12) +#define GPIO_FDCAN2_TX_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN6) +#define GPIO_FDCAN2_TX_2 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN13) + +#define GPIO_FDCAN3_RX_1 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN8) +#define GPIO_FDCAN3_RX_2 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN3) +#define GPIO_FDCAN3_TX_1 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN15) +#define GPIO_FDCAN3_TX_2 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN4) + +/* HRTIM - High-Resolution Timer ********************************************************************/ + +#define GPIO_HRTIM1_CHA1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_HRTIM1_CHA2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_HRTIM1_CHB1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_HRTIM1_CHB2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_HRTIM1_CHC1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_HRTIM1_CHC2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_HRTIM1_CHD1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN14) +#define GPIO_HRTIM1_CHD2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN15) +#define GPIO_HRTIM1_CHF1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTC | GPIO_PIN6) +#define GPIO_HRTIM1_EEV2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN11) +#define GPIO_HRTIM1_EEV3 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_HRTIM1_EEV4 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_HRTIM1_EEV5 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN9) +#define GPIO_HRTIM1_EEV6 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_HRTIM1_EEV7 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_HRTIM1_EEV8 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_HRTIM1_EEV9 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN3) +#define GPIO_HRTIM1_EEV10 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN6) +#define GPIO_HRTIM1_FLT1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_HRTIM1_FLT2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_HRTIM1_FLT3 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_HRTIM1_FLT4 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN11) +#define GPIO_HRTIM1_FLT5 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN0) +#define GPIO_HRTIM1_FLT6 (GPIO_ALT | GPIO_AF13 | GPIO_PORTC | GPIO_PIN10) +#define GPIO_HRTIM1_SCIN_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN2) +#define GPIO_HRTIM1_SCIN_2 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_HRTIM1_SCOUT_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_HRTIM1_SCOUT_2 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN3) + +/* I2C **********************************************************************************************/ + +#define GPIO_I2C1_SCL_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN13) +#define GPIO_I2C1_SCL_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN15) +#define GPIO_I2C1_SCL_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTB | GPIO_PIN8) +#define GPIO_I2C1_SDA_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN14) +#define GPIO_I2C1_SDA_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTB | GPIO_PIN7) +#define GPIO_I2C1_SDA_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTB | GPIO_PIN9) +#define GPIO_I2C1_SMBA (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN5) + +#define GPIO_I2C2_SCL_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN9) +#define GPIO_I2C2_SCL_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTC | GPIO_PIN4) +#define GPIO_I2C2_SDA_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN8) +#define GPIO_I2C2_SDA_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTF | GPIO_PIN0) +#define GPIO_I2C2_SMBA_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN10) +#define GPIO_I2C2_SMBA_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN12) + +#define GPIO_I2C3_SCL (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN8) +#define GPIO_I2C3_SDA_1 (GPIO_ALT | GPIO_AF8 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTB | GPIO_PIN5) +#define GPIO_I2C3_SDA_2 (GPIO_ALT | GPIO_AF8 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTC | GPIO_PIN11) +#define GPIO_I2C3_SMBA_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN9) +#define GPIO_I2C3_SMBA_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN2) + +#define GPIO_I2C4_SCL_1 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN13) +#define GPIO_I2C4_SCL_2 (GPIO_ALT | GPIO_AF8 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTC | GPIO_PIN6) +#define GPIO_I2C4_SDA (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTB | GPIO_PIN7) +#define GPIO_I2C4_SMBA (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN14) + +/* I2S **********************************************************************************************/ + +#define GPIO_I2S_CKIN (GPIO_ALT | GPIO_AF5 | GPIO_PORTA | GPIO_PIN12) + +#define GPIO_I2S2_CK_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_I2S2_CK_2 (GPIO_ALT | GPIO_AF5 | GPIO_PORTF | GPIO_PIN1) +#define GPIO_I2S2_MCK_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_I2S2_MCK_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTC | GPIO_PIN6) +#define GPIO_I2S2_SD_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_I2S2_SD_2 (GPIO_ALT | GPIO_AF5 | GPIO_PORTB | GPIO_PIN15) +#define GPIO_I2S2_WS_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_I2S2_WS_2 (GPIO_ALT | GPIO_AF5 | GPIO_PORTF | GPIO_PIN0) + +#define GPIO_I2S3_CK_1 (GPIO_ALT | GPIO_AF6 | GPIO_PORTB | GPIO_PIN3) +#define GPIO_I2S3_CK_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTC | GPIO_PIN10) +#define GPIO_I2S3_MCK (GPIO_ALT | GPIO_AF5 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_I2S3_SD (GPIO_ALT | GPIO_AF6 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_I2S3_WS_1 (GPIO_ALT | GPIO_AF6 | GPIO_PORTA | GPIO_PIN4) +#define GPIO_I2S3_WS_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTA | GPIO_PIN15) + +/* IR - Infrared with TIM16 channel 1 and TIM17 channel 1 *******************************************/ + +#define GPIO_IR_OUT_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_IR_OUT_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTB | GPIO_PIN9) + +/* LPTIM - Low Power Timer **************************************************************************/ + +#define GPIO_LPTIM1_ETR (GPIO_ALT | GPIO_AF11 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_LPTIM1_IN1 (GPIO_ALT | GPIO_AF11 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_LPTIM1_IN2 (GPIO_ALT | GPIO_AF11 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_LPTIM1_OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_LPTIM1_OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_PORTB | GPIO_PIN2) + +/* LPUART - Low-Power Universal Asynchronous Receiver Transmitter ***********************************/ + +#define GPIO_LPUART1_CTS_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_LPUART1_CTS_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_LPUART1_DE_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_LPUART1_DE_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_LPUART1_RTS_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_LPUART1_RTS_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_LPUART1_RX_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_LPUART1_RX_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_LPUART1_TX_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN2) +#define GPIO_LPUART1_TX_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN11) + +/* JTAG *********************************************************************************************/ + +#define GPIO_JTCK (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_JTDI (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_JTDO (GPIO_ALT | GPIO_AF0 | GPIO_PORTB | GPIO_PIN3) +#define GPIO_JTMS (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_NJTRST (GPIO_ALT | GPIO_AF0 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_SWCLK (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_SWDIO (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN13) + +/* OPAMP ********************************************************************************************/ + +#define GPIO_OPAMP1_VINM (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINM0 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINM1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINM_SEC (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINP_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP1_VINP_2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINP_3 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN7) +#define GPIO_OPAMP1_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP1_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINP_SEC_3 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN7) +#define GPIO_OPAMP1_VOUT (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN2) + +#define GPIO_OPAMP2_VINM (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_OPAMP2_VINM0 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_OPAMP2_VINM1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_OPAMP2_VINM_SEC (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_OPAMP2_VINP_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN7) +#define GPIO_OPAMP2_VINP_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) +#define GPIO_OPAMP2_VINP_3 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_OPAMP2_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN7) +#define GPIO_OPAMP2_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) +#define GPIO_OPAMP2_VINP_SEC_3 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_OPAMP2_VOUT (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN6) + +#define GPIO_OPAMP3_VINM0_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN2) +#define GPIO_OPAMP3_VINM0_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP3_VINM1_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN2) +#define GPIO_OPAMP3_VINM1_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP3_VINM_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN2) +#define GPIO_OPAMP3_VINM_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP3_VINM_SEC_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN2) +#define GPIO_OPAMP3_VINM_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP3_VINP_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP3_VINP_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) +#define GPIO_OPAMP3_VINP_3 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP3_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP3_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) +#define GPIO_OPAMP3_VINP_SEC_3 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP3_VOUT (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) + +#define GPIO_OPAMP4_VINM (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP4_VINM0 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP4_VINM1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP4_VINM_SEC (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP4_VINP_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN11) +#define GPIO_OPAMP4_VINP_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP4_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN11) +#define GPIO_OPAMP4_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP4_VOUT (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN12) + +#define GPIO_OPAMP5_VINM0_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP5_VINM0_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) +#define GPIO_OPAMP5_VINM1_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP5_VINM1_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) +#define GPIO_OPAMP5_VINM_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP5_VINM_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) +#define GPIO_OPAMP5_VINM_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP5_VINM_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) +#define GPIO_OPAMP5_VINP (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_OPAMP5_VINP_SEC (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_OPAMP5_VOUT (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN8) + +#define GPIO_OPAMP6_VINM0_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP6_VINM0_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_OPAMP6_VINM1_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP6_VINM1_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_OPAMP6_VINM_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP6_VINM_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_OPAMP6_VINM_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP6_VINM_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_OPAMP6_VINP_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN12) +#define GPIO_OPAMP6_VINP_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP6_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN12) +#define GPIO_OPAMP6_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP6_VOUT (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN11) + +/* QUADSPI ******************************************************************************************/ + +#define GPIO_QUADSPI1_BK1_IO0 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_QUADSPI1_BK1_IO1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN0) +#define GPIO_QUADSPI1_BK1_IO2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTA | GPIO_PIN7) +#define GPIO_QUADSPI1_BK1_IO3 (GPIO_ALT | GPIO_AF10 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_QUADSPI1_BK1_NCS_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTA | GPIO_PIN2) +#define GPIO_QUADSPI1_BK1_NCS_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN11) +#define GPIO_QUADSPI1_BK2_IO1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN2) +#define GPIO_QUADSPI1_BK2_IO3 (GPIO_ALT | GPIO_AF10 | GPIO_PORTC | GPIO_PIN4) +#define GPIO_QUADSPI1_CLK_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_QUADSPI1_CLK_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN10) + +/* RTC **********************************************************************************************/ + +#define GPIO_RTC_OUT2 (GPIO_ALT | GPIO_AF0 | GPIO_PORTB | GPIO_PIN2) +#define GPIO_RTC_REFIN_1 (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN1) +#define GPIO_RTC_REFIN_2 (GPIO_ALT | GPIO_AF0 | GPIO_PORTB | GPIO_PIN15) + +#if 0 + +/* REVISIT: How do you actually enable OUT1, TAMP1, TAMP2, TS? The datasheet + * (DS12288 Rev 2, page 54) shows OUT1, TS, and TAMP1 as "additional + * functions" for PC13 on all STM32G474(C-M-Q-R-V)xxx P/Ns, but the alternate + * function table (on page 72) makes no mention of these. Meanwhile, page 56 + * shows TAMP2 as an "additional function" but the same conundrum applies (for + * now). Granted, these are in the "additional function" column, not the + * "alternate function" column. + */ + +# define GPIO_RTC_OUT1 (GPIO_PORTC | GPIO_PIN13) +# define GPIO_RTC_TS (GPIO_PORTC | GPIO_PIN13) +# define GPIO_RTC_TAMP1 (GPIO_PORTC | GPIO_PIN13) +# define GPIO_RTC_TAMP2 (GPIO_PORTA | GPIO_PIN0) + +#endif + +/* SAI - Serial Audio Interface *********************************************************************/ + +#define GPIO_SAI1_CK1_1 (GPIO_ALT | GPIO_AF3 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_SAI1_CK1_2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_SAI1_CK2 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_SAI1_D1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_SAI1_D2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTB | GPIO_PIN9) +#define GPIO_SAI1_FS_A_1 (GPIO_ALT | GPIO_AF14 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_SAI1_FS_A_2 (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN9) +#define GPIO_SAI1_FS_B_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN4) +#define GPIO_SAI1_FS_B_2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_SAI1_FS_B_3 (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_SAI1_MCLK_A_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_SAI1_MCLK_A_2 (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_SAI1_MCLK_B (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_SAI1_SCK_A_1 (GPIO_ALT | GPIO_AF14 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_SAI1_SCK_A_2 (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_SAI1_SCK_B (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN3) +#define GPIO_SAI1_SD_A (GPIO_ALT | GPIO_AF14 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_SAI1_SD_B_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_SAI1_SD_B_2 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN5) + +/* SPI - Serial Peripheral Interface ****************************************************************/ + +#define GPIO_SPI1_MISO_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN6) +#define GPIO_SPI1_MISO_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN4) +#define GPIO_SPI1_MOSI_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN7) +#define GPIO_SPI1_MOSI_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN5) +#define GPIO_SPI1_NSS_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN4) +#define GPIO_SPI1_NSS_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN15) +#define GPIO_SPI1_SCK_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN5) +#define GPIO_SPI1_SCK_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN3) + +#define GPIO_SPI2_MISO_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN10) +#define GPIO_SPI2_MISO_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN14) +#define GPIO_SPI2_MOSI_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN11) +#define GPIO_SPI2_MOSI_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN15) +#define GPIO_SPI2_NSS_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN12) +#define GPIO_SPI2_NSS_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTF | GPIO_PIN0) +#define GPIO_SPI2_SCK_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN13) +#define GPIO_SPI2_SCK_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTF | GPIO_PIN1) + +#define GPIO_SPI3_MISO_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN4) +#define GPIO_SPI3_MISO_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTC | GPIO_PIN11) +#define GPIO_SPI3_MOSI (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN5) +#define GPIO_SPI3_NSS_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN4) +#define GPIO_SPI3_NSS_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN15) +#define GPIO_SPI3_SCK_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN3) +#define GPIO_SPI3_SCK_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTC | GPIO_PIN10) + +/* TIM - Timers *************************************************************************************/ + +#define GPIO_TIM1_BKIN2 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM1_BKIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM1_BKIN_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_TIM1_BKIN_3 (GPIO_ALT | GPIO_AF9 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_TIM1_BKIN_4 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM1_BKIN_5 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_TIM1_BKIN_6 (GPIO_ALT | GPIO_AF6 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_TIM1_BKIN_7 (GPIO_ALT | GPIO_AF2 | GPIO_PORTC | GPIO_PIN13) +#define GPIO_TIM1_CH1IN (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN8) +#define GPIO_TIM1_CH1NIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM1_CH1NIN_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM1_CH1NIN_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN13) +#define GPIO_TIM1_CH1NIN_4 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN13) +#define GPIO_TIM1_CH1NOUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM1_CH1NOUT_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM1_CH1NOUT_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN13) +#define GPIO_TIM1_CH1NOUT_4 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN13) +#define GPIO_TIM1_CH1OUT (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN8) +#define GPIO_TIM1_CH2IN (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN9) +#define GPIO_TIM1_CH2NIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM1_CH2NIN_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM1_CH2NIN_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN14) +#define GPIO_TIM1_CH2NOUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM1_CH2NOUT_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM1_CH2NOUT_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN14) +#define GPIO_TIM1_CH2OUT (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN9) +#define GPIO_TIM1_CH3IN (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM1_CH3NIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM1_CH3NIN_2 (GPIO_ALT | GPIO_AF12 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM1_CH3NIN_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN15) +#define GPIO_TIM1_CH3NIN_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN12) +#define GPIO_TIM1_CH3NOUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM1_CH3NOUT_2 (GPIO_ALT | GPIO_AF12 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM1_CH3NOUT_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN15) +#define GPIO_TIM1_CH3NOUT_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN12) +#define GPIO_TIM1_CH3OUT (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM1_CH4IN (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM1_CH4NIN (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN5) +#define GPIO_TIM1_CH4OUT (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM1_ETR (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM1_ETR_1 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM1_ETR_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN4) + +#define GPIO_TIM2_CH1IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM2_CH1IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN5) +#define GPIO_TIM2_CH1IN_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN15) +#define GPIO_TIM2_CH1OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM2_CH1OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN5) +#define GPIO_TIM2_CH1OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN15) +#define GPIO_TIM2_CH2IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM2_CH2IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN3) +#define GPIO_TIM2_CH2OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM2_CH2OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN3) +#define GPIO_TIM2_CH3IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM2_CH3IN_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN9) +#define GPIO_TIM2_CH3IN_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN10) +#define GPIO_TIM2_CH3OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM2_CH3OUT_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN9) +#define GPIO_TIM2_CH3OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN10) +#define GPIO_TIM2_CH4IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM2_CH4IN_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM2_CH4IN_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN11) +#define GPIO_TIM2_CH4OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM2_CH4OUT_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM2_CH4OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN11) +#define GPIO_TIM2_ETR_1 (GPIO_ALT | GPIO_AF14 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM2_ETR_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN5) +#define GPIO_TIM2_ETR_3 (GPIO_ALT | GPIO_AF14 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN15) + +#define GPIO_TIM3_CH1IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM3_CH1IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM3_CH1IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN6) +#define GPIO_TIM3_CH1OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM3_CH1OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM3_CH1OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN6) +#define GPIO_TIM3_CH2IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN4) +#define GPIO_TIM3_CH2IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM3_CH2IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM3_CH2OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN4) +#define GPIO_TIM3_CH2OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM3_CH2OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM3_CH3IN (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM3_CH3OUT (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM3_CH4IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM3_CH4IN_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM3_CH4OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM3_CH4OUT_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM3_ETR (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN3) + +#define GPIO_TIM4_CH1IN_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM4_CH1IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM4_CH1OUT_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM4_CH1OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM4_CH2IN_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM4_CH2IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM4_CH2OUT_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM4_CH2OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM4_CH3IN_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN13) +#define GPIO_TIM4_CH3IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM4_CH3OUT_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN13) +#define GPIO_TIM4_CH3OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM4_CH4IN (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM4_CH4OUT (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM4_ETR_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN8) +#define GPIO_TIM4_ETR_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN3) + +#define GPIO_TIM5_CH1IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM5_CH1IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN2) +#define GPIO_TIM5_CH1OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM5_CH1OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN2) +#define GPIO_TIM5_CH2IN (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM5_CH2OUT (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM5_CH3IN (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM5_CH3OUT (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM5_CH4IN (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM5_CH4OUT (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM5_ETR (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN12) + +#define GPIO_TIM8_BKIN2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM8_BKIN_1 (GPIO_ALT | GPIO_AF9 | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM8_BKIN_2 (GPIO_ALT | GPIO_AF4 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM8_BKIN_3 (GPIO_ALT | GPIO_AF11 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM8_BKIN_4 (GPIO_ALT | GPIO_AF5 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM8_CH1IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN15) +#define GPIO_TIM8_CH1IN_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM8_CH1IN_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN6) +#define GPIO_TIM8_CH1NIN_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM8_CH1NIN_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN3) +#define GPIO_TIM8_CH1NIN_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN10) +#define GPIO_TIM8_CH1NOUT_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM8_CH1NOUT_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN3) +#define GPIO_TIM8_CH1NOUT_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN10) +#define GPIO_TIM8_CH1OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN15) +#define GPIO_TIM8_CH1OUT_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM8_CH1OUT_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN6) +#define GPIO_TIM8_CH2IN_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN14) +#define GPIO_TIM8_CH2IN_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM8_CH2NIN_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM8_CH2NIN_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM8_CH2NIN_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN11) +#define GPIO_TIM8_CH2NOUT_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM8_CH2NOUT_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM8_CH2NOUT_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN11) +#define GPIO_TIM8_CH2OUT_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN14) +#define GPIO_TIM8_CH2OUT_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM8_CH3IN (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM8_CH3NIN_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM8_CH3NIN_2 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM8_CH3NOUT_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM8_CH3NOUT_2 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM8_CH3OUT (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM8_CH4NIN (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN13) +#define GPIO_TIM8_CH4NOUT (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN13) +#define GPIO_TIM8_ETR_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM8_ETR_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN6) + +#define GPIO_TIM15_BKIN (GPIO_ALT | GPIO_AF9 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_TIM15_CH1IN_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM15_CH1IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN14) +#define GPIO_TIM15_CH1NIN_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM15_CH1NIN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN15) +#define GPIO_TIM15_CH1NOUT_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM15_CH1NOUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN15) +#define GPIO_TIM15_CH1OUT_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM15_CH1OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN14) +#define GPIO_TIM15_CH2IN_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM15_CH2IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN15) +#define GPIO_TIM15_CH2OUT_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM15_CH2OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN15) + +#define GPIO_TIM16_BKIN (GPIO_ALT | GPIO_AF1 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM16_CH1IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM16_CH1IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM16_CH1IN_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM16_CH1IN_4 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM16_CH1NIN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN13) +#define GPIO_TIM16_CH1NIN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM16_CH1NOUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN13) +#define GPIO_TIM16_CH1NOUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM16_CH1OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM16_CH1OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM16_CH1OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM16_CH1OUT_4 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN8) + +#define GPIO_TIM17_BKIN_1 (GPIO_ALT | GPIO_AF1 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM17_BKIN_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM17_CH1IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM17_CH1IN_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM17_CH1IN_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM17_CH1NIN (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM17_CH1NOUT (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM17_CH1OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM17_CH1OUT_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM17_CH1OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN9) + +#define GPIO_TIM20_CH1IN (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN2) +#define GPIO_TIM20_CH1OUT (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN2) + +/* UARTs/USARTs *************************************************************************************/ + +#define GPIO_USART1_CK (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_USART1_CTS (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_USART1_DE (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_USART1_NSS (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_USART1_RTS (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_USART1_RX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_USART1_RX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_USART1_TX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_USART1_TX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_USART1_TX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN4) + +#define GPIO_USART2_CK_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN4) +#define GPIO_USART2_CK_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_USART2_CTS (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN0) +#define GPIO_USART2_DE (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN1) +#define GPIO_USART2_NSS (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN0) +#define GPIO_USART2_RTS (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN1) +#define GPIO_USART2_RX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_USART2_RX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_USART2_RX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_USART2_TX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN2) +#define GPIO_USART2_TX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_USART2_TX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN3) + +#define GPIO_USART3_CK (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_USART3_CTS_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_USART3_CTS_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_USART3_DE (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN14) +#define GPIO_USART3_NSS_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_USART3_NSS_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_USART3_RTS (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN14) +#define GPIO_USART3_RX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_USART3_RX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN11) +#define GPIO_USART3_RX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN11) +#define GPIO_USART3_TX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN9) +#define GPIO_USART3_TX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_USART3_TX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN10) + +/* USB Device Full Speed ****************************************************************************/ + +#endif /* __ARCH_ARM_SRC_STM32_HARDWARE_STM32G474CXX_PINMAP_H */ diff --git a/arch/arm/src/stm32/hardware/stm32g474mxx_pinmap.h b/arch/arm/src/stm32/hardware/stm32g474mxx_pinmap.h new file mode 100644 index 0000000000..480f9403e2 --- /dev/null +++ b/arch/arm/src/stm32/hardware/stm32g474mxx_pinmap.h @@ -0,0 +1,935 @@ +/**************************************************************************************************** + * arch/arm/src/stm32/hardware/stm32g474mxx_pinmap.h + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************************************/ + +#ifndef __ARCH_ARM_SRC_STM32_HARDWARE_STM32G474MXX_PINMAP_H +#define __ARCH_ARM_SRC_STM32_HARDWARE_STM32G474MXX_PINMAP_H + +/**************************************************************************************************** + * Pre-processor Definitions + ****************************************************************************************************/ + +/* Alternate Pin Functions. All members of the STM32G47xxx family share the + * same pin multiplexing (although they differ in the pins physically + * available). + * + * Alternative pin selections are provided with a numeric suffix like _1, _2, + * etc. Drivers, however, will use the pin selection without the numeric + * suffix. Additional definitions are required in the board.h file. For + * example, if CAN1_RX connects via PA11 on some board, then the following + * definitions should appear in the board.h header file for that board: + * + * #define GPIO_CAN1_RX GPIO_CAN1_RX_1 + * + * The driver will then automatically configure PA11 as the CAN1 RX pin. + */ + +/* WARNING!!! WARNING!!! WARNING!!! WARNING!!! WARNING!!! WARNING!!! WARNING!!! + * Additional effort is required to select specific GPIO options such as + * frequency, open-drain/push-pull, and pull-up/down! Just the basics are + * defined for most pins in this file. + */ + +/* ADC - Analog Digital Converter *******************************************************************/ + +#define GPIO_ADC1_IN1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN0) +#define GPIO_ADC1_IN10 (GPIO_ANALOG | GPIO_PORTF | GPIO_PIN0) +#define GPIO_ADC1_IN11 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN12) +#define GPIO_ADC1_IN12 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_ADC1_IN14 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN11) +#define GPIO_ADC1_IN15 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) +#define GPIO_ADC1_IN2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_ADC1_IN3 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN2) +#define GPIO_ADC1_IN4 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_ADC1_IN5 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_ADC1_IN6 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN0) +#define GPIO_ADC1_IN7 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN1) +#define GPIO_ADC1_IN8 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN2) +#define GPIO_ADC1_IN9 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN3) + +#define GPIO_ADC2_IN1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN0) +#define GPIO_ADC2_IN10 (GPIO_ANALOG | GPIO_PORTF | GPIO_PIN1) +#define GPIO_ADC2_IN11 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_ADC2_IN12 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN2) +#define GPIO_ADC2_IN13 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_ADC2_IN14 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN11) +#define GPIO_ADC2_IN15 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) +#define GPIO_ADC2_IN17 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN4) +#define GPIO_ADC2_IN2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_ADC2_IN3 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN6) +#define GPIO_ADC2_IN4 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN7) +#define GPIO_ADC2_IN5 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN4) +#define GPIO_ADC2_IN6 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN0) +#define GPIO_ADC2_IN7 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN1) +#define GPIO_ADC2_IN8 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN2) +#define GPIO_ADC2_IN9 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN3) + +#define GPIO_ADC3_IN1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_ADC3_IN12 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) +#define GPIO_ADC3_IN14 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN10) +#define GPIO_ADC3_IN15 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN11) +#define GPIO_ADC3_IN16 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN12) +#define GPIO_ADC3_IN2 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN9) +#define GPIO_ADC3_IN3 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN13) +#define GPIO_ADC3_IN4 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN7) +#define GPIO_ADC3_IN5 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_ADC3_IN6 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN8) +#define GPIO_ADC3_IN7 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN10) +#define GPIO_ADC3_IN8 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN11) + +#define GPIO_ADC4_IN1 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN14) +#define GPIO_ADC4_IN12 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN8) +#define GPIO_ADC4_IN13 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN9) +#define GPIO_ADC4_IN14 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN10) +#define GPIO_ADC4_IN15 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN11) +#define GPIO_ADC4_IN16 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN12) +#define GPIO_ADC4_IN2 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN15) +#define GPIO_ADC4_IN3 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN12) +#define GPIO_ADC4_IN4 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_ADC4_IN5 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) +#define GPIO_ADC4_IN6 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN8) +#define GPIO_ADC4_IN7 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN10) +#define GPIO_ADC4_IN8 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN11) + +#define GPIO_ADC5_IN1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN8) +#define GPIO_ADC5_IN12 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN8) +#define GPIO_ADC5_IN13 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN9) +#define GPIO_ADC5_IN14 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN10) +#define GPIO_ADC5_IN15 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN11) +#define GPIO_ADC5_IN16 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN12) +#define GPIO_ADC5_IN2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN9) +#define GPIO_ADC5_IN6 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN8) +#define GPIO_ADC5_IN7 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN10) +#define GPIO_ADC5_IN8 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN11) + +/* COMP - Comparator ********************************************************************************/ + +#define GPIO_COMP1_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN0) +#define GPIO_COMP1_OUT_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_COMP1_OUT_3 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_COMP1_OUT_4 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN8) + +#define GPIO_COMP2_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN2) +#define GPIO_COMP2_OUT_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN7) +#define GPIO_COMP2_OUT_3 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_COMP2_OUT_4 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN9) + +#define GPIO_COMP3_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_COMP3_OUT_2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTB | GPIO_PIN15) +#define GPIO_COMP3_OUT_3 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN2) + +#define GPIO_COMP4_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_COMP4_OUT_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_COMP4_OUT_3 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN14) + +#define GPIO_COMP5_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_COMP5_OUT_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN7) + +#define GPIO_COMP6_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_COMP6_OUT_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN6) + +#define GPIO_COMP7_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_COMP7_OUT_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN8) + +/* CRS **********************************************************************************************/ + +/* REVISIT: Clock Recovery System (CRS_SYNC signal exposed to pin(s)?) + * Before using the following defines, make sure they are correct! + */ + +#if 0 +# define GPIO_USB_CRS_SYNC (GPIO_ALT | GPIO_AF3 | GPIO_PORTA | GPIO_PIN10) +# define GPIO_UCPD1_CRS_SYNC (GPIO_ALT | GPIO_AF3 | GPIO_PORTB | GPIO_PIN3) +#endif + +/* DAC **********************************************************************************************/ + +#define GPIO_DAC1_OUT1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN4) +#define GPIO_DAC1_OUT2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_DAC2_OUT1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN6) + +/* Clocks outputs ***********************************************************************************/ + +/* MCU clock output */ + +#define GPIO_MCO_1 (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_MCO_2 (GPIO_ALT | GPIO_AF0 | GPIO_PORTG | GPIO_PIN10) + +/* Event outputs ************************************************************************************/ + +#define GPIO_PA0_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN0) +#define GPIO_PA1_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN1) +#define GPIO_PA2_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN2) +#define GPIO_PA3_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_PA4_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN4) +#define GPIO_PA5_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN5) +#define GPIO_PA6_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_PA7_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN7) +#define GPIO_PA8_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_PA9_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_PA10_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_PA11_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_PA12_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_PA13_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_PA14_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_PA15_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN15) + +#define GPIO_PB0_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN0) +#define GPIO_PB1_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_PB2_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN2) +#define GPIO_PB3_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN3) +#define GPIO_PB4_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_PB5_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_PB6_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_PB7_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_PB8_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_PB9_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN9) +#define GPIO_PB10_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_PB11_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN11) +#define GPIO_PB12_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_PB13_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_PB14_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN14) +#define GPIO_PB15_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN15) + +#define GPIO_PC0_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN0) +#define GPIO_PC1_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN1) +#define GPIO_PC2_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN2) +#define GPIO_PC3_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN3) +#define GPIO_PC4_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN4) +#define GPIO_PC5_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN5) +#define GPIO_PC6_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN6) +#define GPIO_PC7_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN7) +#define GPIO_PC8_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN8) +#define GPIO_PC9_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN9) +#define GPIO_PC10_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN10) +#define GPIO_PC11_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN11) +#define GPIO_PC12_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN12) +#define GPIO_PC13_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN13) +#define GPIO_PC14_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN14) +#define GPIO_PC15_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN15) + +#define GPIO_PD0_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN0) +#define GPIO_PD1_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN1) +#define GPIO_PD2_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN2) +#define GPIO_PD8_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN8) +#define GPIO_PD9_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN9) +#define GPIO_PD10_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN10) +#define GPIO_PD11_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN11) + +#define GPIO_PE7_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN7) +#define GPIO_PE8_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN8) +#define GPIO_PE9_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN9) +#define GPIO_PE10_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN10) +#define GPIO_PE11_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN11) +#define GPIO_PE12_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN12) +#define GPIO_PE13_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN13) +#define GPIO_PE14_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN14) +#define GPIO_PE15_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN15) + +#define GPIO_PF0_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTF | GPIO_PIN0) +#define GPIO_PF1_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTF | GPIO_PIN1) + +#define GPIO_PG10_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTG | GPIO_PIN10) + +/* FDCAN ********************************************************************************************/ + +#define GPIO_FDCAN1_RX_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN11) +#define GPIO_FDCAN1_RX_2 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN8) +#define GPIO_FDCAN1_RX_3 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN0) +#define GPIO_FDCAN1_TX_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN12) +#define GPIO_FDCAN1_TX_2 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN9) +#define GPIO_FDCAN1_TX_3 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN1) + +#define GPIO_FDCAN2_RX_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN5) +#define GPIO_FDCAN2_RX_2 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN12) +#define GPIO_FDCAN2_TX_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN6) +#define GPIO_FDCAN2_TX_2 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN13) + +#define GPIO_FDCAN3_RX_1 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN8) +#define GPIO_FDCAN3_RX_2 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN3) +#define GPIO_FDCAN3_TX_1 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN15) +#define GPIO_FDCAN3_TX_2 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN4) + +/* HRTIM - High-Resolution Timer ********************************************************************/ + +#define GPIO_HRTIM1_CHA1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_HRTIM1_CHA2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_HRTIM1_CHB1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_HRTIM1_CHB2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_HRTIM1_CHC1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_HRTIM1_CHC2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_HRTIM1_CHD1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN14) +#define GPIO_HRTIM1_CHD2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN15) +#define GPIO_HRTIM1_CHE1 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN8) +#define GPIO_HRTIM1_CHE2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN9) +#define GPIO_HRTIM1_CHF1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTC | GPIO_PIN6) +#define GPIO_HRTIM1_CHF2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTC | GPIO_PIN7) +#define GPIO_HRTIM1_EEV1 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN12) +#define GPIO_HRTIM1_EEV10_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTC | GPIO_PIN5) +#define GPIO_HRTIM1_EEV10_2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN6) +#define GPIO_HRTIM1_EEV2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN11) +#define GPIO_HRTIM1_EEV3 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_HRTIM1_EEV4 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_HRTIM1_EEV5 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN9) +#define GPIO_HRTIM1_EEV6 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_HRTIM1_EEV7 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_HRTIM1_EEV8 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_HRTIM1_EEV9 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN3) +#define GPIO_HRTIM1_FLT1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_HRTIM1_FLT2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_HRTIM1_FLT3 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_HRTIM1_FLT4 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN11) +#define GPIO_HRTIM1_FLT5_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN0) +#define GPIO_HRTIM1_FLT5_2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN7) +#define GPIO_HRTIM1_FLT6 (GPIO_ALT | GPIO_AF13 | GPIO_PORTC | GPIO_PIN10) +#define GPIO_HRTIM1_SCIN_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN2) +#define GPIO_HRTIM1_SCIN_2 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_HRTIM1_SCOUT_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_HRTIM1_SCOUT_2 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN3) + +/* I2C **********************************************************************************************/ + +#define GPIO_I2C1_SCL_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN13) +#define GPIO_I2C1_SCL_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN15) +#define GPIO_I2C1_SCL_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTB | GPIO_PIN8) +#define GPIO_I2C1_SDA_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN14) +#define GPIO_I2C1_SDA_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTB | GPIO_PIN7) +#define GPIO_I2C1_SDA_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTB | GPIO_PIN9) +#define GPIO_I2C1_SMBA (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN5) + +#define GPIO_I2C2_SCL_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN9) +#define GPIO_I2C2_SCL_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTC | GPIO_PIN4) +#define GPIO_I2C2_SDA_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN8) +#define GPIO_I2C2_SDA_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTF | GPIO_PIN0) +#define GPIO_I2C2_SMBA_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN10) +#define GPIO_I2C2_SMBA_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN12) + +#define GPIO_I2C3_SCL_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN8) +#define GPIO_I2C3_SCL_2 (GPIO_ALT | GPIO_AF8 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTC | GPIO_PIN8) +#define GPIO_I2C3_SDA_1 (GPIO_ALT | GPIO_AF8 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTB | GPIO_PIN5) +#define GPIO_I2C3_SDA_2 (GPIO_ALT | GPIO_AF8 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTC | GPIO_PIN9) +#define GPIO_I2C3_SDA_3 (GPIO_ALT | GPIO_AF8 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTC | GPIO_PIN11) +#define GPIO_I2C3_SMBA_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN9) +#define GPIO_I2C3_SMBA_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN2) + +#define GPIO_I2C4_SCL_1 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN13) +#define GPIO_I2C4_SCL_2 (GPIO_ALT | GPIO_AF8 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTC | GPIO_PIN6) +#define GPIO_I2C4_SDA_1 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTB | GPIO_PIN7) +#define GPIO_I2C4_SDA_2 (GPIO_ALT | GPIO_AF8 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTC | GPIO_PIN7) +#define GPIO_I2C4_SMBA_1 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN14) +#define GPIO_I2C4_SMBA_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN11) + +/* I2S **********************************************************************************************/ + +#define GPIO_I2S_CKIN_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_I2S_CKIN_2 (GPIO_ALT | GPIO_AF5 | GPIO_PORTC | GPIO_PIN9) + +#define GPIO_I2S2_CK_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_I2S2_CK_2 (GPIO_ALT | GPIO_AF5 | GPIO_PORTF | GPIO_PIN1) +#define GPIO_I2S2_MCK_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_I2S2_MCK_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTC | GPIO_PIN6) +#define GPIO_I2S2_SD_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_I2S2_SD_2 (GPIO_ALT | GPIO_AF5 | GPIO_PORTB | GPIO_PIN15) +#define GPIO_I2S2_WS_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_I2S2_WS_2 (GPIO_ALT | GPIO_AF5 | GPIO_PORTF | GPIO_PIN0) + +#define GPIO_I2S3_CK_1 (GPIO_ALT | GPIO_AF6 | GPIO_PORTB | GPIO_PIN3) +#define GPIO_I2S3_CK_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTC | GPIO_PIN10) +#define GPIO_I2S3_MCK_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_I2S3_MCK_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTC | GPIO_PIN7) +#define GPIO_I2S3_SD_1 (GPIO_ALT | GPIO_AF6 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_I2S3_SD_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTC | GPIO_PIN12) +#define GPIO_I2S3_WS_1 (GPIO_ALT | GPIO_AF6 | GPIO_PORTA | GPIO_PIN4) +#define GPIO_I2S3_WS_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTA | GPIO_PIN15) + +/* IR - Infrared with TIM16 channel 1 and TIM17 channel 1 *******************************************/ + +#define GPIO_IR_OUT_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_IR_OUT_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTB | GPIO_PIN9) + +/* LPTIM - Low Power Timer **************************************************************************/ + +#define GPIO_LPTIM1_ETR_1 (GPIO_ALT | GPIO_AF11 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_LPTIM1_ETR_2 (GPIO_ALT | GPIO_AF1 | GPIO_PORTC | GPIO_PIN3) +#define GPIO_LPTIM1_IN1_1 (GPIO_ALT | GPIO_AF11 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_LPTIM1_IN1_2 (GPIO_ALT | GPIO_AF1 | GPIO_PORTC | GPIO_PIN0) +#define GPIO_LPTIM1_IN2_1 (GPIO_ALT | GPIO_AF11 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_LPTIM1_IN2_2 (GPIO_ALT | GPIO_AF1 | GPIO_PORTC | GPIO_PIN2) +#define GPIO_LPTIM1_OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_LPTIM1_OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_PORTB | GPIO_PIN2) +#define GPIO_LPTIM1_OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_PORTC | GPIO_PIN1) + +/* LPUART - Low-Power Universal Asynchronous Receiver Transmitter ***********************************/ + +#define GPIO_LPUART1_CTS_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_LPUART1_CTS_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_LPUART1_DE_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_LPUART1_DE_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_LPUART1_RTS_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_LPUART1_RTS_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_LPUART1_RX_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_LPUART1_RX_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_LPUART1_RX_3 (GPIO_ALT | GPIO_AF8 | GPIO_PORTC | GPIO_PIN0) +#define GPIO_LPUART1_TX_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN2) +#define GPIO_LPUART1_TX_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN11) +#define GPIO_LPUART1_TX_3 (GPIO_ALT | GPIO_AF8 | GPIO_PORTC | GPIO_PIN1) + +/* JTAG *********************************************************************************************/ + +#define GPIO_JTCK (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_JTDI (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_JTDO (GPIO_ALT | GPIO_AF0 | GPIO_PORTB | GPIO_PIN3) +#define GPIO_JTMS (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_NJTRST (GPIO_ALT | GPIO_AF0 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_SWCLK (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_SWDIO (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN13) + +/* OPAMP ********************************************************************************************/ + +#define GPIO_OPAMP1_VINM0_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINM0_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP1_VINM1_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINM1_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP1_VINM_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINM_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP1_VINM_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINM_SEC_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP1_VINP_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP1_VINP_2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINP_3 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN7) +#define GPIO_OPAMP1_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP1_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINP_SEC_3 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN7) +#define GPIO_OPAMP1_VOUT (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN2) + +#define GPIO_OPAMP2_VINM0_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_OPAMP2_VINM0_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP2_VINM1_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_OPAMP2_VINM1_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP2_VINM_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_OPAMP2_VINM_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP2_VINM_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_OPAMP2_VINM_SEC_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP2_VINP_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN7) +#define GPIO_OPAMP2_VINP_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) +#define GPIO_OPAMP2_VINP_3 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_OPAMP2_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN7) +#define GPIO_OPAMP2_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) +#define GPIO_OPAMP2_VINP_SEC_3 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_OPAMP2_VOUT (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN6) + +#define GPIO_OPAMP3_VINM0_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN2) +#define GPIO_OPAMP3_VINM0_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP3_VINM1_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN2) +#define GPIO_OPAMP3_VINM1_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP3_VINM_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN2) +#define GPIO_OPAMP3_VINM_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP3_VINM_SEC_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN2) +#define GPIO_OPAMP3_VINM_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP3_VINP_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP3_VINP_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) +#define GPIO_OPAMP3_VINP_3 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP3_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP3_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) +#define GPIO_OPAMP3_VINP_SEC_3 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP3_VOUT (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) + +#define GPIO_OPAMP4_VINM0_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP4_VINM0_2 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN8) +#define GPIO_OPAMP4_VINM1_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP4_VINM1_2 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN8) +#define GPIO_OPAMP4_VINM_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP4_VINM_2 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN8) +#define GPIO_OPAMP4_VINM_SEC_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP4_VINM_SEC_2 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN8) +#define GPIO_OPAMP4_VINP_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN11) +#define GPIO_OPAMP4_VINP_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP4_VINP_3 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN11) +#define GPIO_OPAMP4_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN11) +#define GPIO_OPAMP4_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP4_VINP_SEC_3 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN11) +#define GPIO_OPAMP4_VOUT (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN12) + +#define GPIO_OPAMP5_VINM0_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP5_VINM0_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) +#define GPIO_OPAMP5_VINM1_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP5_VINM1_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) +#define GPIO_OPAMP5_VINM_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP5_VINM_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) +#define GPIO_OPAMP5_VINM_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP5_VINM_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) +#define GPIO_OPAMP5_VINP_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_OPAMP5_VINP_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN3) +#define GPIO_OPAMP5_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_OPAMP5_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN3) +#define GPIO_OPAMP5_VOUT (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN8) + +#define GPIO_OPAMP6_VINM0_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP6_VINM0_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_OPAMP6_VINM1_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP6_VINM1_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_OPAMP6_VINM_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP6_VINM_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_OPAMP6_VINM_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP6_VINM_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_OPAMP6_VINP_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN12) +#define GPIO_OPAMP6_VINP_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP6_VINP_3 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN9) +#define GPIO_OPAMP6_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN12) +#define GPIO_OPAMP6_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP6_VINP_SEC_3 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN9) +#define GPIO_OPAMP6_VOUT (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN11) + +/* QUADSPI ******************************************************************************************/ + +#define GPIO_QUADSPI1_BK1_IO0_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_QUADSPI1_BK1_IO0_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTE | GPIO_PIN12) +#define GPIO_QUADSPI1_BK1_IO1_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN0) +#define GPIO_QUADSPI1_BK1_IO1_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTE | GPIO_PIN13) +#define GPIO_QUADSPI1_BK1_IO2_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTA | GPIO_PIN7) +#define GPIO_QUADSPI1_BK1_IO2_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTE | GPIO_PIN14) +#define GPIO_QUADSPI1_BK1_IO3_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_QUADSPI1_BK1_IO3_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTE | GPIO_PIN15) +#define GPIO_QUADSPI1_BK1_NCS_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTA | GPIO_PIN2) +#define GPIO_QUADSPI1_BK1_NCS_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN11) +#define GPIO_QUADSPI1_BK1_NCS_3 (GPIO_ALT | GPIO_AF10 | GPIO_PORTE | GPIO_PIN11) +#define GPIO_QUADSPI1_BK2_IO0 (GPIO_ALT | GPIO_AF10 | GPIO_PORTC | GPIO_PIN1) +#define GPIO_QUADSPI1_BK2_IO1_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN2) +#define GPIO_QUADSPI1_BK2_IO1_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTC | GPIO_PIN2) +#define GPIO_QUADSPI1_BK2_IO2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTC | GPIO_PIN3) +#define GPIO_QUADSPI1_BK2_IO3 (GPIO_ALT | GPIO_AF10 | GPIO_PORTC | GPIO_PIN4) +#define GPIO_QUADSPI1_CLK_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_QUADSPI1_CLK_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_QUADSPI1_CLK_3 (GPIO_ALT | GPIO_AF10 | GPIO_PORTE | GPIO_PIN10) + +/* RTC **********************************************************************************************/ + +#define GPIO_RTC_OUT2 (GPIO_ALT | GPIO_AF0 | GPIO_PORTB | GPIO_PIN2) +#define GPIO_RTC_REFIN_1 (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN1) +#define GPIO_RTC_REFIN_2 (GPIO_ALT | GPIO_AF0 | GPIO_PORTB | GPIO_PIN15) + +#if 0 + +/* REVISIT: How do you actually enable OUT1, TAMP1, TAMP2, TS? The datasheet + * (DS12288 Rev 2, page 54) shows OUT1, TS, and TAMP1 as "additional + * functions" for PC13 on all STM32G474(C-M-Q-R-V)xxx P/Ns, but the alternate + * function table (on page 72) makes no mention of these. Meanwhile, page 56 + * shows TAMP2 as an "additional function" but the same conundrum applies (for + * now). Granted, these are in the "additional function" column, not the + * "alternate function" column. + */ + +# define GPIO_RTC_OUT1 (GPIO_PORTC | GPIO_PIN13) +# define GPIO_RTC_TS (GPIO_PORTC | GPIO_PIN13) +# define GPIO_RTC_TAMP1 (GPIO_PORTC | GPIO_PIN13) +# define GPIO_RTC_TAMP2 (GPIO_PORTA | GPIO_PIN0) + +#endif + +/* SAI - Serial Audio Interface *********************************************************************/ + +#define GPIO_SAI1_CK1_1 (GPIO_ALT | GPIO_AF3 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_SAI1_CK1_2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_SAI1_CK2 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_SAI1_D1_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_SAI1_D1_2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN3) +#define GPIO_SAI1_D2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTB | GPIO_PIN9) +#define GPIO_SAI1_D3 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN5) +#define GPIO_SAI1_FS_A_1 (GPIO_ALT | GPIO_AF14 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_SAI1_FS_A_2 (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN9) +#define GPIO_SAI1_FS_B_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN4) +#define GPIO_SAI1_FS_B_2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_SAI1_FS_B_3 (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_SAI1_FS_B_4 (GPIO_ALT | GPIO_AF13 | GPIO_PORTE | GPIO_PIN9) +#define GPIO_SAI1_MCLK_A_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_SAI1_MCLK_A_2 (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_SAI1_MCLK_B_1 (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_SAI1_MCLK_B_2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTE | GPIO_PIN10) +#define GPIO_SAI1_SCK_A_1 (GPIO_ALT | GPIO_AF14 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_SAI1_SCK_A_2 (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_SAI1_SCK_B_1 (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN3) +#define GPIO_SAI1_SCK_B_2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTE | GPIO_PIN8) +#define GPIO_SAI1_SD_A_1 (GPIO_ALT | GPIO_AF14 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_SAI1_SD_A_2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTC | GPIO_PIN1) +#define GPIO_SAI1_SD_A_3 (GPIO_ALT | GPIO_AF13 | GPIO_PORTC | GPIO_PIN3) +#define GPIO_SAI1_SD_B_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_SAI1_SD_B_2 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_SAI1_SD_B_3 (GPIO_ALT | GPIO_AF13 | GPIO_PORTE | GPIO_PIN7) + +/* SPI - Serial Peripheral Interface ****************************************************************/ + +#define GPIO_SPI1_MISO_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN6) +#define GPIO_SPI1_MISO_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN4) +#define GPIO_SPI1_MOSI_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN7) +#define GPIO_SPI1_MOSI_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN5) +#define GPIO_SPI1_NSS_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN4) +#define GPIO_SPI1_NSS_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN15) +#define GPIO_SPI1_SCK_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN5) +#define GPIO_SPI1_SCK_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN3) + +#define GPIO_SPI2_MISO_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN10) +#define GPIO_SPI2_MISO_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN14) +#define GPIO_SPI2_MOSI_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN11) +#define GPIO_SPI2_MOSI_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN15) +#define GPIO_SPI2_NSS_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN12) +#define GPIO_SPI2_NSS_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTF | GPIO_PIN0) +#define GPIO_SPI2_SCK_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN13) +#define GPIO_SPI2_SCK_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTF | GPIO_PIN1) + +#define GPIO_SPI3_MISO_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN4) +#define GPIO_SPI3_MISO_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTC | GPIO_PIN11) +#define GPIO_SPI3_MOSI_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN5) +#define GPIO_SPI3_MOSI_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTC | GPIO_PIN12) +#define GPIO_SPI3_NSS_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN4) +#define GPIO_SPI3_NSS_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN15) +#define GPIO_SPI3_SCK_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN3) +#define GPIO_SPI3_SCK_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTC | GPIO_PIN10) + +#define GPIO_SPI4_MISO (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTE | GPIO_PIN13) +#define GPIO_SPI4_MOSI (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTE | GPIO_PIN14) +#define GPIO_SPI4_NSS (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTE | GPIO_PIN11) +#define GPIO_SPI4_SCK (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTE | GPIO_PIN12) + +/* TIM - Timers *************************************************************************************/ + +#define GPIO_TIM1_BKIN2_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM1_BKIN2_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTC | GPIO_PIN3) +#define GPIO_TIM1_BKIN2_3 (GPIO_ALT | GPIO_AF6 | GPIO_PORTE | GPIO_PIN14) +#define GPIO_TIM1_BKIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM1_BKIN_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_TIM1_BKIN_3 (GPIO_ALT | GPIO_AF9 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_TIM1_BKIN_4 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM1_BKIN_5 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_TIM1_BKIN_6 (GPIO_ALT | GPIO_AF6 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_TIM1_BKIN_7 (GPIO_ALT | GPIO_AF2 | GPIO_PORTC | GPIO_PIN13) +#define GPIO_TIM1_BKIN_8 (GPIO_ALT | GPIO_AF2 | GPIO_PORTE | GPIO_PIN15) +#define GPIO_TIM1_CH1IN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN8) +#define GPIO_TIM1_CH1IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN0) +#define GPIO_TIM1_CH1IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN9) +#define GPIO_TIM1_CH1NIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM1_CH1NIN_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM1_CH1NIN_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN13) +#define GPIO_TIM1_CH1NIN_4 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN13) +#define GPIO_TIM1_CH1NIN_5 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN8) +#define GPIO_TIM1_CH1NOUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM1_CH1NOUT_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM1_CH1NOUT_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN13) +#define GPIO_TIM1_CH1NOUT_4 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN13) +#define GPIO_TIM1_CH1NOUT_5 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN8) +#define GPIO_TIM1_CH1OUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN8) +#define GPIO_TIM1_CH1OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN0) +#define GPIO_TIM1_CH1OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN9) +#define GPIO_TIM1_CH2IN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN9) +#define GPIO_TIM1_CH2IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN1) +#define GPIO_TIM1_CH2IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN11) +#define GPIO_TIM1_CH2NIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM1_CH2NIN_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM1_CH2NIN_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN14) +#define GPIO_TIM1_CH2NIN_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN10) +#define GPIO_TIM1_CH2NOUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM1_CH2NOUT_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM1_CH2NOUT_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN14) +#define GPIO_TIM1_CH2NOUT_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN10) +#define GPIO_TIM1_CH2OUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN9) +#define GPIO_TIM1_CH2OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN1) +#define GPIO_TIM1_CH2OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN11) +#define GPIO_TIM1_CH3IN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM1_CH3IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN2) +#define GPIO_TIM1_CH3IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN13) +#define GPIO_TIM1_CH3NIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM1_CH3NIN_2 (GPIO_ALT | GPIO_AF12 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM1_CH3NIN_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN15) +#define GPIO_TIM1_CH3NIN_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN12) +#define GPIO_TIM1_CH3NIN_5 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTF | GPIO_PIN0) +#define GPIO_TIM1_CH3NOUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM1_CH3NOUT_2 (GPIO_ALT | GPIO_AF12 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM1_CH3NOUT_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN15) +#define GPIO_TIM1_CH3NOUT_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN12) +#define GPIO_TIM1_CH3NOUT_5 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTF | GPIO_PIN0) +#define GPIO_TIM1_CH3OUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM1_CH3OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN2) +#define GPIO_TIM1_CH3OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN13) +#define GPIO_TIM1_CH4IN_1 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM1_CH4IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN3) +#define GPIO_TIM1_CH4IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN14) +#define GPIO_TIM1_CH4NIN (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN5) +#define GPIO_TIM1_CH4NIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN5) +#define GPIO_TIM1_CH4NIN_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN15) +#define GPIO_TIM1_CH4NOUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN5) +#define GPIO_TIM1_CH4NOUT_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN15) +#define GPIO_TIM1_CH4OUT_1 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM1_CH4OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN3) +#define GPIO_TIM1_CH4OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN14) +#define GPIO_TIM1_ETR_1 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM1_ETR_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN4) +#define GPIO_TIM1_ETR_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN7) + +#define GPIO_TIM2_CH1IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM2_CH1IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN5) +#define GPIO_TIM2_CH1IN_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN15) +#define GPIO_TIM2_CH1OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM2_CH1OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN5) +#define GPIO_TIM2_CH1OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN15) +#define GPIO_TIM2_CH2IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM2_CH2IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN3) +#define GPIO_TIM2_CH2OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM2_CH2OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN3) +#define GPIO_TIM2_CH3IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM2_CH3IN_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN9) +#define GPIO_TIM2_CH3IN_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN10) +#define GPIO_TIM2_CH3OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM2_CH3OUT_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN9) +#define GPIO_TIM2_CH3OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN10) +#define GPIO_TIM2_CH4IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM2_CH4IN_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM2_CH4IN_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN11) +#define GPIO_TIM2_CH4OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM2_CH4OUT_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM2_CH4OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN11) +#define GPIO_TIM2_ETR_1 (GPIO_ALT | GPIO_AF14 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM2_ETR_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN5) +#define GPIO_TIM2_ETR_3 (GPIO_ALT | GPIO_AF14 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN15) + +#define GPIO_TIM3_CH1IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM3_CH1IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM3_CH1IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN6) +#define GPIO_TIM3_CH1OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM3_CH1OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM3_CH1OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN6) +#define GPIO_TIM3_CH2IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN4) +#define GPIO_TIM3_CH2IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM3_CH2IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM3_CH2IN_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN7) +#define GPIO_TIM3_CH2OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN4) +#define GPIO_TIM3_CH2OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM3_CH2OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM3_CH2OUT_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN7) +#define GPIO_TIM3_CH3IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM3_CH3IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN8) +#define GPIO_TIM3_CH3OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM3_CH3OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN8) +#define GPIO_TIM3_CH4IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM3_CH4IN_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM3_CH4IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN9) +#define GPIO_TIM3_CH4OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM3_CH4OUT_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM3_CH4OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN9) +#define GPIO_TIM3_ETR_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN3) +#define GPIO_TIM3_ETR_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN2) + +#define GPIO_TIM4_CH1IN_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM4_CH1IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM4_CH1OUT_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM4_CH1OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM4_CH2IN_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM4_CH2IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM4_CH2OUT_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM4_CH2OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM4_CH3IN_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN13) +#define GPIO_TIM4_CH3IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM4_CH3OUT_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN13) +#define GPIO_TIM4_CH3OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM4_CH4IN (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM4_CH4OUT (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM4_ETR_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN8) +#define GPIO_TIM4_ETR_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN3) + +#define GPIO_TIM5_CH1IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM5_CH1IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN2) +#define GPIO_TIM5_CH1OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM5_CH1OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN2) +#define GPIO_TIM5_CH2IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM5_CH2IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN12) +#define GPIO_TIM5_CH2OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM5_CH2OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN12) +#define GPIO_TIM5_CH3IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM5_CH3IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN8) +#define GPIO_TIM5_CH3OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM5_CH3OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN8) +#define GPIO_TIM5_CH4IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM5_CH4IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN9) +#define GPIO_TIM5_CH4OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM5_CH4OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN9) +#define GPIO_TIM5_ETR (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN12) +#define GPIO_TIM5_ETR_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN12) +#define GPIO_TIM5_ETR_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN11) + +#define GPIO_TIM8_BKIN2_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM8_BKIN2_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTC | GPIO_PIN9) +#define GPIO_TIM8_BKIN2_3 (GPIO_ALT | GPIO_AF6 | GPIO_PORTD | GPIO_PIN1) +#define GPIO_TIM8_BKIN_1 (GPIO_ALT | GPIO_AF9 | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM8_BKIN_2 (GPIO_ALT | GPIO_AF4 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM8_BKIN_3 (GPIO_ALT | GPIO_AF11 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM8_BKIN_4 (GPIO_ALT | GPIO_AF5 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM8_BKIN_5 (GPIO_ALT | GPIO_AF4 | GPIO_PORTD | GPIO_PIN2) +#define GPIO_TIM8_CH1IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN15) +#define GPIO_TIM8_CH1IN_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM8_CH1IN_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN6) +#define GPIO_TIM8_CH1NIN_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM8_CH1NIN_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN3) +#define GPIO_TIM8_CH1NIN_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN10) +#define GPIO_TIM8_CH1NOUT_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM8_CH1NOUT_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN3) +#define GPIO_TIM8_CH1NOUT_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN10) +#define GPIO_TIM8_CH1OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN15) +#define GPIO_TIM8_CH1OUT_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM8_CH1OUT_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN6) +#define GPIO_TIM8_CH2IN_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN14) +#define GPIO_TIM8_CH2IN_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM8_CH2IN_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN7) +#define GPIO_TIM8_CH2NIN_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM8_CH2NIN_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM8_CH2NIN_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN11) +#define GPIO_TIM8_CH2NOUT_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM8_CH2NOUT_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM8_CH2NOUT_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN11) +#define GPIO_TIM8_CH2OUT_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN14) +#define GPIO_TIM8_CH2OUT_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM8_CH2OUT_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN7) +#define GPIO_TIM8_CH3IN_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM8_CH3IN_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN8) +#define GPIO_TIM8_CH3NIN_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM8_CH3NIN_2 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM8_CH3NIN_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN12) +#define GPIO_TIM8_CH3NOUT_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM8_CH3NOUT_2 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM8_CH3NOUT_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN12) +#define GPIO_TIM8_CH3OUT_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM8_CH3OUT_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN8) +#define GPIO_TIM8_CH4IN_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN9) +#define GPIO_TIM8_CH4IN_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN1) +#define GPIO_TIM8_CH4NIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN13) +#define GPIO_TIM8_CH4NIN_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN0) +#define GPIO_TIM8_CH4NOUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN13) +#define GPIO_TIM8_CH4NOUT_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN0) +#define GPIO_TIM8_CH4OUT_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN9) +#define GPIO_TIM8_CH4OUT_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN1) +#define GPIO_TIM8_ETR_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM8_ETR_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN6) + +#define GPIO_TIM15_BKIN_1 (GPIO_ALT | GPIO_AF9 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_TIM15_BKIN_2 (GPIO_ALT | GPIO_AF2 | GPIO_PORTC | GPIO_PIN5) +#define GPIO_TIM15_CH1IN_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM15_CH1IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN14) +#define GPIO_TIM15_CH1NIN_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM15_CH1NIN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN15) +#define GPIO_TIM15_CH1NOUT_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM15_CH1NOUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN15) +#define GPIO_TIM15_CH1OUT_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM15_CH1OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN14) +#define GPIO_TIM15_CH2IN_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM15_CH2IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN15) +#define GPIO_TIM15_CH2OUT_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM15_CH2OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN15) + +#define GPIO_TIM16_BKIN (GPIO_ALT | GPIO_AF1 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM16_CH1IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM16_CH1IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM16_CH1IN_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM16_CH1IN_4 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM16_CH1NIN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN13) +#define GPIO_TIM16_CH1NIN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM16_CH1NOUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN13) +#define GPIO_TIM16_CH1NOUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM16_CH1OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM16_CH1OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM16_CH1OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM16_CH1OUT_4 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN8) + +#define GPIO_TIM17_BKIN_1 (GPIO_ALT | GPIO_AF1 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM17_BKIN_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM17_CH1IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM17_CH1IN_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM17_CH1IN_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM17_CH1NIN (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM17_CH1NOUT (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM17_CH1OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM17_CH1OUT_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM17_CH1OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN9) + +#define GPIO_TIM20_CH1IN (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN2) +#define GPIO_TIM20_CH1OUT (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN2) +#define GPIO_TIM20_CH2IN (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN2) +#define GPIO_TIM20_CH2OUT (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN2) +#define GPIO_TIM20_CH3IN (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN8) +#define GPIO_TIM20_CH3OUT (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN8) + +/* UARTs/USARTs *************************************************************************************/ + +#define GPIO_USART1_CK (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_USART1_CTS (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_USART1_DE (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_USART1_NSS (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_USART1_RTS (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_USART1_RX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_USART1_RX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_USART1_RX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN5) +#define GPIO_USART1_TX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_USART1_TX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_USART1_TX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN4) + +#define GPIO_USART2_CK_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN4) +#define GPIO_USART2_CK_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_USART2_CTS (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN0) +#define GPIO_USART2_DE (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN1) +#define GPIO_USART2_NSS (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN0) +#define GPIO_USART2_RTS (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN1) +#define GPIO_USART2_RX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_USART2_RX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_USART2_RX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_USART2_TX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN2) +#define GPIO_USART2_TX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_USART2_TX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN3) + +#define GPIO_USART3_CK_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_USART3_CK_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN12) +#define GPIO_USART3_CK_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN10) +#define GPIO_USART3_CTS_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_USART3_CTS_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_USART3_CTS_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN11) +#define GPIO_USART3_DE (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN14) +#define GPIO_USART3_NSS_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_USART3_NSS_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_USART3_NSS_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN11) +#define GPIO_USART3_RTS (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN14) +#define GPIO_USART3_RX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_USART3_RX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN11) +#define GPIO_USART3_RX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN11) +#define GPIO_USART3_RX_4 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN9) +#define GPIO_USART3_RX_5 (GPIO_ALT | GPIO_AF7 | GPIO_PORTE | GPIO_PIN15) +#define GPIO_USART3_TX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN9) +#define GPIO_USART3_TX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_USART3_TX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN10) +#define GPIO_USART3_TX_4 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN8) + +#define GPIO_UART4_CTS (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_UART4_DE (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_UART4_RTS (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_UART4_RX (GPIO_ALT | GPIO_AF5 | GPIO_PORTC | GPIO_PIN11) +#define GPIO_UART4_TX (GPIO_ALT | GPIO_AF5 | GPIO_PORTC | GPIO_PIN10) + +#define GPIO_UART5_CTS (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_UART5_DE (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_UART5_RTS (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_UART5_RX (GPIO_ALT | GPIO_AF5 | GPIO_PORTD | GPIO_PIN2) +#define GPIO_UART5_TX (GPIO_ALT | GPIO_AF5 | GPIO_PORTC | GPIO_PIN12) + +/* USB Device Full Speed ****************************************************************************/ + +#endif /* __ARCH_ARM_SRC_STM32_HARDWARE_STM32G474MXX_PINMAP_H */ diff --git a/arch/arm/src/stm32/hardware/stm32g474qxx_pinmap.h b/arch/arm/src/stm32/hardware/stm32g474qxx_pinmap.h new file mode 100644 index 0000000000..aa6e09f7b4 --- /dev/null +++ b/arch/arm/src/stm32/hardware/stm32g474qxx_pinmap.h @@ -0,0 +1,1231 @@ +/**************************************************************************************************** + * arch/arm/src/stm32/hardware/stm32g474qxx_pinmap.h + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************************************/ + +#ifndef __ARCH_ARM_SRC_STM32_HARDWARE_STM32G474QXX_PINMAP_H +#define __ARCH_ARM_SRC_STM32_HARDWARE_STM32G474QXX_PINMAP_H + +/**************************************************************************************************** + * Pre-processor Definitions + ****************************************************************************************************/ + +/* Alternate Pin Functions. All members of the STM32G47xxx family share the + * same pin multiplexing (although they differ in the pins physically + * available). + * + * Alternative pin selections are provided with a numeric suffix like _1, _2, + * etc. Drivers, however, will use the pin selection without the numeric + * suffix. Additional definitions are required in the board.h file. For + * example, if CAN1_RX connects via PA11 on some board, then the following + * definitions should appear in the board.h header file for that board: + * + * #define GPIO_CAN1_RX GPIO_CAN1_RX_1 + * + * The driver will then automatically configure PA11 as the CAN1 RX pin. + */ + +/* WARNING!!! WARNING!!! WARNING!!! WARNING!!! WARNING!!! WARNING!!! WARNING!!! + * Additional effort is required to select specific GPIO options such as + * frequency, open-drain/push-pull, and pull-up/down! Just the basics are + * defined for most pins in this file. + */ + +/* ADC - Analog Digital Converter *******************************************************************/ + +#define GPIO_ADC1_IN1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN0) +#define GPIO_ADC1_IN2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_ADC1_IN3 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN2) +#define GPIO_ADC1_IN4 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_ADC1_IN5 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_ADC1_IN6 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN0) +#define GPIO_ADC1_IN7 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN1) +#define GPIO_ADC1_IN8 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN2) +#define GPIO_ADC1_IN9 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN3) +#define GPIO_ADC1_IN10 (GPIO_ANALOG | GPIO_PORTF | GPIO_PIN0) +#define GPIO_ADC1_IN11 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN12) +#define GPIO_ADC1_IN12 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_ADC1_IN14 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN11) +#define GPIO_ADC1_IN15 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) + +#define GPIO_ADC2_IN1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN0) +#define GPIO_ADC2_IN2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_ADC2_IN3 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN6) +#define GPIO_ADC2_IN4 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN7) +#define GPIO_ADC2_IN5 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN4) +#define GPIO_ADC2_IN6 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN0) +#define GPIO_ADC2_IN7 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN1) +#define GPIO_ADC2_IN8 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN2) +#define GPIO_ADC2_IN9 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN3) +#define GPIO_ADC2_IN10 (GPIO_ANALOG | GPIO_PORTF | GPIO_PIN1) +#define GPIO_ADC2_IN11 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_ADC2_IN12 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN2) +#define GPIO_ADC2_IN13 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_ADC2_IN14 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN11) +#define GPIO_ADC2_IN15 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) +#define GPIO_ADC2_IN17 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN4) + +#define GPIO_ADC3_IN1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_ADC3_IN2 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN9) +#define GPIO_ADC3_IN3 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN13) +#define GPIO_ADC3_IN4 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN7) +#define GPIO_ADC3_IN5 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_ADC3_IN6 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN8) +#define GPIO_ADC3_IN7 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN10) +#define GPIO_ADC3_IN8 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN11) +#define GPIO_ADC3_IN9 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN12) +#define GPIO_ADC3_IN10 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN13) +#define GPIO_ADC3_IN11 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN14) +#define GPIO_ADC3_IN12 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) +#define GPIO_ADC3_IN14 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN10) +#define GPIO_ADC3_IN15 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN11) +#define GPIO_ADC3_IN16 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN12) + +#define GPIO_ADC4_IN1 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN14) +#define GPIO_ADC4_IN2 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN15) +#define GPIO_ADC4_IN3 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN12) +#define GPIO_ADC4_IN4 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_ADC4_IN5 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) +#define GPIO_ADC4_IN6 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN8) +#define GPIO_ADC4_IN7 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN10) +#define GPIO_ADC4_IN8 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN11) +#define GPIO_ADC4_IN9 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN12) +#define GPIO_ADC4_IN10 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN13) +#define GPIO_ADC4_IN11 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN14) +#define GPIO_ADC4_IN12 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN8) +#define GPIO_ADC4_IN13 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN9) +#define GPIO_ADC4_IN14 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN10) +#define GPIO_ADC4_IN15 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN11) +#define GPIO_ADC4_IN16 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN12) + +#define GPIO_ADC5_IN1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN8) +#define GPIO_ADC5_IN2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN9) +#define GPIO_ADC5_IN6 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN8) +#define GPIO_ADC5_IN7 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN10) +#define GPIO_ADC5_IN8 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN11) +#define GPIO_ADC5_IN9 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN12) +#define GPIO_ADC5_IN10 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN13) +#define GPIO_ADC5_IN11 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN14) +#define GPIO_ADC5_IN12 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN8) +#define GPIO_ADC5_IN13 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN9) +#define GPIO_ADC5_IN14 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN10) +#define GPIO_ADC5_IN15 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN11) +#define GPIO_ADC5_IN16 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN12) + +/* COMP - Comparator ********************************************************************************/ + +#define GPIO_COMP1_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN0) +#define GPIO_COMP1_OUT_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_COMP1_OUT_3 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_COMP1_OUT_4 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_COMP1_OUT_5 (GPIO_ALT | GPIO_AF2 | GPIO_PORTF | GPIO_PIN4) + +#define GPIO_COMP2_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN2) +#define GPIO_COMP2_OUT_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN7) +#define GPIO_COMP2_OUT_3 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_COMP2_OUT_4 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN9) + +#define GPIO_COMP3_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_COMP3_OUT_2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTB | GPIO_PIN15) +#define GPIO_COMP3_OUT_3 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN2) + +#define GPIO_COMP4_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_COMP4_OUT_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_COMP4_OUT_3 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN14) + +#define GPIO_COMP5_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_COMP5_OUT_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN7) + +#define GPIO_COMP6_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_COMP6_OUT_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN6) + +#define GPIO_COMP7_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_COMP7_OUT_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN8) + +/* CRS **********************************************************************************************/ + +/* REVISIT: Clock Recovery System (CRS_SYNC signal exposed to pin(s)?) + * Before using the following defines, make sure they are correct! + */ + +#if 0 +# define GPIO_USB_CRS_SYNC (GPIO_ALT | GPIO_AF3 | GPIO_PORTA | GPIO_PIN10) +# define GPIO_UCPD1_CRS_SYNC (GPIO_ALT | GPIO_AF3 | GPIO_PORTB | GPIO_PIN3) +#endif + +/* DAC **********************************************************************************************/ + +#define GPIO_DAC1_OUT1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN4) +#define GPIO_DAC1_OUT2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_DAC2_OUT1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN6) + +/* Clocks outputs ***********************************************************************************/ + +/* MCU clock output */ + +#define GPIO_MCO_1 (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_MCO_2 (GPIO_ALT | GPIO_AF0 | GPIO_PORTG | GPIO_PIN10) + +/* Event outputs ************************************************************************************/ + +#define GPIO_PA0_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN0) +#define GPIO_PA1_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN1) +#define GPIO_PA2_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN2) +#define GPIO_PA3_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_PA4_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN4) +#define GPIO_PA5_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN5) +#define GPIO_PA6_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_PA7_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN7) +#define GPIO_PA8_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_PA9_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_PA10_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_PA11_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_PA12_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_PA13_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_PA14_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_PA15_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN15) + +#define GPIO_PB0_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN0) +#define GPIO_PB1_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_PB2_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN2) +#define GPIO_PB3_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN3) +#define GPIO_PB4_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_PB5_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_PB6_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_PB7_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_PB8_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_PB9_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN9) +#define GPIO_PB10_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_PB11_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN11) +#define GPIO_PB12_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_PB13_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_PB14_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN14) +#define GPIO_PB15_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN15) + +#define GPIO_PC0_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN0) +#define GPIO_PC1_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN1) +#define GPIO_PC2_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN2) +#define GPIO_PC3_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN3) +#define GPIO_PC4_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN4) +#define GPIO_PC5_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN5) +#define GPIO_PC6_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN6) +#define GPIO_PC7_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN7) +#define GPIO_PC8_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN8) +#define GPIO_PC9_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN9) +#define GPIO_PC10_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN10) +#define GPIO_PC11_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN11) +#define GPIO_PC12_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN12) +#define GPIO_PC13_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN13) +#define GPIO_PC14_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN14) +#define GPIO_PC15_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN15) + +#define GPIO_PD0_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN0) +#define GPIO_PD1_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN1) +#define GPIO_PD2_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN2) +#define GPIO_PD3_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN3) +#define GPIO_PD4_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN4) +#define GPIO_PD5_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN5) +#define GPIO_PD6_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN6) +#define GPIO_PD7_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN7) +#define GPIO_PD8_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN8) +#define GPIO_PD9_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN9) +#define GPIO_PD10_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN10) +#define GPIO_PD11_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN11) +#define GPIO_PD12_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN12) +#define GPIO_PD13_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN13) +#define GPIO_PD14_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN14) +#define GPIO_PD15_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN15) + +#define GPIO_PE0_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN0) +#define GPIO_PE1_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN1) +#define GPIO_PE2_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN2) +#define GPIO_PE3_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN3) +#define GPIO_PE4_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN4) +#define GPIO_PE5_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN5) +#define GPIO_PE6_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN6) +#define GPIO_PE7_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN7) +#define GPIO_PE8_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN8) +#define GPIO_PE9_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN9) +#define GPIO_PE10_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN10) +#define GPIO_PE11_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN11) +#define GPIO_PE12_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN12) +#define GPIO_PE13_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN13) +#define GPIO_PE14_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN14) +#define GPIO_PE15_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN15) + +#define GPIO_PF0_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTF | GPIO_PIN0) +#define GPIO_PF1_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTF | GPIO_PIN1) +#define GPIO_PF2_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTF | GPIO_PIN2) +#define GPIO_PF3_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTF | GPIO_PIN3) +#define GPIO_PF4_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTF | GPIO_PIN4) +#define GPIO_PF5_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTF | GPIO_PIN5) +#define GPIO_PF6_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTF | GPIO_PIN6) +#define GPIO_PF7_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTF | GPIO_PIN7) +#define GPIO_PF8_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTF | GPIO_PIN8) +#define GPIO_PF9_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTF | GPIO_PIN9) +#define GPIO_PF10_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTF | GPIO_PIN10) +#define GPIO_PF11_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTF | GPIO_PIN11) +#define GPIO_PF12_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTF | GPIO_PIN12) +#define GPIO_PF13_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTF | GPIO_PIN13) +#define GPIO_PF14_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTF | GPIO_PIN14) +#define GPIO_PF15_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTF | GPIO_PIN15) + +#define GPIO_PG0_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTG | GPIO_PIN0) +#define GPIO_PG1_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTG | GPIO_PIN1) +#define GPIO_PG2_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTG | GPIO_PIN2) +#define GPIO_PG3_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTG | GPIO_PIN3) +#define GPIO_PG4_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTG | GPIO_PIN4) +#define GPIO_PG5_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTG | GPIO_PIN5) +#define GPIO_PG6_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTG | GPIO_PIN6) +#define GPIO_PG7_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTG | GPIO_PIN7) +#define GPIO_PG8_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTG | GPIO_PIN8) +#define GPIO_PG9_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTG | GPIO_PIN9) +#define GPIO_PG10_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTG | GPIO_PIN10) + +/* FDCAN ********************************************************************************************/ + +#define GPIO_FDCAN1_RX_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN11) +#define GPIO_FDCAN1_RX_2 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN8) +#define GPIO_FDCAN1_RX_3 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN0) +#define GPIO_FDCAN1_TX_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN12) +#define GPIO_FDCAN1_TX_2 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN9) +#define GPIO_FDCAN1_TX_3 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN1) + +#define GPIO_FDCAN2_RX_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN5) +#define GPIO_FDCAN2_RX_2 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN12) +#define GPIO_FDCAN2_TX_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN6) +#define GPIO_FDCAN2_TX_2 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN13) + +#define GPIO_FDCAN3_RX_1 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN8) +#define GPIO_FDCAN3_RX_2 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN3) +#define GPIO_FDCAN3_TX_1 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN15) +#define GPIO_FDCAN3_TX_2 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN4) + +/* FMC/FSMC - Flexible Static Memory Controller *****************************************************/ + +#define GPIO_FMC_A0 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTF | GPIO_PIN10) +#define GPIO_FMC_A1 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTF | GPIO_PIN7) +#define GPIO_FMC_A2 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTF | GPIO_PIN2) +#define GPIO_FMC_A3 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTF | GPIO_PIN3) +#define GPIO_FMC_A4 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTF | GPIO_PIN4) +#define GPIO_FMC_A5 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTF | GPIO_PIN5) +#define GPIO_FMC_A6 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTF | GPIO_PIN12) +#define GPIO_FMC_A7 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTF | GPIO_PIN13) +#define GPIO_FMC_A8 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTF | GPIO_PIN14) +#define GPIO_FMC_A9 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTF | GPIO_PIN15) +#define GPIO_FMC_A10 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTG | GPIO_PIN0) +#define GPIO_FMC_A11 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTG | GPIO_PIN1) +#define GPIO_FMC_A12 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTG | GPIO_PIN2) +#define GPIO_FMC_A13 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTG | GPIO_PIN3) +#define GPIO_FMC_A14 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTG | GPIO_PIN4) +#define GPIO_FMC_A15 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTG | GPIO_PIN5) +#define GPIO_FMC_A16 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN11) +#define GPIO_FMC_A17 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN12) +#define GPIO_FMC_A18 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN13) +#define GPIO_FMC_A19 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN3) +#define GPIO_FMC_A20 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN4) +#define GPIO_FMC_A21 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN5) +#define GPIO_FMC_A22 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN6) +#define GPIO_FMC_A23 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN2) +#define GPIO_FMC_A24 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTF | GPIO_PIN8) +#define GPIO_FMC_A25 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTF | GPIO_PIN9) +#define GPIO_FMC_CLK (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN3) +#define GPIO_FMC_D0 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN14) +#define GPIO_FMC_D1 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN15) +#define GPIO_FMC_D2 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN0) +#define GPIO_FMC_D3 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN1) +#define GPIO_FMC_D4 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN7) +#define GPIO_FMC_D5 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN8) +#define GPIO_FMC_D6 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN9) +#define GPIO_FMC_D7 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN10) +#define GPIO_FMC_D8 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN11) +#define GPIO_FMC_D9 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN12) +#define GPIO_FMC_D10 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN13) +#define GPIO_FMC_D11 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN14) +#define GPIO_FMC_D12 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN15) +#define GPIO_FMC_D13 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN8) +#define GPIO_FMC_D14 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN9) +#define GPIO_FMC_D15 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN10) +#define GPIO_FMC_DA0 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN14) +#define GPIO_FMC_DA1 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN15) +#define GPIO_FMC_DA2 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN0) +#define GPIO_FMC_DA3 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN1) +#define GPIO_FMC_DA4 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN7) +#define GPIO_FMC_DA5 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN8) +#define GPIO_FMC_DA6 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN9) +#define GPIO_FMC_DA7 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN10) +#define GPIO_FMC_DA8 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN11) +#define GPIO_FMC_DA9 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN12) +#define GPIO_FMC_DA10 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN13) +#define GPIO_FMC_DA11 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN14) +#define GPIO_FMC_DA12 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN15) +#define GPIO_FMC_DA13 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN8) +#define GPIO_FMC_DA14 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN9) +#define GPIO_FMC_DA15 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN10) +#define GPIO_FMC_INT_1 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_PORTG | GPIO_PIN6) +#define GPIO_FMC_INT_2 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_PORTG | GPIO_PIN7) +#define GPIO_FMC_NBL0 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN0) +#define GPIO_FMC_NBL1 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN1) +#define GPIO_FMC_NCE_1 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN7) +#define GPIO_FMC_NCE_2 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTG | GPIO_PIN9) +#define GPIO_FMC_NE1 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN7) +#define GPIO_FMC_NE2 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTG | GPIO_PIN9) +#define GPIO_FMC_NE3 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTG | GPIO_PIN8) +#define GPIO_FMC_NE4 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTF | GPIO_PIN11) +#define GPIO_FMC_NL (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTB | GPIO_PIN7) +#define GPIO_FMC_NOE (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN4) +#define GPIO_FMC_NWAIT (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN6) +#define GPIO_FMC_NWE (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN5) + +/* HRTIM - High-Resolution Timer ********************************************************************/ + +#define GPIO_HRTIM1_CHA1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_HRTIM1_CHA2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_HRTIM1_CHB1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_HRTIM1_CHB2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_HRTIM1_CHC1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_HRTIM1_CHC2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_HRTIM1_CHD1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN14) +#define GPIO_HRTIM1_CHD2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN15) +#define GPIO_HRTIM1_CHE1 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN8) +#define GPIO_HRTIM1_CHE2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN9) +#define GPIO_HRTIM1_CHF1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTC | GPIO_PIN6) +#define GPIO_HRTIM1_CHF2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTC | GPIO_PIN7) +#define GPIO_HRTIM1_EEV1 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN12) +#define GPIO_HRTIM1_EEV10_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTC | GPIO_PIN5) +#define GPIO_HRTIM1_EEV10_2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN6) +#define GPIO_HRTIM1_EEV2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN11) +#define GPIO_HRTIM1_EEV3 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_HRTIM1_EEV4 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_HRTIM1_EEV5 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN9) +#define GPIO_HRTIM1_EEV6 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_HRTIM1_EEV7 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_HRTIM1_EEV8 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_HRTIM1_EEV9 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN3) +#define GPIO_HRTIM1_FLT1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_HRTIM1_FLT2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_HRTIM1_FLT3 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_HRTIM1_FLT4 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN11) +#define GPIO_HRTIM1_FLT5_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN0) +#define GPIO_HRTIM1_FLT5_2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN7) +#define GPIO_HRTIM1_FLT6 (GPIO_ALT | GPIO_AF13 | GPIO_PORTC | GPIO_PIN10) +#define GPIO_HRTIM1_SCIN_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN2) +#define GPIO_HRTIM1_SCIN_2 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_HRTIM1_SCOUT_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_HRTIM1_SCOUT_2 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN3) + +/* I2C **********************************************************************************************/ + +#define GPIO_I2C1_SCL_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN13) +#define GPIO_I2C1_SCL_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN15) +#define GPIO_I2C1_SCL_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTB | GPIO_PIN8) +#define GPIO_I2C1_SDA_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN14) +#define GPIO_I2C1_SDA_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTB | GPIO_PIN7) +#define GPIO_I2C1_SDA_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTB | GPIO_PIN9) +#define GPIO_I2C1_SMBA (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN5) + +#define GPIO_I2C2_SCL_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN9) +#define GPIO_I2C2_SCL_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTC | GPIO_PIN4) +#define GPIO_I2C2_SCL_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTF | GPIO_PIN6) +#define GPIO_I2C2_SDA_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN8) +#define GPIO_I2C2_SDA_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTF | GPIO_PIN0) +#define GPIO_I2C2_SMBA_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN10) +#define GPIO_I2C2_SMBA_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN12) +#define GPIO_I2C2_SMBA_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTF | GPIO_PIN2) + +#define GPIO_I2C3_SCL_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN8) +#define GPIO_I2C3_SCL_2 (GPIO_ALT | GPIO_AF8 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTC | GPIO_PIN8) +#define GPIO_I2C3_SCL_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTF | GPIO_PIN3) +#define GPIO_I2C3_SCL_4 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTG | GPIO_PIN7) +#define GPIO_I2C3_SDA_1 (GPIO_ALT | GPIO_AF8 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTB | GPIO_PIN5) +#define GPIO_I2C3_SDA_2 (GPIO_ALT | GPIO_AF8 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTC | GPIO_PIN9) +#define GPIO_I2C3_SDA_3 (GPIO_ALT | GPIO_AF8 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTC | GPIO_PIN11) +#define GPIO_I2C3_SDA_4 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTF | GPIO_PIN4) +#define GPIO_I2C3_SDA_5 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTG | GPIO_PIN8) +#define GPIO_I2C3_SMBA_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN9) +#define GPIO_I2C3_SMBA_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN2) +#define GPIO_I2C3_SMBA_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTG | GPIO_PIN6) + +#define GPIO_I2C4_SCL_1 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN13) +#define GPIO_I2C4_SCL_2 (GPIO_ALT | GPIO_AF8 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTC | GPIO_PIN6) +#define GPIO_I2C4_SCL_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTF | GPIO_PIN14) +#define GPIO_I2C4_SCL_4 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTG | GPIO_PIN3) +#define GPIO_I2C4_SDA_1 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTB | GPIO_PIN7) +#define GPIO_I2C4_SDA_2 (GPIO_ALT | GPIO_AF8 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTC | GPIO_PIN7) +#define GPIO_I2C4_SDA_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTF | GPIO_PIN15) +#define GPIO_I2C4_SDA_4 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTG | GPIO_PIN4) +#define GPIO_I2C4_SMBA_1 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN14) +#define GPIO_I2C4_SMBA_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN11) +#define GPIO_I2C4_SMBA_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTF | GPIO_PIN13) + +/* I2S **********************************************************************************************/ + +#define GPIO_I2S_CKIN_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_I2S_CKIN_2 (GPIO_ALT | GPIO_AF5 | GPIO_PORTC | GPIO_PIN9) + +#define GPIO_I2S2_CK_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_I2S2_CK_2 (GPIO_ALT | GPIO_AF5 | GPIO_PORTF | GPIO_PIN1) +#define GPIO_I2S2_MCK_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_I2S2_MCK_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTC | GPIO_PIN6) +#define GPIO_I2S2_SD_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_I2S2_SD_2 (GPIO_ALT | GPIO_AF5 | GPIO_PORTB | GPIO_PIN15) +#define GPIO_I2S2_WS_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_I2S2_WS_2 (GPIO_ALT | GPIO_AF5 | GPIO_PORTF | GPIO_PIN0) + +#define GPIO_I2S3_CK_1 (GPIO_ALT | GPIO_AF6 | GPIO_PORTB | GPIO_PIN3) +#define GPIO_I2S3_CK_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTC | GPIO_PIN10) +#define GPIO_I2S3_MCK_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_I2S3_MCK_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTC | GPIO_PIN7) +#define GPIO_I2S3_SD_1 (GPIO_ALT | GPIO_AF6 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_I2S3_SD_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTC | GPIO_PIN12) +#define GPIO_I2S3_WS_1 (GPIO_ALT | GPIO_AF6 | GPIO_PORTA | GPIO_PIN4) +#define GPIO_I2S3_WS_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTA | GPIO_PIN15) + +/* IR - Infrared with TIM16 channel 1 and TIM17 channel 1 *******************************************/ + +#define GPIO_IR_OUT_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_IR_OUT_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTB | GPIO_PIN9) + +/* LPTIM - Low Power Timer **************************************************************************/ + +#define GPIO_LPTIM1_ETR_1 (GPIO_ALT | GPIO_AF11 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_LPTIM1_ETR_2 (GPIO_ALT | GPIO_AF1 | GPIO_PORTC | GPIO_PIN3) +#define GPIO_LPTIM1_IN1_1 (GPIO_ALT | GPIO_AF11 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_LPTIM1_IN1_2 (GPIO_ALT | GPIO_AF1 | GPIO_PORTC | GPIO_PIN0) +#define GPIO_LPTIM1_IN2_1 (GPIO_ALT | GPIO_AF11 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_LPTIM1_IN2_2 (GPIO_ALT | GPIO_AF1 | GPIO_PORTC | GPIO_PIN2) +#define GPIO_LPTIM1_OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_LPTIM1_OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_PORTB | GPIO_PIN2) +#define GPIO_LPTIM1_OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_PORTC | GPIO_PIN1) + +/* LPUART - Low-Power Universal Asynchronous Receiver Transmitter ***********************************/ + +#define GPIO_LPUART1_CTS_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_LPUART1_CTS_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_LPUART1_CTS_3 (GPIO_ALT | GPIO_AF8 | GPIO_PORTG | GPIO_PIN5) +#define GPIO_LPUART1_DE_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_LPUART1_DE_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_LPUART1_DE_3 (GPIO_ALT | GPIO_AF8 | GPIO_PORTG | GPIO_PIN6) +#define GPIO_LPUART1_RTS_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_LPUART1_RTS_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_LPUART1_RTS_3 (GPIO_ALT | GPIO_AF8 | GPIO_PORTG | GPIO_PIN6) +#define GPIO_LPUART1_RX_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_LPUART1_RX_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_LPUART1_RX_3 (GPIO_ALT | GPIO_AF8 | GPIO_PORTC | GPIO_PIN0) +#define GPIO_LPUART1_RX_4 (GPIO_ALT | GPIO_AF8 | GPIO_PORTG | GPIO_PIN8) +#define GPIO_LPUART1_TX_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN2) +#define GPIO_LPUART1_TX_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN11) +#define GPIO_LPUART1_TX_3 (GPIO_ALT | GPIO_AF8 | GPIO_PORTC | GPIO_PIN1) +#define GPIO_LPUART1_TX_4 (GPIO_ALT | GPIO_AF8 | GPIO_PORTG | GPIO_PIN7) + +/* JTAG *********************************************************************************************/ + +#define GPIO_JTCK (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_JTDI (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_JTDO (GPIO_ALT | GPIO_AF0 | GPIO_PORTB | GPIO_PIN3) +#define GPIO_JTMS (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_NJTRST (GPIO_ALT | GPIO_AF0 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_SWCLK (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_SWDIO (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN13) + +/* OPAMP ********************************************************************************************/ + +#define GPIO_OPAMP1_VINM0_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINM0_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP1_VINM1_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINM1_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP1_VINM_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINM_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP1_VINM_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINM_SEC_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP1_VINP_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP1_VINP_2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINP_3 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN7) +#define GPIO_OPAMP1_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP1_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINP_SEC_3 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN7) +#define GPIO_OPAMP1_VOUT (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN2) + +#define GPIO_OPAMP2_VINM0_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_OPAMP2_VINM0_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP2_VINM1_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_OPAMP2_VINM1_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP2_VINM_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_OPAMP2_VINM_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP2_VINM_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_OPAMP2_VINM_SEC_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP2_VINP_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN7) +#define GPIO_OPAMP2_VINP_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) +#define GPIO_OPAMP2_VINP_3 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_OPAMP2_VINP_4 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN14) +#define GPIO_OPAMP2_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN7) +#define GPIO_OPAMP2_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) +#define GPIO_OPAMP2_VINP_SEC_3 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_OPAMP2_VINP_SEC_4 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN14) +#define GPIO_OPAMP2_VOUT (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN6) + +#define GPIO_OPAMP3_VINM0_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN2) +#define GPIO_OPAMP3_VINM0_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP3_VINM1_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN2) +#define GPIO_OPAMP3_VINM1_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP3_VINM_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN2) +#define GPIO_OPAMP3_VINM_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP3_VINM_SEC_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN2) +#define GPIO_OPAMP3_VINM_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP3_VINP_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP3_VINP_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) +#define GPIO_OPAMP3_VINP_3 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP3_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP3_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) +#define GPIO_OPAMP3_VINP_SEC_3 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP3_VOUT (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) + +#define GPIO_OPAMP4_VINM0_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP4_VINM0_2 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN8) +#define GPIO_OPAMP4_VINM1_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP4_VINM1_2 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN8) +#define GPIO_OPAMP4_VINM_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP4_VINM_2 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN8) +#define GPIO_OPAMP4_VINM_SEC_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP4_VINM_SEC_2 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN8) +#define GPIO_OPAMP4_VINP_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN11) +#define GPIO_OPAMP4_VINP_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP4_VINP_3 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN11) +#define GPIO_OPAMP4_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN11) +#define GPIO_OPAMP4_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP4_VINP_SEC_3 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN11) +#define GPIO_OPAMP4_VOUT (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN12) + +#define GPIO_OPAMP5_VINM0_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP5_VINM0_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) +#define GPIO_OPAMP5_VINM1_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP5_VINM1_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) +#define GPIO_OPAMP5_VINM_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP5_VINM_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) +#define GPIO_OPAMP5_VINM_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP5_VINM_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) +#define GPIO_OPAMP5_VINP_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_OPAMP5_VINP_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN3) +#define GPIO_OPAMP5_VINP_3 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN12) +#define GPIO_OPAMP5_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_OPAMP5_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN3) +#define GPIO_OPAMP5_VINP_SEC_3 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN12) +#define GPIO_OPAMP5_VOUT (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN8) + +#define GPIO_OPAMP6_VINM0_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP6_VINM0_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_OPAMP6_VINM1_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP6_VINM1_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_OPAMP6_VINM_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP6_VINM_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_OPAMP6_VINM_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP6_VINM_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_OPAMP6_VINP_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN12) +#define GPIO_OPAMP6_VINP_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP6_VINP_3 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN9) +#define GPIO_OPAMP6_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN12) +#define GPIO_OPAMP6_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP6_VINP_SEC_3 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN9) +#define GPIO_OPAMP6_VOUT (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN11) + +/* QUADSPI ******************************************************************************************/ + +#define GPIO_QUADSPI1_BK1_IO0_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_QUADSPI1_BK1_IO0_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTE | GPIO_PIN12) +#define GPIO_QUADSPI1_BK1_IO0_3 (GPIO_ALT | GPIO_AF10 | GPIO_PORTF | GPIO_PIN8) +#define GPIO_QUADSPI1_BK1_IO1_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN0) +#define GPIO_QUADSPI1_BK1_IO1_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTE | GPIO_PIN13) +#define GPIO_QUADSPI1_BK1_IO1_3 (GPIO_ALT | GPIO_AF10 | GPIO_PORTF | GPIO_PIN9) +#define GPIO_QUADSPI1_BK1_IO2_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTA | GPIO_PIN7) +#define GPIO_QUADSPI1_BK1_IO2_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTE | GPIO_PIN14) +#define GPIO_QUADSPI1_BK1_IO2_3 (GPIO_ALT | GPIO_AF10 | GPIO_PORTF | GPIO_PIN7) +#define GPIO_QUADSPI1_BK1_IO3_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_QUADSPI1_BK1_IO3_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTE | GPIO_PIN15) +#define GPIO_QUADSPI1_BK1_IO3_3 (GPIO_ALT | GPIO_AF10 | GPIO_PORTF | GPIO_PIN6) +#define GPIO_QUADSPI1_BK1_NCS_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTA | GPIO_PIN2) +#define GPIO_QUADSPI1_BK1_NCS_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN11) +#define GPIO_QUADSPI1_BK1_NCS_3 (GPIO_ALT | GPIO_AF10 | GPIO_PORTE | GPIO_PIN11) +#define GPIO_QUADSPI1_BK2_IO0_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTC | GPIO_PIN1) +#define GPIO_QUADSPI1_BK2_IO0_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTD | GPIO_PIN4) +#define GPIO_QUADSPI1_BK2_IO1_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN2) +#define GPIO_QUADSPI1_BK2_IO1_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTC | GPIO_PIN2) +#define GPIO_QUADSPI1_BK2_IO1_3 (GPIO_ALT | GPIO_AF10 | GPIO_PORTD | GPIO_PIN5) +#define GPIO_QUADSPI1_BK2_IO2_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTC | GPIO_PIN3) +#define GPIO_QUADSPI1_BK2_IO2_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTD | GPIO_PIN6) +#define GPIO_QUADSPI1_BK2_IO3_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTC | GPIO_PIN4) +#define GPIO_QUADSPI1_BK2_IO3_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTD | GPIO_PIN7) +#define GPIO_QUADSPI1_BK2_NCS (GPIO_ALT | GPIO_AF10 | GPIO_PORTD | GPIO_PIN3) +#define GPIO_QUADSPI1_CLK_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_QUADSPI1_CLK_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_QUADSPI1_CLK_3 (GPIO_ALT | GPIO_AF10 | GPIO_PORTE | GPIO_PIN10) +#define GPIO_QUADSPI1_CLK_4 (GPIO_ALT | GPIO_AF10 | GPIO_PORTF | GPIO_PIN10) + +/* RTC **********************************************************************************************/ + +#define GPIO_RTC_OUT2 (GPIO_ALT | GPIO_AF0 | GPIO_PORTB | GPIO_PIN2) +#define GPIO_RTC_REFIN_1 (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN1) +#define GPIO_RTC_REFIN_2 (GPIO_ALT | GPIO_AF0 | GPIO_PORTB | GPIO_PIN15) + +#if 0 + +/* REVISIT: How do you actually enable OUT1, TAMP1, TAMP2, TAMP3, TS? The + * datasheet (DS12288 Rev 2, page 54) shows OUT1, TS, and TAMP1 as "additional + * functions" for PC13 on all STM32G474(C-M-Q-R-V)xxx P/Ns, but the alternate + * function table (on page 72) makes no mention of these. Meanwhile, page 56 + * shows TAMP2 as an "additional function" but the same conundrum applies (for + * now). Granted, these are in the "additional function" column, not the + * "alternate function" column. + */ + +# define GPIO_RTC_OUT1 (GPIO_PORTC | GPIO_PIN13) +# define GPIO_RTC_TS (GPIO_PORTC | GPIO_PIN13) +# define GPIO_RTC_TAMP1 (GPIO_PORTC | GPIO_PIN13) +# define GPIO_RTC_TAMP2 (GPIO_PORTA | GPIO_PIN0) +# define GPIO_RTC_TAMP3 (GPIO_PORTE | GPIO_PIN6) + +#endif + +/* SAI - Serial Audio Interface *********************************************************************/ + +#define GPIO_SAI1_CK1_1 (GPIO_ALT | GPIO_AF3 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_SAI1_CK1_2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_SAI1_CK1_3 (GPIO_ALT | GPIO_AF3 | GPIO_PORTE | GPIO_PIN2) +#define GPIO_SAI1_CK1_4 (GPIO_ALT | GPIO_AF3 | GPIO_PORTG | GPIO_PIN7) +#define GPIO_SAI1_CK2_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_SAI1_CK2_2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTE | GPIO_PIN5) +#define GPIO_SAI1_D1_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_SAI1_D1_2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN3) +#define GPIO_SAI1_D1_3 (GPIO_ALT | GPIO_AF3 | GPIO_PORTD | GPIO_PIN6) +#define GPIO_SAI1_D1_4 (GPIO_ALT | GPIO_AF3 | GPIO_PORTE | GPIO_PIN6) +#define GPIO_SAI1_D2_1 (GPIO_ALT | GPIO_AF3 | GPIO_PORTB | GPIO_PIN9) +#define GPIO_SAI1_D2_2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTE | GPIO_PIN4) +#define GPIO_SAI1_D3_1 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN5) +#define GPIO_SAI1_D3_2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTF | GPIO_PIN10) +#define GPIO_SAI1_FS_A_1 (GPIO_ALT | GPIO_AF14 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_SAI1_FS_A_2 (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN9) +#define GPIO_SAI1_FS_A_3 (GPIO_ALT | GPIO_AF13 | GPIO_PORTE | GPIO_PIN4) +#define GPIO_SAI1_FS_B_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN4) +#define GPIO_SAI1_FS_B_2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_SAI1_FS_B_3 (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_SAI1_FS_B_4 (GPIO_ALT | GPIO_AF13 | GPIO_PORTE | GPIO_PIN9) +#define GPIO_SAI1_FS_B_5 (GPIO_ALT | GPIO_AF13 | GPIO_PORTF | GPIO_PIN9) +#define GPIO_SAI1_MCLK_A_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_SAI1_MCLK_A_2 (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_SAI1_MCLK_A_3 (GPIO_ALT | GPIO_AF13 | GPIO_PORTE | GPIO_PIN2) +#define GPIO_SAI1_MCLK_A_4 (GPIO_ALT | GPIO_AF13 | GPIO_PORTG | GPIO_PIN7) +#define GPIO_SAI1_MCLK_B_1 (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_SAI1_MCLK_B_2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTE | GPIO_PIN10) +#define GPIO_SAI1_MCLK_B_3 (GPIO_ALT | GPIO_AF13 | GPIO_PORTF | GPIO_PIN7) +#define GPIO_SAI1_SCK_A_1 (GPIO_ALT | GPIO_AF14 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_SAI1_SCK_A_2 (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_SAI1_SCK_A_3 (GPIO_ALT | GPIO_AF13 | GPIO_PORTE | GPIO_PIN5) +#define GPIO_SAI1_SCK_B_1 (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN3) +#define GPIO_SAI1_SCK_B_2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTE | GPIO_PIN8) +#define GPIO_SAI1_SCK_B_3 (GPIO_ALT | GPIO_AF13 | GPIO_PORTF | GPIO_PIN8) +#define GPIO_SAI1_SD_A_1 (GPIO_ALT | GPIO_AF14 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_SAI1_SD_A_2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTC | GPIO_PIN1) +#define GPIO_SAI1_SD_A_3 (GPIO_ALT | GPIO_AF13 | GPIO_PORTC | GPIO_PIN3) +#define GPIO_SAI1_SD_A_4 (GPIO_ALT | GPIO_AF13 | GPIO_PORTD | GPIO_PIN6) +#define GPIO_SAI1_SD_A_5 (GPIO_ALT | GPIO_AF13 | GPIO_PORTE | GPIO_PIN6) +#define GPIO_SAI1_SD_B_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_SAI1_SD_B_2 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_SAI1_SD_B_3 (GPIO_ALT | GPIO_AF13 | GPIO_PORTE | GPIO_PIN3) +#define GPIO_SAI1_SD_B_4 (GPIO_ALT | GPIO_AF13 | GPIO_PORTE | GPIO_PIN7) +#define GPIO_SAI1_SD_B_5 (GPIO_ALT | GPIO_AF3 | GPIO_PORTF | GPIO_PIN6) + +/* SPI - Serial Peripheral Interface ****************************************************************/ + +#define GPIO_SPI1_MISO_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN6) +#define GPIO_SPI1_MISO_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN4) +#define GPIO_SPI1_MISO_3 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTG | GPIO_PIN3) +#define GPIO_SPI1_MOSI_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN7) +#define GPIO_SPI1_MOSI_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN5) +#define GPIO_SPI1_MOSI_3 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTG | GPIO_PIN4) +#define GPIO_SPI1_NSS_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN4) +#define GPIO_SPI1_NSS_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN15) +#define GPIO_SPI1_NSS_3 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTG | GPIO_PIN5) +#define GPIO_SPI1_SCK_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN5) +#define GPIO_SPI1_SCK_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN3) +#define GPIO_SPI1_SCK_3 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTG | GPIO_PIN2) + +#define GPIO_SPI2_MISO_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN10) +#define GPIO_SPI2_MISO_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN14) +#define GPIO_SPI2_MOSI_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN11) +#define GPIO_SPI2_MOSI_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN15) +#define GPIO_SPI2_NSS_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN12) +#define GPIO_SPI2_NSS_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTF | GPIO_PIN0) +#define GPIO_SPI2_NSS_3 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTF | GPIO_PIN0) +#define GPIO_SPI2_SCK_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN13) +#define GPIO_SPI2_SCK_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTF | GPIO_PIN1) +#define GPIO_SPI2_SCK_3 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTF | GPIO_PIN9) +#define GPIO_SPI2_SCK_4 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTF | GPIO_PIN10) + +#define GPIO_SPI3_MISO_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN4) +#define GPIO_SPI3_MISO_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTC | GPIO_PIN11) +#define GPIO_SPI3_MOSI_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN5) +#define GPIO_SPI3_MOSI_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTC | GPIO_PIN12) +#define GPIO_SPI3_NSS_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN4) +#define GPIO_SPI3_NSS_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN15) +#define GPIO_SPI3_SCK_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN3) +#define GPIO_SPI3_SCK_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTC | GPIO_PIN10) +#define GPIO_SPI3_SCK_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTG | GPIO_PIN9) + +#define GPIO_SPI4_MISO_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTE | GPIO_PIN5) +#define GPIO_SPI4_MISO_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTE | GPIO_PIN13) +#define GPIO_SPI4_MOSI_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTE | GPIO_PIN6) +#define GPIO_SPI4_MOSI_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTE | GPIO_PIN14) +#define GPIO_SPI4_NSS_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTE | GPIO_PIN3) +#define GPIO_SPI4_NSS_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTE | GPIO_PIN4) +#define GPIO_SPI4_NSS_3 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTE | GPIO_PIN11) +#define GPIO_SPI4_SCK_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTE | GPIO_PIN2) +#define GPIO_SPI4_SCK_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTE | GPIO_PIN12) + +/* TIM - Timers *************************************************************************************/ + +#define GPIO_TIM1_BKIN2_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM1_BKIN2_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTC | GPIO_PIN3) +#define GPIO_TIM1_BKIN2_3 (GPIO_ALT | GPIO_AF6 | GPIO_PORTE | GPIO_PIN14) +#define GPIO_TIM1_BKIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM1_BKIN_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_TIM1_BKIN_3 (GPIO_ALT | GPIO_AF9 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_TIM1_BKIN_4 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM1_BKIN_5 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_TIM1_BKIN_6 (GPIO_ALT | GPIO_AF6 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_TIM1_BKIN_7 (GPIO_ALT | GPIO_AF2 | GPIO_PORTC | GPIO_PIN13) +#define GPIO_TIM1_BKIN_8 (GPIO_ALT | GPIO_AF2 | GPIO_PORTE | GPIO_PIN15) +#define GPIO_TIM1_CH1IN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN8) +#define GPIO_TIM1_CH1IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN0) +#define GPIO_TIM1_CH1IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN9) +#define GPIO_TIM1_CH1NIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM1_CH1NIN_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM1_CH1NIN_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN13) +#define GPIO_TIM1_CH1NIN_4 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN13) +#define GPIO_TIM1_CH1NIN_5 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN8) +#define GPIO_TIM1_CH1NOUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM1_CH1NOUT_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM1_CH1NOUT_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN13) +#define GPIO_TIM1_CH1NOUT_4 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN13) +#define GPIO_TIM1_CH1NOUT_5 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN8) +#define GPIO_TIM1_CH1OUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN8) +#define GPIO_TIM1_CH1OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN0) +#define GPIO_TIM1_CH1OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN9) +#define GPIO_TIM1_CH2IN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN9) +#define GPIO_TIM1_CH2IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN1) +#define GPIO_TIM1_CH2IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN11) +#define GPIO_TIM1_CH2NIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM1_CH2NIN_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM1_CH2NIN_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN14) +#define GPIO_TIM1_CH2NIN_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN10) +#define GPIO_TIM1_CH2NOUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM1_CH2NOUT_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM1_CH2NOUT_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN14) +#define GPIO_TIM1_CH2NOUT_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN10) +#define GPIO_TIM1_CH2OUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN9) +#define GPIO_TIM1_CH2OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN1) +#define GPIO_TIM1_CH2OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN11) +#define GPIO_TIM1_CH3IN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM1_CH3IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN2) +#define GPIO_TIM1_CH3IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN13) +#define GPIO_TIM1_CH3NIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM1_CH3NIN_2 (GPIO_ALT | GPIO_AF12 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM1_CH3NIN_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN15) +#define GPIO_TIM1_CH3NIN_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN12) +#define GPIO_TIM1_CH3NIN_5 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTF | GPIO_PIN0) +#define GPIO_TIM1_CH3NOUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM1_CH3NOUT_2 (GPIO_ALT | GPIO_AF12 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM1_CH3NOUT_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN15) +#define GPIO_TIM1_CH3NOUT_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN12) +#define GPIO_TIM1_CH3NOUT_5 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTF | GPIO_PIN0) +#define GPIO_TIM1_CH3OUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM1_CH3OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN2) +#define GPIO_TIM1_CH3OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN13) +#define GPIO_TIM1_CH4IN_1 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM1_CH4IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN3) +#define GPIO_TIM1_CH4IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN14) +#define GPIO_TIM1_CH4NIN (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN5) +#define GPIO_TIM1_CH4NIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN5) +#define GPIO_TIM1_CH4NIN_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN15) +#define GPIO_TIM1_CH4NOUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN5) +#define GPIO_TIM1_CH4NOUT_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN15) +#define GPIO_TIM1_CH4OUT_1 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM1_CH4OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN3) +#define GPIO_TIM1_CH4OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN14) +#define GPIO_TIM1_ETR_1 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM1_ETR_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN4) +#define GPIO_TIM1_ETR_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN7) + +#define GPIO_TIM2_CH1IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM2_CH1IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN5) +#define GPIO_TIM2_CH1IN_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN15) +#define GPIO_TIM2_CH1IN_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN3) +#define GPIO_TIM2_CH1OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM2_CH1OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN5) +#define GPIO_TIM2_CH1OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN15) +#define GPIO_TIM2_CH1OUT_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN3) +#define GPIO_TIM2_CH2IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM2_CH2IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN3) +#define GPIO_TIM2_CH2IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN4) +#define GPIO_TIM2_CH2OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM2_CH2OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN3) +#define GPIO_TIM2_CH2OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN4) +#define GPIO_TIM2_CH3IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM2_CH3IN_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN9) +#define GPIO_TIM2_CH3IN_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN10) +#define GPIO_TIM2_CH3IN_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN7) +#define GPIO_TIM2_CH3OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM2_CH3OUT_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN9) +#define GPIO_TIM2_CH3OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN10) +#define GPIO_TIM2_CH3OUT_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN7) +#define GPIO_TIM2_CH4IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM2_CH4IN_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM2_CH4IN_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN11) +#define GPIO_TIM2_CH4IN_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN6) +#define GPIO_TIM2_CH4OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM2_CH4OUT_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM2_CH4OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN11) +#define GPIO_TIM2_CH4OUT_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN6) +#define GPIO_TIM2_ETR_1 (GPIO_ALT | GPIO_AF14 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM2_ETR_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN5) +#define GPIO_TIM2_ETR_3 (GPIO_ALT | GPIO_AF14 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN15) +#define GPIO_TIM2_ETR_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN3) + +#define GPIO_TIM3_CH1IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM3_CH1IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM3_CH1IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN6) +#define GPIO_TIM3_CH1IN_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN2) +#define GPIO_TIM3_CH1OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM3_CH1OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM3_CH1OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN6) +#define GPIO_TIM3_CH1OUT_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN2) +#define GPIO_TIM3_CH2IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN4) +#define GPIO_TIM3_CH2IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM3_CH2IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM3_CH2IN_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN7) +#define GPIO_TIM3_CH2IN_5 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN3) +#define GPIO_TIM3_CH2OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN4) +#define GPIO_TIM3_CH2OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM3_CH2OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM3_CH2OUT_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN7) +#define GPIO_TIM3_CH2OUT_5 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN3) +#define GPIO_TIM3_CH3IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM3_CH3IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN8) +#define GPIO_TIM3_CH3IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN4) +#define GPIO_TIM3_CH3OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM3_CH3OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN8) +#define GPIO_TIM3_CH3OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN4) +#define GPIO_TIM3_CH4IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM3_CH4IN_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM3_CH4IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN9) +#define GPIO_TIM3_CH4IN_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN5) +#define GPIO_TIM3_CH4OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM3_CH4OUT_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM3_CH4OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN9) +#define GPIO_TIM3_CH4OUT_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN5) +#define GPIO_TIM3_ETR_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN3) +#define GPIO_TIM3_ETR_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN2) + +#define GPIO_TIM4_CH1IN_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM4_CH1IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM4_CH1IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN12) +#define GPIO_TIM4_CH1OUT_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM4_CH1OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM4_CH1OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN12) +#define GPIO_TIM4_CH2IN_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM4_CH2IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM4_CH2IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN13) +#define GPIO_TIM4_CH2OUT_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM4_CH2OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM4_CH2OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN13) +#define GPIO_TIM4_CH3IN_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN13) +#define GPIO_TIM4_CH3IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM4_CH3IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN14) +#define GPIO_TIM4_CH3OUT_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN13) +#define GPIO_TIM4_CH3OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM4_CH3OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN14) +#define GPIO_TIM4_CH4IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM4_CH4IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN15) +#define GPIO_TIM4_CH4IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTF | GPIO_PIN6) +#define GPIO_TIM4_CH4OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM4_CH4OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN15) +#define GPIO_TIM4_CH4OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTF | GPIO_PIN6) +#define GPIO_TIM4_ETR_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN8) +#define GPIO_TIM4_ETR_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN3) +#define GPIO_TIM4_ETR_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN0) + +#define GPIO_TIM5_CH1IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM5_CH1IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN2) +#define GPIO_TIM5_CH1IN_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTF | GPIO_PIN6) +#define GPIO_TIM5_CH1OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM5_CH1OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN2) +#define GPIO_TIM5_CH1OUT_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTF | GPIO_PIN6) +#define GPIO_TIM5_CH2IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM5_CH2IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN12) +#define GPIO_TIM5_CH2IN_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTF | GPIO_PIN7) +#define GPIO_TIM5_CH2OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM5_CH2OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN12) +#define GPIO_TIM5_CH2OUT_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTF | GPIO_PIN7) +#define GPIO_TIM5_CH3IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM5_CH3IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN8) +#define GPIO_TIM5_CH3IN_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTF | GPIO_PIN8) +#define GPIO_TIM5_CH3OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM5_CH3OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN8) +#define GPIO_TIM5_CH3OUT_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTF | GPIO_PIN8) +#define GPIO_TIM5_CH4IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM5_CH4IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN9) +#define GPIO_TIM5_CH4IN_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTF | GPIO_PIN9) +#define GPIO_TIM5_CH4OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM5_CH4OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN9) +#define GPIO_TIM5_CH4OUT_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTF | GPIO_PIN9) +#define GPIO_TIM5_ETR_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN12) +#define GPIO_TIM5_ETR_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN11) +#define GPIO_TIM5_ETR_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTF | GPIO_PIN6) + +#define GPIO_TIM8_BKIN2_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM8_BKIN2_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTC | GPIO_PIN9) +#define GPIO_TIM8_BKIN2_3 (GPIO_ALT | GPIO_AF6 | GPIO_PORTD | GPIO_PIN1) +#define GPIO_TIM8_BKIN_1 (GPIO_ALT | GPIO_AF9 | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM8_BKIN_2 (GPIO_ALT | GPIO_AF4 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM8_BKIN_3 (GPIO_ALT | GPIO_AF11 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM8_BKIN_4 (GPIO_ALT | GPIO_AF5 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM8_BKIN_5 (GPIO_ALT | GPIO_AF4 | GPIO_PORTD | GPIO_PIN2) +#define GPIO_TIM8_CH1IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN15) +#define GPIO_TIM8_CH1IN_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM8_CH1IN_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN6) +#define GPIO_TIM8_CH1NIN_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM8_CH1NIN_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN3) +#define GPIO_TIM8_CH1NIN_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN10) +#define GPIO_TIM8_CH1NOUT_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM8_CH1NOUT_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN3) +#define GPIO_TIM8_CH1NOUT_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN10) +#define GPIO_TIM8_CH1OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN15) +#define GPIO_TIM8_CH1OUT_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM8_CH1OUT_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN6) +#define GPIO_TIM8_CH2IN_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN14) +#define GPIO_TIM8_CH2IN_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM8_CH2IN_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN7) +#define GPIO_TIM8_CH2NIN_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM8_CH2NIN_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM8_CH2NIN_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN11) +#define GPIO_TIM8_CH2NOUT_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM8_CH2NOUT_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM8_CH2NOUT_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN11) +#define GPIO_TIM8_CH2OUT_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN14) +#define GPIO_TIM8_CH2OUT_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM8_CH2OUT_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN7) +#define GPIO_TIM8_CH3IN_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM8_CH3IN_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN8) +#define GPIO_TIM8_CH3NIN_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM8_CH3NIN_2 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM8_CH3NIN_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN12) +#define GPIO_TIM8_CH3NOUT_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM8_CH3NOUT_2 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM8_CH3NOUT_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN12) +#define GPIO_TIM8_CH3OUT_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM8_CH3OUT_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN8) +#define GPIO_TIM8_CH4IN_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN9) +#define GPIO_TIM8_CH4IN_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN1) +#define GPIO_TIM8_CH4NIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN13) +#define GPIO_TIM8_CH4NIN_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN0) +#define GPIO_TIM8_CH4NOUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN13) +#define GPIO_TIM8_CH4NOUT_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN0) +#define GPIO_TIM8_CH4OUT_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN9) +#define GPIO_TIM8_CH4OUT_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN1) +#define GPIO_TIM8_ETR_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM8_ETR_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN6) + +#define GPIO_TIM15_BKIN_1 (GPIO_ALT | GPIO_AF9 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_TIM15_BKIN_2 (GPIO_ALT | GPIO_AF2 | GPIO_PORTC | GPIO_PIN5) +#define GPIO_TIM15_CH1IN_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM15_CH1IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN14) +#define GPIO_TIM15_CH1IN_3 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTF | GPIO_PIN9) +#define GPIO_TIM15_CH1NIN_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM15_CH1NIN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN15) +#define GPIO_TIM15_CH1NIN_3 (GPIO_ALT | GPIO_AF14 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTG | GPIO_PIN9) +#define GPIO_TIM15_CH1NOUT_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM15_CH1NOUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN15) +#define GPIO_TIM15_CH1NOUT_3 (GPIO_ALT | GPIO_AF14 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTG | GPIO_PIN9) +#define GPIO_TIM15_CH1OUT_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM15_CH1OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN14) +#define GPIO_TIM15_CH1OUT_3 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTF | GPIO_PIN9) +#define GPIO_TIM15_CH2IN_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM15_CH2IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN15) +#define GPIO_TIM15_CH2IN_3 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTF | GPIO_PIN10) +#define GPIO_TIM15_CH2OUT_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM15_CH2OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN15) +#define GPIO_TIM15_CH2OUT_3 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTF | GPIO_PIN10) + +#define GPIO_TIM16_BKIN (GPIO_ALT | GPIO_AF1 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM16_CH1IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM16_CH1IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM16_CH1IN_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM16_CH1IN_4 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM16_CH1IN_5 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN0) +#define GPIO_TIM16_CH1NIN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN13) +#define GPIO_TIM16_CH1NIN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM16_CH1NOUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN13) +#define GPIO_TIM16_CH1NOUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM16_CH1OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM16_CH1OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM16_CH1OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM16_CH1OUT_4 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM16_CH1OUT_5 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN0) + +#define GPIO_TIM17_BKIN_1 (GPIO_ALT | GPIO_AF1 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM17_BKIN_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM17_CH1IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM17_CH1IN_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM17_CH1IN_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM17_CH1IN_4 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN1) +#define GPIO_TIM17_CH1NIN (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM17_CH1NOUT (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM17_CH1OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM17_CH1OUT_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM17_CH1OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM17_CH1OUT_4 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN1) + +#define GPIO_TIM20_BKIN2_1 (GPIO_ALT | GPIO_AF2 | GPIO_PORTF | GPIO_PIN8) +#define GPIO_TIM20_BKIN2_2 (GPIO_ALT | GPIO_AF2 | GPIO_PORTF | GPIO_PIN10) +#define GPIO_TIM20_BKIN2_3 (GPIO_ALT | GPIO_AF2 | GPIO_PORTG | GPIO_PIN4) +#define GPIO_TIM20_BKIN_1 (GPIO_ALT | GPIO_AF2 | GPIO_PORTF | GPIO_PIN7) +#define GPIO_TIM20_BKIN_2 (GPIO_ALT | GPIO_AF2 | GPIO_PORTF | GPIO_PIN9) +#define GPIO_TIM20_BKIN_3 (GPIO_ALT | GPIO_AF2 | GPIO_PORTG | GPIO_PIN3) +#define GPIO_TIM20_BKIN_4 (GPIO_ALT | GPIO_AF2 | GPIO_PORTG | GPIO_PIN6) +#define GPIO_TIM20_CH1IN_1 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN2) +#define GPIO_TIM20_CH1IN_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN2) +#define GPIO_TIM20_CH1IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTF | GPIO_PIN12) +#define GPIO_TIM20_CH1NIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN4) +#define GPIO_TIM20_CH1NIN_2 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTF | GPIO_PIN4) +#define GPIO_TIM20_CH1NIN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTG | GPIO_PIN0) +#define GPIO_TIM20_CH1NOUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN4) +#define GPIO_TIM20_CH1NOUT_2 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTF | GPIO_PIN4) +#define GPIO_TIM20_CH1NOUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTG | GPIO_PIN0) +#define GPIO_TIM20_CH1OUT_1 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN2) +#define GPIO_TIM20_CH1OUT_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN2) +#define GPIO_TIM20_CH1OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTF | GPIO_PIN12) +#define GPIO_TIM20_CH2IN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN2) +#define GPIO_TIM20_CH2IN_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN3) +#define GPIO_TIM20_CH2IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTF | GPIO_PIN13) +#define GPIO_TIM20_CH2NIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN5) +#define GPIO_TIM20_CH2NIN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTF | GPIO_PIN5) +#define GPIO_TIM20_CH2NIN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTG | GPIO_PIN1) +#define GPIO_TIM20_CH2NOUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN5) +#define GPIO_TIM20_CH2NOUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTF | GPIO_PIN5) +#define GPIO_TIM20_CH2NOUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTG | GPIO_PIN1) +#define GPIO_TIM20_CH2OUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN2) +#define GPIO_TIM20_CH2OUT_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN3) +#define GPIO_TIM20_CH2OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTF | GPIO_PIN13) +#define GPIO_TIM20_CH3IN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN8) +#define GPIO_TIM20_CH3IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTF | GPIO_PIN2) +#define GPIO_TIM20_CH3IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTF | GPIO_PIN14) +#define GPIO_TIM20_CH3NIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN6) +#define GPIO_TIM20_CH3NIN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTG | GPIO_PIN2) +#define GPIO_TIM20_CH3NOUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN6) +#define GPIO_TIM20_CH3NOUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTG | GPIO_PIN2) +#define GPIO_TIM20_CH3OUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN8) +#define GPIO_TIM20_CH3OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTF | GPIO_PIN2) +#define GPIO_TIM20_CH3OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTF | GPIO_PIN14) +#define GPIO_TIM20_CH4IN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN1) +#define GPIO_TIM20_CH4IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTF | GPIO_PIN3) +#define GPIO_TIM20_CH4IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTF | GPIO_PIN15) +#define GPIO_TIM20_CH4NIN_1 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN0) +#define GPIO_TIM20_CH4NIN_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTG | GPIO_PIN3) +#define GPIO_TIM20_CH4NOUT_1 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN0) +#define GPIO_TIM20_CH4NOUT_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTG | GPIO_PIN3) +#define GPIO_TIM20_CH4OUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN1) +#define GPIO_TIM20_CH4OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTF | GPIO_PIN3) +#define GPIO_TIM20_CH4OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTF | GPIO_PIN15) +#define GPIO_TIM20_ETR_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN0) +#define GPIO_TIM20_ETR_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTF | GPIO_PIN11) +#define GPIO_TIM20_ETR_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTG | GPIO_PIN5) + +/* UARTs/USARTs *************************************************************************************/ + +#define GPIO_USART1_CK (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_USART1_CTS (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_USART1_DE (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_USART1_NSS (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_USART1_RTS (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_USART1_RX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_USART1_RX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_USART1_RX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN5) +#define GPIO_USART1_RX_4 (GPIO_ALT | GPIO_AF7 | GPIO_PORTE | GPIO_PIN1) +#define GPIO_USART1_TX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_USART1_TX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_USART1_TX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN4) +#define GPIO_USART1_TX_4 (GPIO_ALT | GPIO_AF7 | GPIO_PORTE | GPIO_PIN0) +#define GPIO_USART1_TX_5 (GPIO_ALT | GPIO_AF7 | GPIO_PORTG | GPIO_PIN9) + +#define GPIO_USART2_CK_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN4) +#define GPIO_USART2_CK_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_USART2_CK_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN7) +#define GPIO_USART2_CTS_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN0) +#define GPIO_USART2_CTS_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN3) +#define GPIO_USART2_DE_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN1) +#define GPIO_USART2_DE_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN4) +#define GPIO_USART2_NSS_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN0) +#define GPIO_USART2_NSS_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN3) +#define GPIO_USART2_RTS_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN1) +#define GPIO_USART2_RTS_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN4) +#define GPIO_USART2_RX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_USART2_RX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_USART2_RX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_USART2_RX_4 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN6) +#define GPIO_USART2_TX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN2) +#define GPIO_USART2_TX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_USART2_TX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN3) +#define GPIO_USART2_TX_4 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN5) + +#define GPIO_USART3_CK_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_USART3_CK_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN12) +#define GPIO_USART3_CK_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN10) +#define GPIO_USART3_CTS_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_USART3_CTS_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_USART3_CTS_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN11) +#define GPIO_USART3_DE_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN14) +#define GPIO_USART3_DE_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN12) +#define GPIO_USART3_NSS_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_USART3_NSS_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_USART3_NSS_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN11) +#define GPIO_USART3_RTS_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN14) +#define GPIO_USART3_RTS_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN12) +#define GPIO_USART3_RTS_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTF | GPIO_PIN6) +#define GPIO_USART3_RX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_USART3_RX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN11) +#define GPIO_USART3_RX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN11) +#define GPIO_USART3_RX_4 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN9) +#define GPIO_USART3_RX_5 (GPIO_ALT | GPIO_AF7 | GPIO_PORTE | GPIO_PIN15) +#define GPIO_USART3_TX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN9) +#define GPIO_USART3_TX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_USART3_TX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN10) +#define GPIO_USART3_TX_4 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN8) + +#define GPIO_UART4_CTS (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_UART4_DE (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_UART4_RTS (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_UART4_RX (GPIO_ALT | GPIO_AF5 | GPIO_PORTC | GPIO_PIN11) +#define GPIO_UART4_TX (GPIO_ALT | GPIO_AF5 | GPIO_PORTC | GPIO_PIN10) + +#define GPIO_UART5_CTS (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_UART5_DE (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_UART5_RTS (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_UART5_RX (GPIO_ALT | GPIO_AF5 | GPIO_PORTD | GPIO_PIN2) +#define GPIO_UART5_TX (GPIO_ALT | GPIO_AF5 | GPIO_PORTC | GPIO_PIN12) + +/* USB Device Full Speed ****************************************************************************/ + +#endif /* __ARCH_ARM_SRC_STM32_HARDWARE_STM32G474QXX_PINMAP_H */ diff --git a/arch/arm/src/stm32/hardware/stm32g474rxx_pinmap.h b/arch/arm/src/stm32/hardware/stm32g474rxx_pinmap.h new file mode 100644 index 0000000000..74ba830ec2 --- /dev/null +++ b/arch/arm/src/stm32/hardware/stm32g474rxx_pinmap.h @@ -0,0 +1,829 @@ +/**************************************************************************************************** + * arch/arm/src/stm32/hardware/stm32g474rxx_pinmap.h + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************************************/ + +#ifndef __ARCH_ARM_SRC_STM32_HARDWARE_STM32G474RXX_PINMAP_H +#define __ARCH_ARM_SRC_STM32_HARDWARE_STM32G474RXX_PINMAP_H + +/**************************************************************************************************** + * Pre-processor Definitions + ****************************************************************************************************/ + +/* Alternate Pin Functions. All members of the STM32G47xxx family share the + * same pin multiplexing (although they differ in the pins physically + * available). + * + * Alternative pin selections are provided with a numeric suffix like _1, _2, + * etc. Drivers, however, will use the pin selection without the numeric + * suffix. Additional definitions are required in the board.h file. For + * example, if CAN1_RX connects via PA11 on some board, then the following + * definitions should appear in the board.h header file for that board: + * + * #define GPIO_CAN1_RX GPIO_CAN1_RX_1 + * + * The driver will then automatically configure PA11 as the CAN1 RX pin. + */ + +/* WARNING!!! WARNING!!! WARNING!!! WARNING!!! WARNING!!! WARNING!!! WARNING!!! + * Additional effort is required to select specific GPIO options such as + * frequency, open-drain/push-pull, and pull-up/down! Just the basics are + * defined for most pins in this file. + */ + +/* ADC - Analog Digital Converter *******************************************************************/ + +#define GPIO_ADC1_IN1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN0) +#define GPIO_ADC1_IN2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_ADC1_IN3 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN2) +#define GPIO_ADC1_IN4 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_ADC1_IN5 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_ADC1_IN6 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN0) +#define GPIO_ADC1_IN7 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN1) +#define GPIO_ADC1_IN8 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN2) +#define GPIO_ADC1_IN9 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN3) +#define GPIO_ADC1_IN10 (GPIO_ANALOG | GPIO_PORTF | GPIO_PIN0) +#define GPIO_ADC1_IN11 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN12) +#define GPIO_ADC1_IN12 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_ADC1_IN14 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN11) +#define GPIO_ADC1_IN15 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) + +#define GPIO_ADC2_IN1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN0) +#define GPIO_ADC2_IN2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_ADC2_IN3 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN6) +#define GPIO_ADC2_IN4 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN7) +#define GPIO_ADC2_IN5 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN4) +#define GPIO_ADC2_IN6 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN0) +#define GPIO_ADC2_IN7 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN1) +#define GPIO_ADC2_IN8 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN2) +#define GPIO_ADC2_IN9 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN3) +#define GPIO_ADC2_IN10 (GPIO_ANALOG | GPIO_PORTF | GPIO_PIN1) +#define GPIO_ADC2_IN11 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_ADC2_IN12 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN2) +#define GPIO_ADC2_IN13 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_ADC2_IN14 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN11) +#define GPIO_ADC2_IN15 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) +#define GPIO_ADC2_IN17 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN4) + +#define GPIO_ADC3_IN1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_ADC3_IN5 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_ADC3_IN12 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) + +#define GPIO_ADC4_IN3 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN12) +#define GPIO_ADC4_IN4 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_ADC4_IN5 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) + +#define GPIO_ADC5_IN1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN8) +#define GPIO_ADC5_IN2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN9) + +/* COMP - Comparator ********************************************************************************/ + +#define GPIO_COMP1_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN0) +#define GPIO_COMP1_OUT_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_COMP1_OUT_3 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_COMP1_OUT_4 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN8) + +#define GPIO_COMP2_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN2) +#define GPIO_COMP2_OUT_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN7) +#define GPIO_COMP2_OUT_3 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_COMP2_OUT_4 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN9) + +#define GPIO_COMP3_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_COMP3_OUT_2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTB | GPIO_PIN15) +#define GPIO_COMP3_OUT_3 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN2) + +#define GPIO_COMP4_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_COMP4_OUT_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_COMP4_OUT_3 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN14) + +#define GPIO_COMP5_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_COMP5_OUT_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN7) + +#define GPIO_COMP6_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_COMP6_OUT_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN6) + +#define GPIO_COMP7_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_COMP7_OUT_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN8) + +/* CRS **********************************************************************************************/ + +/* REVISIT: Clock Recovery System (CRS_SYNC signal exposed to pin(s)?) + * Before using the following defines, make sure they are correct! + */ + +#if 0 +# define GPIO_USB_CRS_SYNC (GPIO_ALT | GPIO_AF3 | GPIO_PORTA | GPIO_PIN10) +# define GPIO_UCPD1_CRS_SYNC (GPIO_ALT | GPIO_AF3 | GPIO_PORTB | GPIO_PIN3) +#endif + +/* DAC **********************************************************************************************/ + +#define GPIO_DAC1_OUT1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN4) +#define GPIO_DAC1_OUT2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_DAC2_OUT1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN6) + +/* Clocks outputs ***********************************************************************************/ + +/* MCU clock output */ + +#define GPIO_MCO_1 (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_MCO_2 (GPIO_ALT | GPIO_AF0 | GPIO_PORTG | GPIO_PIN10) + +/* Event outputs ************************************************************************************/ + +#define GPIO_PA0_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN0) +#define GPIO_PA1_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN1) +#define GPIO_PA2_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN2) +#define GPIO_PA3_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_PA4_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN4) +#define GPIO_PA5_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN5) +#define GPIO_PA6_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_PA7_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN7) +#define GPIO_PA8_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_PA9_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_PA10_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_PA11_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_PA12_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_PA13_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_PA14_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_PA15_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN15) + +#define GPIO_PB0_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN0) +#define GPIO_PB1_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_PB2_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN2) +#define GPIO_PB3_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN3) +#define GPIO_PB4_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_PB5_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_PB6_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_PB7_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_PB8_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_PB9_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN9) +#define GPIO_PB10_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_PB11_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN11) +#define GPIO_PB12_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_PB13_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_PB14_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN14) +#define GPIO_PB15_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN15) + +#define GPIO_PC0_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN0) +#define GPIO_PC1_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN1) +#define GPIO_PC2_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN2) +#define GPIO_PC3_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN3) +#define GPIO_PC4_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN4) +#define GPIO_PC5_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN5) +#define GPIO_PC6_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN6) +#define GPIO_PC7_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN7) +#define GPIO_PC8_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN8) +#define GPIO_PC9_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN9) +#define GPIO_PC10_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN10) +#define GPIO_PC11_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN11) +#define GPIO_PC12_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN12) +#define GPIO_PC13_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN13) +#define GPIO_PC14_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN14) +#define GPIO_PC15_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN15) + +#define GPIO_PD2_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN2) + +#define GPIO_PF0_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTF | GPIO_PIN0) +#define GPIO_PF1_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTF | GPIO_PIN1) + +#define GPIO_PG10_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTG | GPIO_PIN10) + +/* FDCAN ********************************************************************************************/ + +#define GPIO_FDCAN1_RX_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN11) +#define GPIO_FDCAN1_RX_2 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN8) +#define GPIO_FDCAN1_RX_3 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN0) +#define GPIO_FDCAN1_TX_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN12) +#define GPIO_FDCAN1_TX_2 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN9) +#define GPIO_FDCAN1_TX_3 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN1) + +#define GPIO_FDCAN2_RX_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN5) +#define GPIO_FDCAN2_RX_2 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN12) +#define GPIO_FDCAN2_TX_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN6) +#define GPIO_FDCAN2_TX_2 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN13) + +#define GPIO_FDCAN3_RX_1 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN8) +#define GPIO_FDCAN3_RX_2 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN3) +#define GPIO_FDCAN3_TX_1 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN15) +#define GPIO_FDCAN3_TX_2 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN4) + +/* HRTIM - High-Resolution Timer ********************************************************************/ + +#define GPIO_HRTIM1_CHA1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_HRTIM1_CHA2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_HRTIM1_CHB1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_HRTIM1_CHB2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_HRTIM1_CHC1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_HRTIM1_CHC2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_HRTIM1_CHD1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN14) +#define GPIO_HRTIM1_CHD2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN15) +#define GPIO_HRTIM1_CHE1 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN8) +#define GPIO_HRTIM1_CHE2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN9) +#define GPIO_HRTIM1_CHF1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTC | GPIO_PIN6) +#define GPIO_HRTIM1_CHF2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTC | GPIO_PIN7) +#define GPIO_HRTIM1_EEV1 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN12) +#define GPIO_HRTIM1_EEV10_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTC | GPIO_PIN5) +#define GPIO_HRTIM1_EEV10_2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN6) +#define GPIO_HRTIM1_EEV2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN11) +#define GPIO_HRTIM1_EEV3 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_HRTIM1_EEV4 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_HRTIM1_EEV5 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN9) +#define GPIO_HRTIM1_EEV6 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_HRTIM1_EEV7 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_HRTIM1_EEV8 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_HRTIM1_EEV9 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN3) +#define GPIO_HRTIM1_FLT1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_HRTIM1_FLT2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_HRTIM1_FLT3 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_HRTIM1_FLT4 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN11) +#define GPIO_HRTIM1_FLT5_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN0) +#define GPIO_HRTIM1_FLT5_2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN7) +#define GPIO_HRTIM1_FLT6 (GPIO_ALT | GPIO_AF13 | GPIO_PORTC | GPIO_PIN10) +#define GPIO_HRTIM1_SCIN_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN2) +#define GPIO_HRTIM1_SCIN_2 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_HRTIM1_SCOUT_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_HRTIM1_SCOUT_2 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN3) + +/* I2C **********************************************************************************************/ + +#define GPIO_I2C1_SCL_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN13) +#define GPIO_I2C1_SCL_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN15) +#define GPIO_I2C1_SCL_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTB | GPIO_PIN8) +#define GPIO_I2C1_SDA_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN14) +#define GPIO_I2C1_SDA_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTB | GPIO_PIN7) +#define GPIO_I2C1_SDA_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTB | GPIO_PIN9) +#define GPIO_I2C1_SMBA (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN5) + +#define GPIO_I2C2_SCL_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN9) +#define GPIO_I2C2_SCL_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTC | GPIO_PIN4) +#define GPIO_I2C2_SDA_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN8) +#define GPIO_I2C2_SDA_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTF | GPIO_PIN0) +#define GPIO_I2C2_SMBA_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN10) +#define GPIO_I2C2_SMBA_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN12) + +#define GPIO_I2C3_SCL_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN8) +#define GPIO_I2C3_SCL_2 (GPIO_ALT | GPIO_AF8 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTC | GPIO_PIN8) +#define GPIO_I2C3_SDA_1 (GPIO_ALT | GPIO_AF8 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTB | GPIO_PIN5) +#define GPIO_I2C3_SDA_2 (GPIO_ALT | GPIO_AF8 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTC | GPIO_PIN9) +#define GPIO_I2C3_SDA_3 (GPIO_ALT | GPIO_AF8 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTC | GPIO_PIN11) +#define GPIO_I2C3_SMBA_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN9) +#define GPIO_I2C3_SMBA_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN2) + +#define GPIO_I2C4_SCL_1 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN13) +#define GPIO_I2C4_SCL_2 (GPIO_ALT | GPIO_AF8 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTC | GPIO_PIN6) +#define GPIO_I2C4_SDA_1 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTB | GPIO_PIN7) +#define GPIO_I2C4_SDA_2 (GPIO_ALT | GPIO_AF8 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTC | GPIO_PIN7) +#define GPIO_I2C4_SMBA (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN14) + +/* I2S **********************************************************************************************/ + +#define GPIO_I2S2_CK_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_I2S2_CK_2 (GPIO_ALT | GPIO_AF5 | GPIO_PORTF | GPIO_PIN1) +#define GPIO_I2S2_MCK_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_I2S2_MCK_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTC | GPIO_PIN6) +#define GPIO_I2S2_SD_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_I2S2_SD_2 (GPIO_ALT | GPIO_AF5 | GPIO_PORTB | GPIO_PIN15) +#define GPIO_I2S2_WS_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_I2S2_WS_2 (GPIO_ALT | GPIO_AF5 | GPIO_PORTF | GPIO_PIN0) +#define GPIO_I2S3_CK_1 (GPIO_ALT | GPIO_AF6 | GPIO_PORTB | GPIO_PIN3) +#define GPIO_I2S3_CK_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTC | GPIO_PIN10) +#define GPIO_I2S3_MCK_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_I2S3_MCK_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTC | GPIO_PIN7) +#define GPIO_I2S3_SD_1 (GPIO_ALT | GPIO_AF6 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_I2S3_SD_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTC | GPIO_PIN12) +#define GPIO_I2S3_WS_1 (GPIO_ALT | GPIO_AF6 | GPIO_PORTA | GPIO_PIN4) +#define GPIO_I2S3_WS_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_I2S_CKIN_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_I2S_CKIN_2 (GPIO_ALT | GPIO_AF5 | GPIO_PORTC | GPIO_PIN9) + +/* IR - Infrared with TIM16 channel 1 and TIM17 channel 1 *******************************************/ + +#define GPIO_IR_OUT_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_IR_OUT_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTB | GPIO_PIN9) + +/* LPTIM - Low Power Timer **************************************************************************/ + +#define GPIO_LPTIM1_ETR_1 (GPIO_ALT | GPIO_AF11 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_LPTIM1_ETR_2 (GPIO_ALT | GPIO_AF1 | GPIO_PORTC | GPIO_PIN3) +#define GPIO_LPTIM1_IN1_1 (GPIO_ALT | GPIO_AF11 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_LPTIM1_IN1_2 (GPIO_ALT | GPIO_AF1 | GPIO_PORTC | GPIO_PIN0) +#define GPIO_LPTIM1_IN2_1 (GPIO_ALT | GPIO_AF11 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_LPTIM1_IN2_2 (GPIO_ALT | GPIO_AF1 | GPIO_PORTC | GPIO_PIN2) +#define GPIO_LPTIM1_OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_LPTIM1_OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_PORTB | GPIO_PIN2) +#define GPIO_LPTIM1_OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_PORTC | GPIO_PIN1) + +/* LPUART - Low-Power Universal Asynchronous Receiver Transmitter ***********************************/ + +#define GPIO_LPUART1_CTS_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_LPUART1_CTS_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_LPUART1_DE_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_LPUART1_DE_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_LPUART1_RTS_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_LPUART1_RTS_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_LPUART1_RX_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_LPUART1_RX_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_LPUART1_RX_3 (GPIO_ALT | GPIO_AF8 | GPIO_PORTC | GPIO_PIN0) +#define GPIO_LPUART1_TX_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN2) +#define GPIO_LPUART1_TX_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN11) +#define GPIO_LPUART1_TX_3 (GPIO_ALT | GPIO_AF8 | GPIO_PORTC | GPIO_PIN1) + +/* JTAG *********************************************************************************************/ + +#define GPIO_JTCK (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_JTDI (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_JTDO (GPIO_ALT | GPIO_AF0 | GPIO_PORTB | GPIO_PIN3) +#define GPIO_JTMS (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_NJTRST (GPIO_ALT | GPIO_AF0 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_SWCLK (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_SWDIO (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN13) + +/* OPAMP ********************************************************************************************/ + +#define GPIO_OPAMP1_VINM0_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINM0_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP1_VINM1_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINM1_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP1_VINM_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINM_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP1_VINM_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINM_SEC_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP1_VINP_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP1_VINP_2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINP_3 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN7) +#define GPIO_OPAMP1_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP1_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINP_SEC_3 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN7) +#define GPIO_OPAMP1_VOUT (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN2) + +#define GPIO_OPAMP2_VINM0_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_OPAMP2_VINM0_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP2_VINM1_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_OPAMP2_VINM1_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP2_VINM_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_OPAMP2_VINM_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP2_VINM_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_OPAMP2_VINM_SEC_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP2_VINP_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN7) +#define GPIO_OPAMP2_VINP_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) +#define GPIO_OPAMP2_VINP_3 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_OPAMP2_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN7) +#define GPIO_OPAMP2_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) +#define GPIO_OPAMP2_VINP_SEC_3 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_OPAMP2_VOUT (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN6) + +#define GPIO_OPAMP3_VINM0_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN2) +#define GPIO_OPAMP3_VINM0_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP3_VINM1_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN2) +#define GPIO_OPAMP3_VINM1_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP3_VINM_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN2) +#define GPIO_OPAMP3_VINM_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP3_VINM_SEC_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN2) +#define GPIO_OPAMP3_VINM_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP3_VINP_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP3_VINP_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) +#define GPIO_OPAMP3_VINP_3 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP3_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP3_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) +#define GPIO_OPAMP3_VINP_SEC_3 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP3_VOUT (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) + +#define GPIO_OPAMP4_VINM (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP4_VINM0 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP4_VINM1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP4_VINM_SEC (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP4_VINP_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN11) +#define GPIO_OPAMP4_VINP_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP4_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN11) +#define GPIO_OPAMP4_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP4_VOUT (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN12) + +#define GPIO_OPAMP5_VINM0_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP5_VINM0_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) +#define GPIO_OPAMP5_VINM1_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP5_VINM1_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) +#define GPIO_OPAMP5_VINM_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP5_VINM_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) +#define GPIO_OPAMP5_VINM_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP5_VINM_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) +#define GPIO_OPAMP5_VINP_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_OPAMP5_VINP_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN3) +#define GPIO_OPAMP5_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_OPAMP5_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN3) +#define GPIO_OPAMP5_VOUT (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN8) + +#define GPIO_OPAMP6_VINM0_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP6_VINM0_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_OPAMP6_VINM1_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP6_VINM1_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_OPAMP6_VINM_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP6_VINM_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_OPAMP6_VINM_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP6_VINM_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_OPAMP6_VINP_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN12) +#define GPIO_OPAMP6_VINP_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP6_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN12) +#define GPIO_OPAMP6_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP6_VOUT (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN11) + +/* QUADSPI ******************************************************************************************/ + +#define GPIO_QUADSPI1_BK1_IO0 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_QUADSPI1_BK1_IO1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN0) +#define GPIO_QUADSPI1_BK1_IO2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTA | GPIO_PIN7) +#define GPIO_QUADSPI1_BK1_IO3 (GPIO_ALT | GPIO_AF10 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_QUADSPI1_BK2_IO0 (GPIO_ALT | GPIO_AF10 | GPIO_PORTC | GPIO_PIN1) +#define GPIO_QUADSPI1_BK2_IO1_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN2) +#define GPIO_QUADSPI1_BK2_IO1_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTC | GPIO_PIN2) +#define GPIO_QUADSPI1_BK2_IO2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTC | GPIO_PIN3) +#define GPIO_QUADSPI1_BK2_IO3 (GPIO_ALT | GPIO_AF10 | GPIO_PORTC | GPIO_PIN4) +#define GPIO_QUADSPI1_BK1_NCS_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTA | GPIO_PIN2) +#define GPIO_QUADSPI1_BK1_NCS_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN11) +#define GPIO_QUADSPI1_CLK_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_QUADSPI1_CLK_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN10) + +/* RTC **********************************************************************************************/ + +#define GPIO_RTC_OUT2 (GPIO_ALT | GPIO_AF0 | GPIO_PORTB | GPIO_PIN2) +#define GPIO_RTC_REFIN_1 (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN1) +#define GPIO_RTC_REFIN_2 (GPIO_ALT | GPIO_AF0 | GPIO_PORTB | GPIO_PIN15) + +#if 0 + +/* REVISIT: How do you actually enable OUT1, TAMP1, TAMP2, TS? The datasheet + * (DS12288 Rev 2, page 54) shows OUT1, TS, and TAMP1 as "additional + * functions" for PC13 on all STM32G474(C-M-Q-R-V)xxx P/Ns, but the alternate + * function table (on page 72) makes no mention of these. Meanwhile, page 56 + * shows TAMP2 as an "additional function" but the same conundrum applies (for + * now). Granted, these are in the "additional function" column, not the + * "alternate function" column. + */ + +# define GPIO_RTC_OUT1 (GPIO_PORTC | GPIO_PIN13) +# define GPIO_RTC_TS (GPIO_PORTC | GPIO_PIN13) +# define GPIO_RTC_TAMP1 (GPIO_PORTC | GPIO_PIN13) +# define GPIO_RTC_TAMP2 (GPIO_PORTA | GPIO_PIN0) + +#endif + +/* SAI - Serial Audio Interface *********************************************************************/ + +#define GPIO_SAI1_CK2 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_SAI1_D1_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_SAI1_D1_2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN3) +#define GPIO_SAI1_D2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTB | GPIO_PIN9) +#define GPIO_SAI1_D3 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN5) +#define GPIO_SAI1_MCLK_B (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_SAI1_SCK_B (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN3) +#define GPIO_SAI1_SD_A_1 (GPIO_ALT | GPIO_AF14 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_SAI1_SD_A_2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTC | GPIO_PIN1) +#define GPIO_SAI1_SD_A_3 (GPIO_ALT | GPIO_AF13 | GPIO_PORTC | GPIO_PIN3) +#define GPIO_SAI1_CK1_1 (GPIO_ALT | GPIO_AF3 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_SAI1_CK1_2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_SAI1_FS_A_1 (GPIO_ALT | GPIO_AF14 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_SAI1_FS_A_2 (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN9) +#define GPIO_SAI1_FS_B_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN4) +#define GPIO_SAI1_FS_B_2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_SAI1_FS_B_3 (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_SAI1_MCLK_A_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_SAI1_MCLK_A_2 (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_SAI1_SCK_A_1 (GPIO_ALT | GPIO_AF14 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_SAI1_SCK_A_2 (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_SAI1_SD_B_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_SAI1_SD_B_2 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN5) + +/* SPI - Serial Peripheral Interface ****************************************************************/ + +#define GPIO_SPI1_MISO_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN6) +#define GPIO_SPI1_MISO_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN4) +#define GPIO_SPI1_MOSI_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN7) +#define GPIO_SPI1_MOSI_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN5) +#define GPIO_SPI1_NSS_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN4) +#define GPIO_SPI1_NSS_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN15) +#define GPIO_SPI1_SCK_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN5) +#define GPIO_SPI1_SCK_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN3) + +#define GPIO_SPI2_MISO_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN10) +#define GPIO_SPI2_MISO_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN14) +#define GPIO_SPI2_MOSI_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN11) +#define GPIO_SPI2_MOSI_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN15) +#define GPIO_SPI2_NSS_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN12) +#define GPIO_SPI2_NSS_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTF | GPIO_PIN0) +#define GPIO_SPI2_SCK_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN13) +#define GPIO_SPI2_SCK_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTF | GPIO_PIN1) + +#define GPIO_SPI3_MISO_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN4) +#define GPIO_SPI3_MISO_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTC | GPIO_PIN11) +#define GPIO_SPI3_MOSI_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN5) +#define GPIO_SPI3_MOSI_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTC | GPIO_PIN12) +#define GPIO_SPI3_NSS_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN4) +#define GPIO_SPI3_NSS_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN15) +#define GPIO_SPI3_SCK_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN3) +#define GPIO_SPI3_SCK_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTC | GPIO_PIN10) + +/* TIM - Timers *************************************************************************************/ + +#define GPIO_TIM1_BKIN2_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM1_BKIN2_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTC | GPIO_PIN3) +#define GPIO_TIM1_BKIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM1_BKIN_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_TIM1_BKIN_3 (GPIO_ALT | GPIO_AF9 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_TIM1_BKIN_4 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM1_BKIN_5 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_TIM1_BKIN_6 (GPIO_ALT | GPIO_AF6 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_TIM1_BKIN_7 (GPIO_ALT | GPIO_AF2 | GPIO_PORTC | GPIO_PIN13) +#define GPIO_TIM1_CH1IN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN8) +#define GPIO_TIM1_CH1IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN0) +#define GPIO_TIM1_CH1NIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM1_CH1NIN_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM1_CH1NIN_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN13) +#define GPIO_TIM1_CH1NIN_4 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN13) +#define GPIO_TIM1_CH1NOUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM1_CH1NOUT_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM1_CH1NOUT_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN13) +#define GPIO_TIM1_CH1NOUT_4 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN13) +#define GPIO_TIM1_CH1OUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN8) +#define GPIO_TIM1_CH1OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN0) +#define GPIO_TIM1_CH2IN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN9) +#define GPIO_TIM1_CH2IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN1) +#define GPIO_TIM1_CH2NIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM1_CH2NIN_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM1_CH2NIN_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN14) +#define GPIO_TIM1_CH2NOUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM1_CH2NOUT_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM1_CH2NOUT_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN14) +#define GPIO_TIM1_CH2OUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN9) +#define GPIO_TIM1_CH2OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN1) +#define GPIO_TIM1_CH3IN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM1_CH3IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN2) +#define GPIO_TIM1_CH3NIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM1_CH3NIN_2 (GPIO_ALT | GPIO_AF12 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM1_CH3NIN_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN15) +#define GPIO_TIM1_CH3NIN_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN12) +#define GPIO_TIM1_CH3NOUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM1_CH3NOUT_2 (GPIO_ALT | GPIO_AF12 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM1_CH3NOUT_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN15) +#define GPIO_TIM1_CH3NOUT_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN12) +#define GPIO_TIM1_CH3OUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM1_CH3OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN2) +#define GPIO_TIM1_CH4IN_1 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM1_CH4IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN3) +#define GPIO_TIM1_CH4NIN (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN5) +#define GPIO_TIM1_CH4NOUT (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN5) +#define GPIO_TIM1_CH4OUT_1 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM1_CH4OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN3) +#define GPIO_TIM1_ETR_1 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM1_ETR_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN4) + +#define GPIO_TIM2_CH1IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM2_CH1IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN5) +#define GPIO_TIM2_CH1IN_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN15) +#define GPIO_TIM2_CH1OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM2_CH1OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN5) +#define GPIO_TIM2_CH1OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN15) +#define GPIO_TIM2_CH2IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM2_CH2IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN3) +#define GPIO_TIM2_CH2OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM2_CH2OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN3) +#define GPIO_TIM2_CH3IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM2_CH3IN_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN9) +#define GPIO_TIM2_CH3IN_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN10) +#define GPIO_TIM2_CH3OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM2_CH3OUT_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN9) +#define GPIO_TIM2_CH3OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN10) +#define GPIO_TIM2_CH4IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM2_CH4IN_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM2_CH4IN_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN11) +#define GPIO_TIM2_CH4OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM2_CH4OUT_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM2_CH4OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN11) +#define GPIO_TIM2_ETR_1 (GPIO_ALT | GPIO_AF14 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM2_ETR_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN5) +#define GPIO_TIM2_ETR_3 (GPIO_ALT | GPIO_AF14 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN15) + +#define GPIO_TIM3_CH1IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM3_CH1IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM3_CH1IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN6) +#define GPIO_TIM3_CH1OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM3_CH1OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM3_CH1OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN6) +#define GPIO_TIM3_CH2IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN4) +#define GPIO_TIM3_CH2IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM3_CH2IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM3_CH2IN_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN7) +#define GPIO_TIM3_CH2OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN4) +#define GPIO_TIM3_CH2OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM3_CH2OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM3_CH2OUT_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN7) +#define GPIO_TIM3_CH3IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM3_CH3IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN8) +#define GPIO_TIM3_CH3OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM3_CH3OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN8) +#define GPIO_TIM3_CH4IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM3_CH4IN_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM3_CH4IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN9) +#define GPIO_TIM3_CH4OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM3_CH4OUT_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM3_CH4OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN9) +#define GPIO_TIM3_ETR_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN3) +#define GPIO_TIM3_ETR_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN2) + +#define GPIO_TIM4_CH1IN_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM4_CH1IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM4_CH1OUT_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM4_CH1OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM4_CH2IN_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM4_CH2IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM4_CH2OUT_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM4_CH2OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM4_CH3IN_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN13) +#define GPIO_TIM4_CH3IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM4_CH3OUT_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN13) +#define GPIO_TIM4_CH3OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM4_CH4IN (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM4_CH4OUT (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM4_ETR_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN8) +#define GPIO_TIM4_ETR_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN3) + +#define GPIO_TIM5_CH1IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM5_CH1IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN2) +#define GPIO_TIM5_CH1OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM5_CH1OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN2) +#define GPIO_TIM5_CH2IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM5_CH2IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN12) +#define GPIO_TIM5_CH2OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM5_CH2OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN12) +#define GPIO_TIM5_CH3IN (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM5_CH3OUT (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM5_CH4IN (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM5_CH4OUT (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM5_ETR (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN12) + +#define GPIO_TIM8_BKIN2_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM8_BKIN2_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTC | GPIO_PIN9) +#define GPIO_TIM8_BKIN_1 (GPIO_ALT | GPIO_AF9 | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM8_BKIN_2 (GPIO_ALT | GPIO_AF4 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM8_BKIN_3 (GPIO_ALT | GPIO_AF11 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM8_BKIN_4 (GPIO_ALT | GPIO_AF5 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM8_BKIN_5 (GPIO_ALT | GPIO_AF4 | GPIO_PORTD | GPIO_PIN2) +#define GPIO_TIM8_CH1IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN15) +#define GPIO_TIM8_CH1IN_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM8_CH1IN_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN6) +#define GPIO_TIM8_CH1NIN_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM8_CH1NIN_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN3) +#define GPIO_TIM8_CH1NIN_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN10) +#define GPIO_TIM8_CH1NOUT_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM8_CH1NOUT_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN3) +#define GPIO_TIM8_CH1NOUT_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN10) +#define GPIO_TIM8_CH1OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN15) +#define GPIO_TIM8_CH1OUT_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM8_CH1OUT_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN6) +#define GPIO_TIM8_CH2IN_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN14) +#define GPIO_TIM8_CH2IN_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM8_CH2IN_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN7) +#define GPIO_TIM8_CH2NIN_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM8_CH2NIN_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM8_CH2NIN_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN11) +#define GPIO_TIM8_CH2NOUT_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM8_CH2NOUT_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM8_CH2NOUT_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN11) +#define GPIO_TIM8_CH2OUT_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN14) +#define GPIO_TIM8_CH2OUT_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM8_CH2OUT_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN7) +#define GPIO_TIM8_CH3IN_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM8_CH3IN_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN8) +#define GPIO_TIM8_CH3NIN_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM8_CH3NIN_2 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM8_CH3NIN_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN12) +#define GPIO_TIM8_CH3NOUT_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM8_CH3NOUT_2 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM8_CH3NOUT_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN12) +#define GPIO_TIM8_CH3OUT_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM8_CH3OUT_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN8) +#define GPIO_TIM8_CH4IN (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN9) +#define GPIO_TIM8_CH4NIN (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN13) +#define GPIO_TIM8_CH4NOUT (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN13) +#define GPIO_TIM8_CH4OUT (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN9) +#define GPIO_TIM8_ETR_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM8_ETR_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN6) + +#define GPIO_TIM15_BKIN_1 (GPIO_ALT | GPIO_AF9 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_TIM15_BKIN_2 (GPIO_ALT | GPIO_AF2 | GPIO_PORTC | GPIO_PIN5) +#define GPIO_TIM15_CH1IN_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM15_CH1IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN14) +#define GPIO_TIM15_CH1NIN_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM15_CH1NIN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN15) +#define GPIO_TIM15_CH1NOUT_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM15_CH1NOUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN15) +#define GPIO_TIM15_CH1OUT_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM15_CH1OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN14) +#define GPIO_TIM15_CH2IN_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM15_CH2IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN15) +#define GPIO_TIM15_CH2OUT_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM15_CH2OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN15) + +#define GPIO_TIM16_BKIN (GPIO_ALT | GPIO_AF1 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM16_CH1IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM16_CH1IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM16_CH1IN_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM16_CH1IN_4 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM16_CH1NIN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN13) +#define GPIO_TIM16_CH1NIN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM16_CH1NOUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN13) +#define GPIO_TIM16_CH1NOUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM16_CH1OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM16_CH1OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM16_CH1OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM16_CH1OUT_4 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN8) + +#define GPIO_TIM17_BKIN_1 (GPIO_ALT | GPIO_AF1 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM17_BKIN_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM17_CH1IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM17_CH1IN_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM17_CH1IN_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM17_CH1NIN (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM17_CH1NOUT (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM17_CH1OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM17_CH1OUT_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM17_CH1OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN9) + +#define GPIO_TIM20_CH1IN (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN2) +#define GPIO_TIM20_CH1OUT (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN2) +#define GPIO_TIM20_CH2IN (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN2) +#define GPIO_TIM20_CH2OUT (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN2) +#define GPIO_TIM20_CH3IN (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN8) +#define GPIO_TIM20_CH3OUT (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN8) + +/* UARTs/USARTs *************************************************************************************/ + +#define GPIO_USART1_CK (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_USART1_CTS (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_USART1_DE (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_USART1_NSS (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_USART1_RTS (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_USART1_RX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_USART1_RX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_USART1_RX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN5) +#define GPIO_USART1_TX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_USART1_TX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_USART1_TX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN4) + +#define GPIO_USART2_CK_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN4) +#define GPIO_USART2_CK_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_USART2_CTS (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN0) +#define GPIO_USART2_DE (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN1) +#define GPIO_USART2_NSS (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN0) +#define GPIO_USART2_RTS (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN1) +#define GPIO_USART2_RX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_USART2_RX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_USART2_RX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_USART2_TX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN2) +#define GPIO_USART2_TX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_USART2_TX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN3) + +#define GPIO_USART3_CK_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_USART3_CK_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN12) +#define GPIO_USART3_CTS_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_USART3_CTS_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_USART3_DE (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN14) +#define GPIO_USART3_NSS_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_USART3_NSS_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_USART3_RTS (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN14) +#define GPIO_USART3_RX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_USART3_RX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN11) +#define GPIO_USART3_RX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN11) +#define GPIO_USART3_TX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN9) +#define GPIO_USART3_TX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_USART3_TX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN10) + +#define GPIO_UART4_CTS (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_UART4_DE (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_UART4_RTS (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_UART4_RX (GPIO_ALT | GPIO_AF5 | GPIO_PORTC | GPIO_PIN11) +#define GPIO_UART4_TX (GPIO_ALT | GPIO_AF5 | GPIO_PORTC | GPIO_PIN10) + +#define GPIO_UART5_CTS (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_UART5_DE (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_UART5_RTS (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_UART5_RX (GPIO_ALT | GPIO_AF5 | GPIO_PORTD | GPIO_PIN2) +#define GPIO_UART5_TX (GPIO_ALT | GPIO_AF5 | GPIO_PORTC | GPIO_PIN12) + +/* USB Device Full Speed ****************************************************************************/ + +#endif /* __ARCH_ARM_SRC_STM32_HARDWARE_STM32G474RXX_PINMAP_H */ diff --git a/arch/arm/src/stm32/hardware/stm32g474vxx_pinmap.h b/arch/arm/src/stm32/hardware/stm32g474vxx_pinmap.h new file mode 100644 index 0000000000..05d89354b2 --- /dev/null +++ b/arch/arm/src/stm32/hardware/stm32g474vxx_pinmap.h @@ -0,0 +1,1113 @@ +/**************************************************************************************************** + * arch/arm/src/stm32/hardware/stm32g474vxx_pinmap.h + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************************************/ + +#ifndef __ARCH_ARM_SRC_STM32_HARDWARE_STM32G474VXX_PINMAP_H +#define __ARCH_ARM_SRC_STM32_HARDWARE_STM32G474VXX_PINMAP_H + +/**************************************************************************************************** + * Pre-processor Definitions + ****************************************************************************************************/ + +/* Alternate Pin Functions. All members of the STM32G47xxx family share the + * same pin multiplexing (although they differ in the pins physically + * available). + * + * Alternative pin selections are provided with a numeric suffix like _1, _2, + * etc. Drivers, however, will use the pin selection without the numeric + * suffix. Additional definitions are required in the board.h file. For + * example, if CAN1_RX connects via PA11 on some board, then the following + * definitions should appear in the board.h header file for that board: + * + * #define GPIO_CAN1_RX GPIO_CAN1_RX_1 + * + * The driver will then automatically configure PA11 as the CAN1 RX pin. + */ + +/* WARNING!!! WARNING!!! WARNING!!! WARNING!!! WARNING!!! WARNING!!! WARNING!!! + * Additional effort is required to select specific GPIO options such as + * frequency, open-drain/push-pull, and pull-up/down! Just the basics are + * defined for most pins in this file. + */ + +/* ADC - Analog Digital Converter *******************************************************************/ + +#define GPIO_ADC1_IN1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN0) +#define GPIO_ADC1_IN2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_ADC1_IN3 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN2) +#define GPIO_ADC1_IN4 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_ADC1_IN5 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_ADC1_IN6 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN0) +#define GPIO_ADC1_IN7 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN1) +#define GPIO_ADC1_IN8 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN2) +#define GPIO_ADC1_IN9 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN3) +#define GPIO_ADC1_IN10 (GPIO_ANALOG | GPIO_PORTF | GPIO_PIN0) +#define GPIO_ADC1_IN11 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN12) +#define GPIO_ADC1_IN12 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_ADC1_IN14 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN11) +#define GPIO_ADC1_IN15 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) + +#define GPIO_ADC2_IN1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN0) +#define GPIO_ADC2_IN2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_ADC2_IN3 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN6) +#define GPIO_ADC2_IN4 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN7) +#define GPIO_ADC2_IN5 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN4) +#define GPIO_ADC2_IN6 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN0) +#define GPIO_ADC2_IN7 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN1) +#define GPIO_ADC2_IN8 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN2) +#define GPIO_ADC2_IN9 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN3) +#define GPIO_ADC2_IN10 (GPIO_ANALOG | GPIO_PORTF | GPIO_PIN1) +#define GPIO_ADC2_IN11 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_ADC2_IN12 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN2) +#define GPIO_ADC2_IN13 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_ADC2_IN14 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN11) +#define GPIO_ADC2_IN15 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) +#define GPIO_ADC2_IN17 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN4) + +#define GPIO_ADC3_IN1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_ADC3_IN2 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN9) +#define GPIO_ADC3_IN3 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN13) +#define GPIO_ADC3_IN4 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN7) +#define GPIO_ADC3_IN5 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_ADC3_IN6 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN8) +#define GPIO_ADC3_IN7 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN10) +#define GPIO_ADC3_IN8 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN11) +#define GPIO_ADC3_IN9 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN12) +#define GPIO_ADC3_IN10 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN13) +#define GPIO_ADC3_IN11 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN14) +#define GPIO_ADC3_IN12 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) +#define GPIO_ADC3_IN14 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN10) +#define GPIO_ADC3_IN15 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN11) +#define GPIO_ADC3_IN16 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN12) + +#define GPIO_ADC4_IN1 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN14) +#define GPIO_ADC4_IN2 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN15) +#define GPIO_ADC4_IN3 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN12) +#define GPIO_ADC4_IN4 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_ADC4_IN5 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) +#define GPIO_ADC4_IN6 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN8) +#define GPIO_ADC4_IN7 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN10) +#define GPIO_ADC4_IN8 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN11) +#define GPIO_ADC4_IN9 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN12) +#define GPIO_ADC4_IN10 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN13) +#define GPIO_ADC4_IN11 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN14) +#define GPIO_ADC4_IN12 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN8) +#define GPIO_ADC4_IN13 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN9) +#define GPIO_ADC4_IN14 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN10) +#define GPIO_ADC4_IN15 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN11) +#define GPIO_ADC4_IN16 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN12) + +#define GPIO_ADC5_IN1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN8) +#define GPIO_ADC5_IN2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN9) +#define GPIO_ADC5_IN6 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN8) +#define GPIO_ADC5_IN7 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN10) +#define GPIO_ADC5_IN8 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN11) +#define GPIO_ADC5_IN9 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN12) +#define GPIO_ADC5_IN10 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN13) +#define GPIO_ADC5_IN11 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN14) +#define GPIO_ADC5_IN12 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN8) +#define GPIO_ADC5_IN13 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN9) +#define GPIO_ADC5_IN14 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN10) +#define GPIO_ADC5_IN15 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN11) +#define GPIO_ADC5_IN16 (GPIO_ANALOG | GPIO_PORTE | GPIO_PIN12) + +/* COMP - Comparator ********************************************************************************/ + +#define GPIO_COMP1_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN0) +#define GPIO_COMP1_OUT_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_COMP1_OUT_3 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_COMP1_OUT_4 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN8) + +#define GPIO_COMP2_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN2) +#define GPIO_COMP2_OUT_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN7) +#define GPIO_COMP2_OUT_3 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_COMP2_OUT_4 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN9) + +#define GPIO_COMP3_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_COMP3_OUT_2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTB | GPIO_PIN15) +#define GPIO_COMP3_OUT_3 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN2) + +#define GPIO_COMP4_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_COMP4_OUT_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_COMP4_OUT_3 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN14) + +#define GPIO_COMP5_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_COMP5_OUT_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN7) + +#define GPIO_COMP6_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_COMP6_OUT_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN6) + +#define GPIO_COMP7_OUT_1 (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_COMP7_OUT_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN8) + +/* CRS **********************************************************************************************/ + +/* REVISIT: Clock Recovery System (CRS_SYNC signal exposed to pin(s)?) + * Before using the following defines, make sure they are correct! + */ + +#if 0 +# define GPIO_USB_CRS_SYNC (GPIO_ALT | GPIO_AF3 | GPIO_PORTA | GPIO_PIN10) +# define GPIO_UCPD1_CRS_SYNC (GPIO_ALT | GPIO_AF3 | GPIO_PORTB | GPIO_PIN3) +#endif + +/* DAC **********************************************************************************************/ + +#define GPIO_DAC1_OUT1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN4) +#define GPIO_DAC1_OUT2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_DAC2_OUT1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN6) + +/* Clocks outputs ***********************************************************************************/ + +/* MCU clock output */ + +#define GPIO_MCO_1 (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_MCO_2 (GPIO_ALT | GPIO_AF0 | GPIO_PORTG | GPIO_PIN10) + +/* Event outputs ************************************************************************************/ + +#define GPIO_PA0_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN0) +#define GPIO_PA1_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN1) +#define GPIO_PA2_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN2) +#define GPIO_PA3_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_PA4_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN4) +#define GPIO_PA5_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN5) +#define GPIO_PA6_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_PA7_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN7) +#define GPIO_PA8_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_PA9_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_PA10_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_PA11_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_PA12_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_PA13_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_PA14_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_PA15_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTA | GPIO_PIN15) + +#define GPIO_PB0_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN0) +#define GPIO_PB1_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_PB2_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN2) +#define GPIO_PB3_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN3) +#define GPIO_PB4_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_PB5_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_PB6_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_PB7_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_PB8_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_PB9_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN9) +#define GPIO_PB10_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_PB11_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN11) +#define GPIO_PB12_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_PB13_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_PB14_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN14) +#define GPIO_PB15_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTB | GPIO_PIN15) + +#define GPIO_PC0_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN0) +#define GPIO_PC1_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN1) +#define GPIO_PC2_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN2) +#define GPIO_PC3_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN3) +#define GPIO_PC4_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN4) +#define GPIO_PC5_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN5) +#define GPIO_PC6_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN6) +#define GPIO_PC7_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN7) +#define GPIO_PC8_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN8) +#define GPIO_PC9_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN9) +#define GPIO_PC10_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN10) +#define GPIO_PC11_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN11) +#define GPIO_PC12_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN12) +#define GPIO_PC13_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN13) +#define GPIO_PC14_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN14) +#define GPIO_PC15_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTC | GPIO_PIN15) + +#define GPIO_PD0_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN0) +#define GPIO_PD1_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN1) +#define GPIO_PD2_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN2) +#define GPIO_PD3_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN3) +#define GPIO_PD4_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN4) +#define GPIO_PD5_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN5) +#define GPIO_PD6_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN6) +#define GPIO_PD7_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN7) +#define GPIO_PD8_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN8) +#define GPIO_PD9_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN9) +#define GPIO_PD10_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN10) +#define GPIO_PD11_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN11) +#define GPIO_PD12_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN12) +#define GPIO_PD13_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN13) +#define GPIO_PD14_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN14) +#define GPIO_PD15_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTD | GPIO_PIN15) + +#define GPIO_PE0_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN0) +#define GPIO_PE1_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN1) +#define GPIO_PE2_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN2) +#define GPIO_PE3_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN3) +#define GPIO_PE4_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN4) +#define GPIO_PE5_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN5) +#define GPIO_PE6_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN6) +#define GPIO_PE7_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN7) +#define GPIO_PE8_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN8) +#define GPIO_PE9_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN9) +#define GPIO_PE10_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN10) +#define GPIO_PE11_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN11) +#define GPIO_PE12_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN12) +#define GPIO_PE13_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN13) +#define GPIO_PE14_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN14) +#define GPIO_PE15_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTE | GPIO_PIN15) + +#define GPIO_PF0_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTF | GPIO_PIN0) +#define GPIO_PF1_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTF | GPIO_PIN1) +#define GPIO_PF2_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTF | GPIO_PIN2) +#define GPIO_PF9_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTF | GPIO_PIN9) +#define GPIO_PF10_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTF | GPIO_PIN10) + +#define GPIO_PG10_EVENTOUT (GPIO_ALT | GPIO_AF15 | GPIO_PORTG | GPIO_PIN10) + +/* FDCAN ********************************************************************************************/ + +#define GPIO_FDCAN1_RX_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN11) +#define GPIO_FDCAN1_RX_2 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN8) +#define GPIO_FDCAN1_TX_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN12) +#define GPIO_FDCAN1_TX_2 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN9) + +#define GPIO_FDCAN2_RX_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN5) +#define GPIO_FDCAN2_RX_2 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN12) +#define GPIO_FDCAN2_TX_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN6) +#define GPIO_FDCAN2_TX_2 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN13) + +#define GPIO_FDCAN3_RX_1 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN8) +#define GPIO_FDCAN3_RX_2 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN3) +#define GPIO_FDCAN3_TX_1 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN15) +#define GPIO_FDCAN3_TX_2 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN4) + +/* FMC/FSMC - Flexible Static Memory Controller *****************************************************/ + +#define GPIO_FMC_A0 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTF | GPIO_PIN10) +#define GPIO_FMC_A16 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN11) +#define GPIO_FMC_A17 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN12) +#define GPIO_FMC_A18 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN13) +#define GPIO_FMC_A19 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN3) +#define GPIO_FMC_A2 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTF | GPIO_PIN2) +#define GPIO_FMC_A20 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN4) +#define GPIO_FMC_A21 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN5) +#define GPIO_FMC_A22 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN6) +#define GPIO_FMC_A23 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN2) +#define GPIO_FMC_A25 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTF | GPIO_PIN9) +#define GPIO_FMC_CLK (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN3) +#define GPIO_FMC_D0 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN14) +#define GPIO_FMC_D1 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN15) +#define GPIO_FMC_D10 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN13) +#define GPIO_FMC_D11 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN14) +#define GPIO_FMC_D12 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN15) +#define GPIO_FMC_D13 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN8) +#define GPIO_FMC_D14 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN9) +#define GPIO_FMC_D15 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN10) +#define GPIO_FMC_D2 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN0) +#define GPIO_FMC_D3 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN1) +#define GPIO_FMC_D4 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN7) +#define GPIO_FMC_D5 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN8) +#define GPIO_FMC_D6 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN9) +#define GPIO_FMC_D7 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN10) +#define GPIO_FMC_D8 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN11) +#define GPIO_FMC_D9 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN12) +#define GPIO_FMC_DA0 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN14) +#define GPIO_FMC_DA1 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN15) +#define GPIO_FMC_DA10 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN13) +#define GPIO_FMC_DA11 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN14) +#define GPIO_FMC_DA12 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN15) +#define GPIO_FMC_DA13 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN8) +#define GPIO_FMC_DA14 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN9) +#define GPIO_FMC_DA15 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN10) +#define GPIO_FMC_DA2 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN0) +#define GPIO_FMC_DA3 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN1) +#define GPIO_FMC_DA4 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN7) +#define GPIO_FMC_DA5 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN8) +#define GPIO_FMC_DA6 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN9) +#define GPIO_FMC_DA7 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN10) +#define GPIO_FMC_DA8 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN11) +#define GPIO_FMC_DA9 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN12) +#define GPIO_FMC_NBL0 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN0) +#define GPIO_FMC_NBL1 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTE | GPIO_PIN1) +#define GPIO_FMC_NCE (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN7) +#define GPIO_FMC_NE1 (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN7) +#define GPIO_FMC_NL (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTB | GPIO_PIN7) +#define GPIO_FMC_NOE (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN4) +#define GPIO_FMC_NWAIT (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN6) +#define GPIO_FMC_NWE (GPIO_ALT | GPIO_PULLUP | GPIO_AF12 | GPIO_SPEED_120MHz | GPIO_PORTD | GPIO_PIN5) + +/* HRTIM - High-Resolution Timer ********************************************************************/ + +#define GPIO_HRTIM1_CHA1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_HRTIM1_CHA2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_HRTIM1_CHB1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_HRTIM1_CHB2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_HRTIM1_CHC1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_HRTIM1_CHC2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_HRTIM1_CHD1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN14) +#define GPIO_HRTIM1_CHD2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN15) +#define GPIO_HRTIM1_CHE1 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN8) +#define GPIO_HRTIM1_CHE2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN9) +#define GPIO_HRTIM1_CHF1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTC | GPIO_PIN6) +#define GPIO_HRTIM1_CHF2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTC | GPIO_PIN7) +#define GPIO_HRTIM1_EEV1 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN12) +#define GPIO_HRTIM1_EEV10_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTC | GPIO_PIN5) +#define GPIO_HRTIM1_EEV10_2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN6) +#define GPIO_HRTIM1_EEV2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN11) +#define GPIO_HRTIM1_EEV3 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_HRTIM1_EEV4 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_HRTIM1_EEV5 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN9) +#define GPIO_HRTIM1_EEV6 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_HRTIM1_EEV7 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_HRTIM1_EEV8 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_HRTIM1_EEV9 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN3) +#define GPIO_HRTIM1_FLT1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_HRTIM1_FLT2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_HRTIM1_FLT3 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_HRTIM1_FLT4 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN11) +#define GPIO_HRTIM1_FLT5_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN0) +#define GPIO_HRTIM1_FLT5_2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN7) +#define GPIO_HRTIM1_FLT6 (GPIO_ALT | GPIO_AF13 | GPIO_PORTC | GPIO_PIN10) +#define GPIO_HRTIM1_SCIN_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN2) +#define GPIO_HRTIM1_SCIN_2 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_HRTIM1_SCOUT_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_HRTIM1_SCOUT_2 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN3) + +/* I2C **********************************************************************************************/ + +#define GPIO_I2C1_SCL_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN13) +#define GPIO_I2C1_SCL_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN15) +#define GPIO_I2C1_SCL_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTB | GPIO_PIN8) +#define GPIO_I2C1_SDA_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN14) +#define GPIO_I2C1_SDA_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTB | GPIO_PIN7) +#define GPIO_I2C1_SDA_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTB | GPIO_PIN9) +#define GPIO_I2C1_SMBA (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN5) +#define GPIO_I2C2_SCL_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN9) +#define GPIO_I2C2_SCL_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTC | GPIO_PIN4) +#define GPIO_I2C2_SCL_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTF | GPIO_PIN6) +#define GPIO_I2C2_SDA_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN8) +#define GPIO_I2C2_SDA_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTF | GPIO_PIN0) +#define GPIO_I2C2_SMBA_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN10) +#define GPIO_I2C2_SMBA_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN12) +#define GPIO_I2C2_SMBA_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTF | GPIO_PIN2) +#define GPIO_I2C3_SCL_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN8) +#define GPIO_I2C3_SCL_2 (GPIO_ALT | GPIO_AF8 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTC | GPIO_PIN8) +#define GPIO_I2C3_SDA_1 (GPIO_ALT | GPIO_AF8 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTB | GPIO_PIN5) +#define GPIO_I2C3_SDA_2 (GPIO_ALT | GPIO_AF8 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTC | GPIO_PIN9) +#define GPIO_I2C3_SDA_3 (GPIO_ALT | GPIO_AF8 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTC | GPIO_PIN11) +#define GPIO_I2C3_SMBA_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN9) +#define GPIO_I2C3_SMBA_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN2) +#define GPIO_I2C4_SCL_1 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTA | GPIO_PIN13) +#define GPIO_I2C4_SCL_2 (GPIO_ALT | GPIO_AF8 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTC | GPIO_PIN6) +#define GPIO_I2C4_SDA_1 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTB | GPIO_PIN7) +#define GPIO_I2C4_SDA_2 (GPIO_ALT | GPIO_AF8 | GPIO_SPEED_50MHz | GPIO_OPENDRAIN | GPIO_PORTC | GPIO_PIN7) +#define GPIO_I2C4_SMBA_1 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN14) +#define GPIO_I2C4_SMBA_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN11) + +/* I2S **********************************************************************************************/ + +#define GPIO_I2S_CKIN_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_I2S_CKIN_2 (GPIO_ALT | GPIO_AF5 | GPIO_PORTC | GPIO_PIN9) + +#define GPIO_I2S2_CK_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_I2S2_CK_2 (GPIO_ALT | GPIO_AF5 | GPIO_PORTF | GPIO_PIN1) +#define GPIO_I2S2_MCK_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_I2S2_MCK_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTC | GPIO_PIN6) +#define GPIO_I2S2_SD_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_I2S2_SD_2 (GPIO_ALT | GPIO_AF5 | GPIO_PORTB | GPIO_PIN15) +#define GPIO_I2S2_WS_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_I2S2_WS_2 (GPIO_ALT | GPIO_AF5 | GPIO_PORTF | GPIO_PIN0) + +#define GPIO_I2S3_CK_1 (GPIO_ALT | GPIO_AF6 | GPIO_PORTB | GPIO_PIN3) +#define GPIO_I2S3_CK_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTC | GPIO_PIN10) +#define GPIO_I2S3_MCK_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_I2S3_MCK_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTC | GPIO_PIN7) +#define GPIO_I2S3_SD_1 (GPIO_ALT | GPIO_AF6 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_I2S3_SD_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTC | GPIO_PIN12) +#define GPIO_I2S3_WS_1 (GPIO_ALT | GPIO_AF6 | GPIO_PORTA | GPIO_PIN4) +#define GPIO_I2S3_WS_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTA | GPIO_PIN15) + +/* IR - Infrared with TIM16 channel 1 and TIM17 channel 1 *******************************************/ + +#define GPIO_IR_OUT_1 (GPIO_ALT | GPIO_AF5 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_IR_OUT_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTB | GPIO_PIN9) + +/* LPTIM - Low Power Timer **************************************************************************/ + +#define GPIO_LPTIM1_ETR_1 (GPIO_ALT | GPIO_AF11 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_LPTIM1_ETR_2 (GPIO_ALT | GPIO_AF1 | GPIO_PORTC | GPIO_PIN3) +#define GPIO_LPTIM1_IN1_1 (GPIO_ALT | GPIO_AF11 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_LPTIM1_IN1_2 (GPIO_ALT | GPIO_AF1 | GPIO_PORTC | GPIO_PIN0) +#define GPIO_LPTIM1_IN2_1 (GPIO_ALT | GPIO_AF11 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_LPTIM1_IN2_2 (GPIO_ALT | GPIO_AF1 | GPIO_PORTC | GPIO_PIN2) +#define GPIO_LPTIM1_OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_LPTIM1_OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_PORTB | GPIO_PIN2) +#define GPIO_LPTIM1_OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_PORTC | GPIO_PIN1) + +/* LPUART - Low-Power Universal Asynchronous Receiver Transmitter ***********************************/ + +#define GPIO_LPUART1_CTS_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_LPUART1_CTS_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_LPUART1_DE_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_LPUART1_DE_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_LPUART1_RTS_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_LPUART1_RTS_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_LPUART1_RX_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_LPUART1_RX_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_LPUART1_RX_3 (GPIO_ALT | GPIO_AF8 | GPIO_PORTC | GPIO_PIN0) +#define GPIO_LPUART1_TX_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN2) +#define GPIO_LPUART1_TX_2 (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN11) +#define GPIO_LPUART1_TX_3 (GPIO_ALT | GPIO_AF8 | GPIO_PORTC | GPIO_PIN1) + +/* JTAG *********************************************************************************************/ + +#define GPIO_JTCK (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_JTDI (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_JTDO (GPIO_ALT | GPIO_AF0 | GPIO_PORTB | GPIO_PIN3) +#define GPIO_JTMS (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_NJTRST (GPIO_ALT | GPIO_AF0 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_SWCLK (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_SWDIO (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN13) + +/* OPAMP ********************************************************************************************/ + +#define GPIO_OPAMP1_VINM0_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINM0_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP1_VINM1_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINM1_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP1_VINM_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINM_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP1_VINM_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINM_SEC_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP1_VINP_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP1_VINP_2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINP_3 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN7) +#define GPIO_OPAMP1_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP1_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP1_VINP_SEC_3 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN7) +#define GPIO_OPAMP1_VOUT (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN2) + +#define GPIO_OPAMP2_VINM0_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_OPAMP2_VINM0_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP2_VINM1_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_OPAMP2_VINM1_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP2_VINM_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_OPAMP2_VINM_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP2_VINM_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN5) +#define GPIO_OPAMP2_VINM_SEC_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN5) +#define GPIO_OPAMP2_VINP_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN7) +#define GPIO_OPAMP2_VINP_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) +#define GPIO_OPAMP2_VINP_3 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_OPAMP2_VINP_4 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN14) +#define GPIO_OPAMP2_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN7) +#define GPIO_OPAMP2_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) +#define GPIO_OPAMP2_VINP_SEC_3 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_OPAMP2_VINP_SEC_4 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN14) +#define GPIO_OPAMP2_VOUT (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN6) + +#define GPIO_OPAMP3_VINM0_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN2) +#define GPIO_OPAMP3_VINM0_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP3_VINM1_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN2) +#define GPIO_OPAMP3_VINM1_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP3_VINM_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN2) +#define GPIO_OPAMP3_VINM_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP3_VINM_SEC_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN2) +#define GPIO_OPAMP3_VINM_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP3_VINP_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP3_VINP_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) +#define GPIO_OPAMP3_VINP_3 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP3_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP3_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN0) +#define GPIO_OPAMP3_VINP_SEC_3 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP3_VOUT (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) + +#define GPIO_OPAMP4_VINM0_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP4_VINM0_2 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN8) +#define GPIO_OPAMP4_VINM1_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP4_VINM1_2 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN8) +#define GPIO_OPAMP4_VINM_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP4_VINM_2 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN8) +#define GPIO_OPAMP4_VINM_SEC_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN10) +#define GPIO_OPAMP4_VINM_SEC_2 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN8) +#define GPIO_OPAMP4_VINP_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN11) +#define GPIO_OPAMP4_VINP_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP4_VINP_3 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN11) +#define GPIO_OPAMP4_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN11) +#define GPIO_OPAMP4_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP4_VINP_SEC_3 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN11) +#define GPIO_OPAMP4_VOUT (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN12) + +#define GPIO_OPAMP5_VINM0_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP5_VINM0_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) +#define GPIO_OPAMP5_VINM1_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP5_VINM1_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) +#define GPIO_OPAMP5_VINM_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP5_VINM_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) +#define GPIO_OPAMP5_VINM_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN3) +#define GPIO_OPAMP5_VINM_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN15) +#define GPIO_OPAMP5_VINP_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_OPAMP5_VINP_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN3) +#define GPIO_OPAMP5_VINP_3 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN12) +#define GPIO_OPAMP5_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN14) +#define GPIO_OPAMP5_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTC | GPIO_PIN3) +#define GPIO_OPAMP5_VINP_SEC_3 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN12) +#define GPIO_OPAMP5_VOUT (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN8) + +#define GPIO_OPAMP6_VINM0_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP6_VINM0_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_OPAMP6_VINM1_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP6_VINM1_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_OPAMP6_VINM_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP6_VINM_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_OPAMP6_VINM_SEC_1 (GPIO_ANALOG | GPIO_PORTA | GPIO_PIN1) +#define GPIO_OPAMP6_VINM_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN1) +#define GPIO_OPAMP6_VINP_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN12) +#define GPIO_OPAMP6_VINP_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP6_VINP_3 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN9) +#define GPIO_OPAMP6_VINP_SEC_1 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN12) +#define GPIO_OPAMP6_VINP_SEC_2 (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN13) +#define GPIO_OPAMP6_VINP_SEC_3 (GPIO_ANALOG | GPIO_PORTD | GPIO_PIN9) +#define GPIO_OPAMP6_VOUT (GPIO_ANALOG | GPIO_PORTB | GPIO_PIN11) + +/* QUADSPI ******************************************************************************************/ + +#define GPIO_QUADSPI1_BK1_IO0_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN1) +#define GPIO_QUADSPI1_BK1_IO0_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTE | GPIO_PIN12) +#define GPIO_QUADSPI1_BK1_IO1_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN0) +#define GPIO_QUADSPI1_BK1_IO1_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTE | GPIO_PIN13) +#define GPIO_QUADSPI1_BK1_IO1_3 (GPIO_ALT | GPIO_AF10 | GPIO_PORTF | GPIO_PIN9) +#define GPIO_QUADSPI1_BK1_IO2_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTA | GPIO_PIN7) +#define GPIO_QUADSPI1_BK1_IO2_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTE | GPIO_PIN14) +#define GPIO_QUADSPI1_BK1_IO3_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_QUADSPI1_BK1_IO3_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTE | GPIO_PIN15) +#define GPIO_QUADSPI1_BK1_NCS_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTA | GPIO_PIN2) +#define GPIO_QUADSPI1_BK1_NCS_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN11) +#define GPIO_QUADSPI1_BK1_NCS_3 (GPIO_ALT | GPIO_AF10 | GPIO_PORTE | GPIO_PIN11) +#define GPIO_QUADSPI1_BK2_IO0_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTC | GPIO_PIN1) +#define GPIO_QUADSPI1_BK2_IO0_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTD | GPIO_PIN4) +#define GPIO_QUADSPI1_BK2_IO1_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN2) +#define GPIO_QUADSPI1_BK2_IO1_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTC | GPIO_PIN2) +#define GPIO_QUADSPI1_BK2_IO1_3 (GPIO_ALT | GPIO_AF10 | GPIO_PORTD | GPIO_PIN5) +#define GPIO_QUADSPI1_BK2_IO2_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTC | GPIO_PIN3) +#define GPIO_QUADSPI1_BK2_IO2_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTD | GPIO_PIN6) +#define GPIO_QUADSPI1_BK2_IO3_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTC | GPIO_PIN4) +#define GPIO_QUADSPI1_BK2_IO3_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTD | GPIO_PIN7) +#define GPIO_QUADSPI1_BK2_NCS (GPIO_ALT | GPIO_AF10 | GPIO_PORTD | GPIO_PIN3) +#define GPIO_QUADSPI1_CLK_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_QUADSPI1_CLK_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_QUADSPI1_CLK_3 (GPIO_ALT | GPIO_AF10 | GPIO_PORTE | GPIO_PIN10) +#define GPIO_QUADSPI1_CLK_4 (GPIO_ALT | GPIO_AF10 | GPIO_PORTF | GPIO_PIN10) + +/* RTC **********************************************************************************************/ + +#define GPIO_RTC_OUT2 (GPIO_ALT | GPIO_AF0 | GPIO_PORTB | GPIO_PIN2) +#define GPIO_RTC_REFIN_1 (GPIO_ALT | GPIO_AF0 | GPIO_PORTA | GPIO_PIN1) +#define GPIO_RTC_REFIN_2 (GPIO_ALT | GPIO_AF0 | GPIO_PORTB | GPIO_PIN15) + +#if 0 + +/* REVISIT: How do you actually enable OUT1, TAMP1, TAMP2, TAMP3, TS? The + * datasheet (DS12288 Rev 2, page 54) shows OUT1, TS, and TAMP1 as "additional + * functions" for PC13 on all STM32G474(C-M-Q-R-V)xxx P/Ns, but the alternate + * function table (on page 72) makes no mention of these. Meanwhile, page 56 + * shows TAMP2 as an "additional function" but the same conundrum applies (for + * now). Granted, these are in the "additional function" column, not the + * "alternate function" column. + */ + +# define GPIO_RTC_OUT1 (GPIO_PORTC | GPIO_PIN13) +# define GPIO_RTC_TS (GPIO_PORTC | GPIO_PIN13) +# define GPIO_RTC_TAMP1 (GPIO_PORTC | GPIO_PIN13) +# define GPIO_RTC_TAMP2 (GPIO_PORTA | GPIO_PIN0) +# define GPIO_RTC_TAMP3 (GPIO_PORTE | GPIO_PIN6) + +#endif + +/* SAI - Serial Audio Interface *********************************************************************/ + +#define GPIO_SAI1_CK1_1 (GPIO_ALT | GPIO_AF3 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_SAI1_CK1_2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_SAI1_CK1_3 (GPIO_ALT | GPIO_AF3 | GPIO_PORTE | GPIO_PIN2) +#define GPIO_SAI1_CK2_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_SAI1_CK2_2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTE | GPIO_PIN5) +#define GPIO_SAI1_D1_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_SAI1_D1_2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN3) +#define GPIO_SAI1_D1_3 (GPIO_ALT | GPIO_AF3 | GPIO_PORTD | GPIO_PIN6) +#define GPIO_SAI1_D1_4 (GPIO_ALT | GPIO_AF3 | GPIO_PORTE | GPIO_PIN6) +#define GPIO_SAI1_D2_1 (GPIO_ALT | GPIO_AF3 | GPIO_PORTB | GPIO_PIN9) +#define GPIO_SAI1_D2_2 (GPIO_ALT | GPIO_AF3 | GPIO_PORTE | GPIO_PIN4) +#define GPIO_SAI1_D3_1 (GPIO_ALT | GPIO_AF3 | GPIO_PORTC | GPIO_PIN5) +#define GPIO_SAI1_D3_2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTF | GPIO_PIN10) +#define GPIO_SAI1_FS_A_1 (GPIO_ALT | GPIO_AF14 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_SAI1_FS_A_2 (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN9) +#define GPIO_SAI1_FS_A_3 (GPIO_ALT | GPIO_AF13 | GPIO_PORTE | GPIO_PIN4) +#define GPIO_SAI1_FS_B_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN4) +#define GPIO_SAI1_FS_B_2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_SAI1_FS_B_3 (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_SAI1_FS_B_4 (GPIO_ALT | GPIO_AF13 | GPIO_PORTE | GPIO_PIN9) +#define GPIO_SAI1_FS_B_5 (GPIO_ALT | GPIO_AF13 | GPIO_PORTF | GPIO_PIN9) +#define GPIO_SAI1_MCLK_A_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_SAI1_MCLK_A_2 (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_SAI1_MCLK_A_3 (GPIO_ALT | GPIO_AF13 | GPIO_PORTE | GPIO_PIN2) +#define GPIO_SAI1_MCLK_B_1 (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_SAI1_MCLK_B_2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTE | GPIO_PIN10) +#define GPIO_SAI1_SCK_A_1 (GPIO_ALT | GPIO_AF14 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_SAI1_SCK_A_2 (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_SAI1_SCK_A_3 (GPIO_ALT | GPIO_AF13 | GPIO_PORTE | GPIO_PIN5) +#define GPIO_SAI1_SCK_B_1 (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN3) +#define GPIO_SAI1_SCK_B_2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTE | GPIO_PIN8) +#define GPIO_SAI1_SD_A_1 (GPIO_ALT | GPIO_AF14 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_SAI1_SD_A_2 (GPIO_ALT | GPIO_AF13 | GPIO_PORTC | GPIO_PIN1) +#define GPIO_SAI1_SD_A_3 (GPIO_ALT | GPIO_AF13 | GPIO_PORTC | GPIO_PIN3) +#define GPIO_SAI1_SD_A_4 (GPIO_ALT | GPIO_AF13 | GPIO_PORTD | GPIO_PIN6) +#define GPIO_SAI1_SD_A_5 (GPIO_ALT | GPIO_AF13 | GPIO_PORTE | GPIO_PIN6) +#define GPIO_SAI1_SD_B_1 (GPIO_ALT | GPIO_AF13 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_SAI1_SD_B_2 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_SAI1_SD_B_3 (GPIO_ALT | GPIO_AF13 | GPIO_PORTE | GPIO_PIN3) +#define GPIO_SAI1_SD_B_4 (GPIO_ALT | GPIO_AF13 | GPIO_PORTE | GPIO_PIN7) + +/* SPI - Serial Peripheral Interface ****************************************************************/ + +#define GPIO_SPI1_MISO_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN6) +#define GPIO_SPI1_MISO_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN4) +#define GPIO_SPI1_MOSI_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN7) +#define GPIO_SPI1_MOSI_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN5) +#define GPIO_SPI1_NSS_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN4) +#define GPIO_SPI1_NSS_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN15) +#define GPIO_SPI1_SCK_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN5) +#define GPIO_SPI1_SCK_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN3) + +#define GPIO_SPI2_MISO_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN10) +#define GPIO_SPI2_MISO_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN14) +#define GPIO_SPI2_MOSI_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN11) +#define GPIO_SPI2_MOSI_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN15) +#define GPIO_SPI2_NSS_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN12) +#define GPIO_SPI2_NSS_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTF | GPIO_PIN0) +#define GPIO_SPI2_NSS_3 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTF | GPIO_PIN0) +#define GPIO_SPI2_SCK_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN13) +#define GPIO_SPI2_SCK_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTF | GPIO_PIN1) +#define GPIO_SPI2_SCK_3 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTF | GPIO_PIN9) +#define GPIO_SPI2_SCK_4 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTF | GPIO_PIN10) + +#define GPIO_SPI3_MISO_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN4) +#define GPIO_SPI3_MISO_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTC | GPIO_PIN11) +#define GPIO_SPI3_MOSI_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN5) +#define GPIO_SPI3_MOSI_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTC | GPIO_PIN12) +#define GPIO_SPI3_NSS_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN4) +#define GPIO_SPI3_NSS_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTA | GPIO_PIN15) +#define GPIO_SPI3_SCK_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTB | GPIO_PIN3) +#define GPIO_SPI3_SCK_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PORTC | GPIO_PIN10) + +#define GPIO_SPI4_MISO_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTE | GPIO_PIN5) +#define GPIO_SPI4_MISO_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTE | GPIO_PIN13) +#define GPIO_SPI4_MOSI_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTE | GPIO_PIN6) +#define GPIO_SPI4_MOSI_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTE | GPIO_PIN14) +#define GPIO_SPI4_NSS_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTE | GPIO_PIN3) +#define GPIO_SPI4_NSS_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTE | GPIO_PIN4) +#define GPIO_SPI4_NSS_3 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTE | GPIO_PIN11) +#define GPIO_SPI4_SCK_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTE | GPIO_PIN2) +#define GPIO_SPI4_SCK_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PORTE | GPIO_PIN12) + +/* TIM - Timers *************************************************************************************/ + +#define GPIO_TIM1_BKIN2_1 (GPIO_ALT | GPIO_AF12 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM1_BKIN2_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTC | GPIO_PIN3) +#define GPIO_TIM1_BKIN2_3 (GPIO_ALT | GPIO_AF6 | GPIO_PORTE | GPIO_PIN14) +#define GPIO_TIM1_BKIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM1_BKIN_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_TIM1_BKIN_3 (GPIO_ALT | GPIO_AF9 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_TIM1_BKIN_4 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM1_BKIN_5 (GPIO_ALT | GPIO_AF12 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_TIM1_BKIN_6 (GPIO_ALT | GPIO_AF6 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_TIM1_BKIN_7 (GPIO_ALT | GPIO_AF2 | GPIO_PORTC | GPIO_PIN13) +#define GPIO_TIM1_BKIN_8 (GPIO_ALT | GPIO_AF2 | GPIO_PORTE | GPIO_PIN15) +#define GPIO_TIM1_CH1IN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN8) +#define GPIO_TIM1_CH1IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN0) +#define GPIO_TIM1_CH1IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN9) +#define GPIO_TIM1_CH1NIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM1_CH1NIN_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM1_CH1NIN_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN13) +#define GPIO_TIM1_CH1NIN_4 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN13) +#define GPIO_TIM1_CH1NIN_5 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN8) +#define GPIO_TIM1_CH1NOUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM1_CH1NOUT_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM1_CH1NOUT_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN13) +#define GPIO_TIM1_CH1NOUT_4 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN13) +#define GPIO_TIM1_CH1NOUT_5 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN8) +#define GPIO_TIM1_CH1OUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN8) +#define GPIO_TIM1_CH1OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN0) +#define GPIO_TIM1_CH1OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN9) +#define GPIO_TIM1_CH2IN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN9) +#define GPIO_TIM1_CH2IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN1) +#define GPIO_TIM1_CH2IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN11) +#define GPIO_TIM1_CH2NIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM1_CH2NIN_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM1_CH2NIN_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN14) +#define GPIO_TIM1_CH2NIN_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN10) +#define GPIO_TIM1_CH2NOUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM1_CH2NOUT_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM1_CH2NOUT_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN14) +#define GPIO_TIM1_CH2NOUT_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN10) +#define GPIO_TIM1_CH2OUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN9) +#define GPIO_TIM1_CH2OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN1) +#define GPIO_TIM1_CH2OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN11) +#define GPIO_TIM1_CH3IN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM1_CH3IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN2) +#define GPIO_TIM1_CH3IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN13) +#define GPIO_TIM1_CH3NIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM1_CH3NIN_2 (GPIO_ALT | GPIO_AF12 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM1_CH3NIN_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN15) +#define GPIO_TIM1_CH3NIN_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN12) +#define GPIO_TIM1_CH3NIN_5 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTF | GPIO_PIN0) +#define GPIO_TIM1_CH3NOUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM1_CH3NOUT_2 (GPIO_ALT | GPIO_AF12 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM1_CH3NOUT_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN15) +#define GPIO_TIM1_CH3NOUT_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN12) +#define GPIO_TIM1_CH3NOUT_5 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTF | GPIO_PIN0) +#define GPIO_TIM1_CH3OUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM1_CH3OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN2) +#define GPIO_TIM1_CH3OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN13) +#define GPIO_TIM1_CH4IN_1 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM1_CH4IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN3) +#define GPIO_TIM1_CH4IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN14) +#define GPIO_TIM1_CH4NIN (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN5) +#define GPIO_TIM1_CH4NIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN5) +#define GPIO_TIM1_CH4NIN_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN15) +#define GPIO_TIM1_CH4NOUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN5) +#define GPIO_TIM1_CH4NOUT_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN15) +#define GPIO_TIM1_CH4OUT_1 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM1_CH4OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN3) +#define GPIO_TIM1_CH4OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN14) +#define GPIO_TIM1_ETR_1 (GPIO_ALT | GPIO_AF11 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM1_ETR_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN4) +#define GPIO_TIM1_ETR_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN7) + +#define GPIO_TIM2_CH1IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM2_CH1IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN5) +#define GPIO_TIM2_CH1IN_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN15) +#define GPIO_TIM2_CH1IN_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN3) +#define GPIO_TIM2_CH1OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM2_CH1OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN5) +#define GPIO_TIM2_CH1OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN15) +#define GPIO_TIM2_CH1OUT_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN3) +#define GPIO_TIM2_CH2IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM2_CH2IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN3) +#define GPIO_TIM2_CH2IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN4) +#define GPIO_TIM2_CH2OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM2_CH2OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN3) +#define GPIO_TIM2_CH2OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN4) +#define GPIO_TIM2_CH3IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM2_CH3IN_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN9) +#define GPIO_TIM2_CH3IN_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN10) +#define GPIO_TIM2_CH3IN_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN7) +#define GPIO_TIM2_CH3OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM2_CH3OUT_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN9) +#define GPIO_TIM2_CH3OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN10) +#define GPIO_TIM2_CH3OUT_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN7) +#define GPIO_TIM2_CH4IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM2_CH4IN_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM2_CH4IN_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN11) +#define GPIO_TIM2_CH4IN_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN6) +#define GPIO_TIM2_CH4OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM2_CH4OUT_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM2_CH4OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN11) +#define GPIO_TIM2_CH4OUT_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN6) +#define GPIO_TIM2_ETR_1 (GPIO_ALT | GPIO_AF14 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM2_ETR_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN5) +#define GPIO_TIM2_ETR_3 (GPIO_ALT | GPIO_AF14 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN15) +#define GPIO_TIM2_ETR_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN3) + +#define GPIO_TIM3_CH1IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM3_CH1IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM3_CH1IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN6) +#define GPIO_TIM3_CH1IN_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN2) +#define GPIO_TIM3_CH1OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM3_CH1OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM3_CH1OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN6) +#define GPIO_TIM3_CH1OUT_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN2) +#define GPIO_TIM3_CH2IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN4) +#define GPIO_TIM3_CH2IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM3_CH2IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM3_CH2IN_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN7) +#define GPIO_TIM3_CH2IN_5 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN3) +#define GPIO_TIM3_CH2OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN4) +#define GPIO_TIM3_CH2OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM3_CH2OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM3_CH2OUT_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN7) +#define GPIO_TIM3_CH2OUT_5 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN3) +#define GPIO_TIM3_CH3IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM3_CH3IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN8) +#define GPIO_TIM3_CH3IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN4) +#define GPIO_TIM3_CH3OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM3_CH3OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN8) +#define GPIO_TIM3_CH3OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN4) +#define GPIO_TIM3_CH4IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM3_CH4IN_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM3_CH4IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN9) +#define GPIO_TIM3_CH4IN_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN5) +#define GPIO_TIM3_CH4OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM3_CH4OUT_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM3_CH4OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN9) +#define GPIO_TIM3_CH4OUT_4 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN5) +#define GPIO_TIM3_ETR_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN3) +#define GPIO_TIM3_ETR_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN2) + +#define GPIO_TIM4_CH1IN_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM4_CH1IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM4_CH1IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN12) +#define GPIO_TIM4_CH1OUT_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN11) +#define GPIO_TIM4_CH1OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM4_CH1OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN12) +#define GPIO_TIM4_CH2IN_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM4_CH2IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM4_CH2IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN13) +#define GPIO_TIM4_CH2OUT_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM4_CH2OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM4_CH2OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN13) +#define GPIO_TIM4_CH3IN_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN13) +#define GPIO_TIM4_CH3IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM4_CH3IN_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN14) +#define GPIO_TIM4_CH3OUT_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN13) +#define GPIO_TIM4_CH3OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM4_CH3OUT_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN14) +#define GPIO_TIM4_CH4IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM4_CH4IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN15) +#define GPIO_TIM4_CH4OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM4_CH4OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN15) +#define GPIO_TIM4_ETR_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN8) +#define GPIO_TIM4_ETR_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN3) +#define GPIO_TIM4_ETR_3 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN0) + +#define GPIO_TIM5_CH1IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM5_CH1IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN2) +#define GPIO_TIM5_CH1OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM5_CH1OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN2) +#define GPIO_TIM5_CH2IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM5_CH2IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN12) +#define GPIO_TIM5_CH2OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM5_CH2OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN12) +#define GPIO_TIM5_CH3IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM5_CH3IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN8) +#define GPIO_TIM5_CH3OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM5_CH3OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN8) +#define GPIO_TIM5_CH4IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM5_CH4IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN9) +#define GPIO_TIM5_CH4IN_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTF | GPIO_PIN9) +#define GPIO_TIM5_CH4OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM5_CH4OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN9) +#define GPIO_TIM5_CH4OUT_3 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTF | GPIO_PIN9) +#define GPIO_TIM5_ETR_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN12) +#define GPIO_TIM5_ETR_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN11) + +#define GPIO_TIM8_BKIN2_1 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM8_BKIN2_2 (GPIO_ALT | GPIO_AF6 | GPIO_PORTC | GPIO_PIN9) +#define GPIO_TIM8_BKIN2_3 (GPIO_ALT | GPIO_AF6 | GPIO_PORTD | GPIO_PIN1) +#define GPIO_TIM8_BKIN_1 (GPIO_ALT | GPIO_AF9 | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM8_BKIN_2 (GPIO_ALT | GPIO_AF4 | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM8_BKIN_3 (GPIO_ALT | GPIO_AF11 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM8_BKIN_4 (GPIO_ALT | GPIO_AF5 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM8_BKIN_5 (GPIO_ALT | GPIO_AF4 | GPIO_PORTD | GPIO_PIN2) +#define GPIO_TIM8_CH1IN_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN15) +#define GPIO_TIM8_CH1IN_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM8_CH1IN_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN6) +#define GPIO_TIM8_CH1NIN_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM8_CH1NIN_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN3) +#define GPIO_TIM8_CH1NIN_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN10) +#define GPIO_TIM8_CH1NOUT_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM8_CH1NOUT_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN3) +#define GPIO_TIM8_CH1NOUT_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN10) +#define GPIO_TIM8_CH1OUT_1 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN15) +#define GPIO_TIM8_CH1OUT_2 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM8_CH1OUT_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN6) +#define GPIO_TIM8_CH2IN_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN14) +#define GPIO_TIM8_CH2IN_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM8_CH2IN_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN7) +#define GPIO_TIM8_CH2NIN_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM8_CH2NIN_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM8_CH2NIN_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN11) +#define GPIO_TIM8_CH2NOUT_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN0) +#define GPIO_TIM8_CH2NOUT_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM8_CH2NOUT_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN11) +#define GPIO_TIM8_CH2OUT_1 (GPIO_ALT | GPIO_AF5 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN14) +#define GPIO_TIM8_CH2OUT_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM8_CH2OUT_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN7) +#define GPIO_TIM8_CH3IN_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM8_CH3IN_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN8) +#define GPIO_TIM8_CH3NIN_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM8_CH3NIN_2 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM8_CH3NIN_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN12) +#define GPIO_TIM8_CH3NOUT_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN1) +#define GPIO_TIM8_CH3NOUT_2 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM8_CH3NOUT_3 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN12) +#define GPIO_TIM8_CH3OUT_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM8_CH3OUT_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN8) +#define GPIO_TIM8_CH4IN_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN9) +#define GPIO_TIM8_CH4IN_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN1) +#define GPIO_TIM8_CH4NIN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN13) +#define GPIO_TIM8_CH4NIN_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTD | GPIO_PIN0) +#define GPIO_TIM8_CH4NOUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN13) +#define GPIO_TIM8_CH4NOUT_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN0) +#define GPIO_TIM8_CH4OUT_1 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN9) +#define GPIO_TIM8_CH4OUT_2 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTD | GPIO_PIN1) +#define GPIO_TIM8_ETR_1 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN0) +#define GPIO_TIM8_ETR_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN6) + +#define GPIO_TIM15_BKIN_1 (GPIO_ALT | GPIO_AF9 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_TIM15_BKIN_2 (GPIO_ALT | GPIO_AF2 | GPIO_PORTC | GPIO_PIN5) +#define GPIO_TIM15_CH1IN_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM15_CH1IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN14) +#define GPIO_TIM15_CH1IN_3 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTF | GPIO_PIN9) +#define GPIO_TIM15_CH1NIN_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM15_CH1NIN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN15) +#define GPIO_TIM15_CH1NOUT_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN1) +#define GPIO_TIM15_CH1NOUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN15) +#define GPIO_TIM15_CH1OUT_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN2) +#define GPIO_TIM15_CH1OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN14) +#define GPIO_TIM15_CH1OUT_3 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTF | GPIO_PIN9) +#define GPIO_TIM15_CH2IN_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM15_CH2IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN15) +#define GPIO_TIM15_CH2IN_3 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTF | GPIO_PIN10) +#define GPIO_TIM15_CH2OUT_1 (GPIO_ALT | GPIO_AF9 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN3) +#define GPIO_TIM15_CH2OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN15) +#define GPIO_TIM15_CH2OUT_3 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTF | GPIO_PIN10) + +#define GPIO_TIM16_BKIN (GPIO_ALT | GPIO_AF1 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM16_CH1IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM16_CH1IN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM16_CH1IN_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM16_CH1IN_4 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM16_CH1IN_5 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN0) +#define GPIO_TIM16_CH1NIN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN13) +#define GPIO_TIM16_CH1NIN_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM16_CH1NOUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN13) +#define GPIO_TIM16_CH1NOUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN6) +#define GPIO_TIM16_CH1OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN6) +#define GPIO_TIM16_CH1OUT_2 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN12) +#define GPIO_TIM16_CH1OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM16_CH1OUT_4 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN8) +#define GPIO_TIM16_CH1OUT_5 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN0) + +#define GPIO_TIM17_BKIN_1 (GPIO_ALT | GPIO_AF1 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_TIM17_BKIN_2 (GPIO_ALT | GPIO_AF10 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_TIM17_CH1IN_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM17_CH1IN_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM17_CH1IN_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM17_CH1IN_4 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN1) +#define GPIO_TIM17_CH1NIN (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM17_CH1NOUT (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN7) +#define GPIO_TIM17_CH1OUT_1 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTA | GPIO_PIN7) +#define GPIO_TIM17_CH1OUT_2 (GPIO_ALT | GPIO_AF10 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN5) +#define GPIO_TIM17_CH1OUT_3 (GPIO_ALT | GPIO_AF1 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN9) +#define GPIO_TIM17_CH1OUT_4 (GPIO_ALT | GPIO_AF4 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN1) + +#define GPIO_TIM20_BKIN (GPIO_ALT | GPIO_AF2 | GPIO_PORTF | GPIO_PIN9) +#define GPIO_TIM20_BKIN2 (GPIO_ALT | GPIO_AF2 | GPIO_PORTF | GPIO_PIN10) +#define GPIO_TIM20_CH1IN_1 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTB | GPIO_PIN2) +#define GPIO_TIM20_CH1IN_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN2) +#define GPIO_TIM20_CH1NIN (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN4) +#define GPIO_TIM20_CH1NOUT (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN4) +#define GPIO_TIM20_CH1OUT_1 (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTB | GPIO_PIN2) +#define GPIO_TIM20_CH1OUT_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN2) +#define GPIO_TIM20_CH2IN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN2) +#define GPIO_TIM20_CH2IN_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN3) +#define GPIO_TIM20_CH2NIN (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN5) +#define GPIO_TIM20_CH2NOUT (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN5) +#define GPIO_TIM20_CH2OUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN2) +#define GPIO_TIM20_CH2OUT_2 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN3) +#define GPIO_TIM20_CH3IN_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTC | GPIO_PIN8) +#define GPIO_TIM20_CH3IN_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTF | GPIO_PIN2) +#define GPIO_TIM20_CH3NIN (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN6) +#define GPIO_TIM20_CH3NOUT (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN6) +#define GPIO_TIM20_CH3OUT_1 (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTC | GPIO_PIN8) +#define GPIO_TIM20_CH3OUT_2 (GPIO_ALT | GPIO_AF2 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTF | GPIO_PIN2) +#define GPIO_TIM20_CH4IN (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN1) +#define GPIO_TIM20_CH4NIN (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN0) +#define GPIO_TIM20_CH4NOUT (GPIO_ALT | GPIO_AF3 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN0) +#define GPIO_TIM20_CH4OUT (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_PUSHPULL | GPIO_PORTE | GPIO_PIN1) +#define GPIO_TIM20_ETR (GPIO_ALT | GPIO_AF6 | GPIO_SPEED_50MHz | GPIO_FLOAT | GPIO_PORTE | GPIO_PIN0) + +/* UARTs/USARTs *************************************************************************************/ + +#define GPIO_USART1_CK (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN8) +#define GPIO_USART1_CTS (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_USART1_DE (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_USART1_NSS (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN11) +#define GPIO_USART1_RTS (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN12) +#define GPIO_USART1_RX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN10) +#define GPIO_USART1_RX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_USART1_RX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN5) +#define GPIO_USART1_RX_4 (GPIO_ALT | GPIO_AF7 | GPIO_PORTE | GPIO_PIN1) +#define GPIO_USART1_TX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN9) +#define GPIO_USART1_TX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN6) +#define GPIO_USART1_TX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN4) +#define GPIO_USART1_TX_4 (GPIO_ALT | GPIO_AF7 | GPIO_PORTE | GPIO_PIN0) + +#define GPIO_USART2_CK_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN4) +#define GPIO_USART2_CK_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_USART2_CK_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN7) +#define GPIO_USART2_CTS_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN0) +#define GPIO_USART2_CTS_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN3) +#define GPIO_USART2_DE_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN1) +#define GPIO_USART2_DE_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN4) +#define GPIO_USART2_NSS_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN0) +#define GPIO_USART2_NSS_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN3) +#define GPIO_USART2_RTS_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN1) +#define GPIO_USART2_RTS_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN4) +#define GPIO_USART2_RX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN3) +#define GPIO_USART2_RX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_USART2_RX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_USART2_RX_4 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN6) +#define GPIO_USART2_TX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN2) +#define GPIO_USART2_TX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN14) +#define GPIO_USART2_TX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN3) +#define GPIO_USART2_TX_4 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN5) + +#define GPIO_USART3_CK_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN12) +#define GPIO_USART3_CK_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN12) +#define GPIO_USART3_CK_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN10) +#define GPIO_USART3_CTS_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_USART3_CTS_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_USART3_CTS_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN11) +#define GPIO_USART3_DE_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN14) +#define GPIO_USART3_DE_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN12) +#define GPIO_USART3_NSS_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTA | GPIO_PIN13) +#define GPIO_USART3_NSS_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN13) +#define GPIO_USART3_NSS_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN11) +#define GPIO_USART3_RTS_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN14) +#define GPIO_USART3_RTS_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN12) +#define GPIO_USART3_RX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN8) +#define GPIO_USART3_RX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN11) +#define GPIO_USART3_RX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN11) +#define GPIO_USART3_RX_4 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN9) +#define GPIO_USART3_RX_5 (GPIO_ALT | GPIO_AF7 | GPIO_PORTE | GPIO_PIN15) +#define GPIO_USART3_TX_1 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN9) +#define GPIO_USART3_TX_2 (GPIO_ALT | GPIO_AF7 | GPIO_PORTB | GPIO_PIN10) +#define GPIO_USART3_TX_3 (GPIO_ALT | GPIO_AF7 | GPIO_PORTC | GPIO_PIN10) +#define GPIO_USART3_TX_4 (GPIO_ALT | GPIO_AF7 | GPIO_PORTD | GPIO_PIN8) + +#define GPIO_UART4_CTS (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN7) +#define GPIO_UART4_DE (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_UART4_RTS (GPIO_ALT | GPIO_AF8 | GPIO_PORTA | GPIO_PIN15) +#define GPIO_UART4_RX (GPIO_ALT | GPIO_AF5 | GPIO_PORTC | GPIO_PIN11) +#define GPIO_UART4_TX (GPIO_ALT | GPIO_AF5 | GPIO_PORTC | GPIO_PIN10) + +#define GPIO_UART5_CTS (GPIO_ALT | GPIO_AF14 | GPIO_PORTB | GPIO_PIN5) +#define GPIO_UART5_DE (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_UART5_RTS (GPIO_ALT | GPIO_AF8 | GPIO_PORTB | GPIO_PIN4) +#define GPIO_UART5_RX (GPIO_ALT | GPIO_AF5 | GPIO_PORTD | GPIO_PIN2) +#define GPIO_UART5_TX (GPIO_ALT | GPIO_AF5 | GPIO_PORTC | GPIO_PIN12) + +/* USB Device Full Speed ****************************************************************************/ + +#endif /* __ARCH_ARM_SRC_STM32_HARDWARE_STM32G474VXX_PINMAP_H */ diff --git a/arch/arm/src/stm32/hardware/stm32g47xxx_gpio.h b/arch/arm/src/stm32/hardware/stm32g47xxx_gpio.h new file mode 100644 index 0000000000..0d3c029c43 --- /dev/null +++ b/arch/arm/src/stm32/hardware/stm32g47xxx_gpio.h @@ -0,0 +1,340 @@ +/**************************************************************************** + * arch/arm/src/stm32/hardware/stm32g47xxx_gpio.h + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +#ifndef __ARCH_ARM_SRC_STM32_HARDWARE_STM32G47XXX_GPIO_H +#define __ARCH_ARM_SRC_STM32_HARDWARE_STM32G47XXX_GPIO_H + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +#define STM32_NGPIO_PORTS (7) /* GPIOA-G */ + +/* Register Offsets *********************************************************/ + +#define STM32_GPIO_MODER_OFFSET 0x0000 /* GPIO port mode register */ +#define STM32_GPIO_OTYPER_OFFSET 0x0004 /* GPIO port output type register */ +#define STM32_GPIO_OSPEED_OFFSET 0x0008 /* GPIO port output speed register */ +#define STM32_GPIO_PUPDR_OFFSET 0x000c /* GPIO port pull-up/pull-down register */ +#define STM32_GPIO_IDR_OFFSET 0x0010 /* GPIO port input data register */ +#define STM32_GPIO_ODR_OFFSET 0x0014 /* GPIO port output data register */ +#define STM32_GPIO_BSRR_OFFSET 0x0018 /* GPIO port bit set/reset register */ +#define STM32_GPIO_LCKR_OFFSET 0x001c /* GPIO port configuration lock register */ +#define STM32_GPIO_AFRL_OFFSET 0x0020 /* GPIO alternate function low register */ +#define STM32_GPIO_AFRH_OFFSET 0x0024 /* GPIO alternate function high register */ +#define STM32_GPIO_BRR_OFFSET 0x0028 /* GPIO port bit reset register */ + +/* Register Addresses *******************************************************/ + +#if (STM32_NGPIO_PORTS > 0) +# define STM32_GPIOA_MODER (STM32_GPIOA_BASE + STM32_GPIO_MODER_OFFSET) +# define STM32_GPIOA_OTYPER (STM32_GPIOA_BASE + STM32_GPIO_OTYPER_OFFSET) +# define STM32_GPIOA_OSPEED (STM32_GPIOA_BASE + STM32_GPIO_OSPEED_OFFSET) +# define STM32_GPIOA_PUPDR (STM32_GPIOA_BASE + STM32_GPIO_PUPDR_OFFSET) +# define STM32_GPIOA_IDR (STM32_GPIOA_BASE + STM32_GPIO_IDR_OFFSET) +# define STM32_GPIOA_ODR (STM32_GPIOA_BASE + STM32_GPIO_ODR_OFFSET) +# define STM32_GPIOA_BSRR (STM32_GPIOA_BASE + STM32_GPIO_BSRR_OFFSET) +# define STM32_GPIOA_LCKR (STM32_GPIOA_BASE + STM32_GPIO_LCKR_OFFSET) +# define STM32_GPIOA_AFRL (STM32_GPIOA_BASE + STM32_GPIO_AFRL_OFFSET) +# define STM32_GPIOA_AFRH (STM32_GPIOA_BASE + STM32_GPIO_AFRH_OFFSET) +# define STM32_GPIOA_BRR (STM32_GPIOA_BASE + STM32_GPIO_BRR_OFFSET) +#endif + +#if (STM32_NGPIO_PORTS > 1) +# define STM32_GPIOB_MODER (STM32_GPIOB_BASE + STM32_GPIO_MODER_OFFSET) +# define STM32_GPIOB_OTYPER (STM32_GPIOB_BASE + STM32_GPIO_OTYPER_OFFSET) +# define STM32_GPIOB_OSPEED (STM32_GPIOB_BASE + STM32_GPIO_OSPEED_OFFSET) +# define STM32_GPIOB_PUPDR (STM32_GPIOB_BASE + STM32_GPIO_PUPDR_OFFSET) +# define STM32_GPIOB_IDR (STM32_GPIOB_BASE + STM32_GPIO_IDR_OFFSET) +# define STM32_GPIOB_ODR (STM32_GPIOB_BASE + STM32_GPIO_ODR_OFFSET) +# define STM32_GPIOB_BSRR (STM32_GPIOB_BASE + STM32_GPIO_BSRR_OFFSET) +# define STM32_GPIOB_LCKR (STM32_GPIOB_BASE + STM32_GPIO_LCKR_OFFSET) +# define STM32_GPIOB_AFRL (STM32_GPIOB_BASE + STM32_GPIO_AFRL_OFFSET) +# define STM32_GPIOB_AFRH (STM32_GPIOB_BASE + STM32_GPIO_AFRH_OFFSET) +# define STM32_GPIOB_BRR (STM32_GPIOB_BASE + STM32_GPIO_BRR_OFFSET) +#endif + +#if (STM32_NGPIO_PORTS > 2) +# define STM32_GPIOC_MODER (STM32_GPIOC_BASE + STM32_GPIO_MODER_OFFSET) +# define STM32_GPIOC_OTYPER (STM32_GPIOC_BASE + STM32_GPIO_OTYPER_OFFSET) +# define STM32_GPIOC_OSPEED (STM32_GPIOC_BASE + STM32_GPIO_OSPEED_OFFSET) +# define STM32_GPIOC_PUPDR (STM32_GPIOC_BASE + STM32_GPIO_PUPDR_OFFSET) +# define STM32_GPIOC_IDR (STM32_GPIOC_BASE + STM32_GPIO_IDR_OFFSET) +# define STM32_GPIOC_ODR (STM32_GPIOC_BASE + STM32_GPIO_ODR_OFFSET) +# define STM32_GPIOC_BSRR (STM32_GPIOC_BASE + STM32_GPIO_BSRR_OFFSET) +# define STM32_GPIOC_LCKR (STM32_GPIOC_BASE + STM32_GPIO_LCKR_OFFSET) +# define STM32_GPIOC_AFRL (STM32_GPIOC_BASE + STM32_GPIO_AFRL_OFFSET) +# define STM32_GPIOC_AFRH (STM32_GPIOC_BASE + STM32_GPIO_AFRH_OFFSET) +# define STM32_GPIOC_BRR (STM32_GPIOC_BASE + STM32_GPIO_BRR_OFFSET) +#endif + +#if (STM32_NGPIO_PORTS > 3) +# define STM32_GPIOD_MODER (STM32_GPIOD_BASE + STM32_GPIO_MODER_OFFSET) +# define STM32_GPIOD_OTYPER (STM32_GPIOD_BASE + STM32_GPIO_OTYPER_OFFSET) +# define STM32_GPIOD_OSPEED (STM32_GPIOD_BASE + STM32_GPIO_OSPEED_OFFSET) +# define STM32_GPIOD_PUPDR (STM32_GPIOD_BASE + STM32_GPIO_PUPDR_OFFSET) +# define STM32_GPIOD_IDR (STM32_GPIOD_BASE + STM32_GPIO_IDR_OFFSET) +# define STM32_GPIOD_ODR (STM32_GPIOD_BASE + STM32_GPIO_ODR_OFFSET) +# define STM32_GPIOD_BSRR (STM32_GPIOD_BASE + STM32_GPIO_BSRR_OFFSET) +# define STM32_GPIOD_LCKR (STM32_GPIOD_BASE + STM32_GPIO_LCKR_OFFSET) +# define STM32_GPIOD_AFRL (STM32_GPIOD_BASE + STM32_GPIO_AFRL_OFFSET) +# define STM32_GPIOD_AFRH (STM32_GPIOD_BASE + STM32_GPIO_AFRH_OFFSET) +# define STM32_GPIOD_BRR (STM32_GPIOD_BASE + STM32_GPIO_BRR_OFFSET) +#endif + +#if (STM32_NGPIO_PORTS > 4) +# define STM32_GPIOE_MODER (STM32_GPIOE_BASE + STM32_GPIO_MODER_OFFSET) +# define STM32_GPIOE_OTYPER (STM32_GPIOE_BASE + STM32_GPIO_OTYPER_OFFSET) +# define STM32_GPIOE_OSPEED (STM32_GPIOE_BASE + STM32_GPIO_OSPEED_OFFSET) +# define STM32_GPIOE_PUPDR (STM32_GPIOE_BASE + STM32_GPIO_PUPDR_OFFSET) +# define STM32_GPIOE_IDR (STM32_GPIOE_BASE + STM32_GPIO_IDR_OFFSET) +# define STM32_GPIOE_ODR (STM32_GPIOE_BASE + STM32_GPIO_ODR_OFFSET) +# define STM32_GPIOE_BSRR (STM32_GPIOE_BASE + STM32_GPIO_BSRR_OFFSET) +# define STM32_GPIOE_LCKR (STM32_GPIOE_BASE + STM32_GPIO_LCKR_OFFSET) +# define STM32_GPIOE_AFRL (STM32_GPIOE_BASE + STM32_GPIO_AFRL_OFFSET) +# define STM32_GPIOE_AFRH (STM32_GPIOE_BASE + STM32_GPIO_AFRH_OFFSET) +# define STM32_GPIOE_BRR (STM32_GPIOE_BASE + STM32_GPIO_BRR_OFFSET) +#endif + +#if (STM32_NGPIO_PORTS > 5) +# define STM32_GPIOF_MODER (STM32_GPIOF_BASE + STM32_GPIO_MODER_OFFSET) +# define STM32_GPIOF_OTYPER (STM32_GPIOF_BASE + STM32_GPIO_OTYPER_OFFSET) +# define STM32_GPIOF_OSPEED (STM32_GPIOF_BASE + STM32_GPIO_OSPEED_OFFSET) +# define STM32_GPIOF_PUPDR (STM32_GPIOF_BASE + STM32_GPIO_PUPDR_OFFSET) +# define STM32_GPIOF_IDR (STM32_GPIOF_BASE + STM32_GPIO_IDR_OFFSET) +# define STM32_GPIOF_ODR (STM32_GPIOF_BASE + STM32_GPIO_ODR_OFFSET) +# define STM32_GPIOF_BSRR (STM32_GPIOF_BASE + STM32_GPIO_BSRR_OFFSET) +# define STM32_GPIOF_LCKR (STM32_GPIOF_BASE + STM32_GPIO_LCKR_OFFSET) +# define STM32_GPIOF_AFRL (STM32_GPIOF_BASE + STM32_GPIO_AFRL_OFFSET) +# define STM32_GPIOF_AFRH (STM32_GPIOF_BASE + STM32_GPIO_AFRH_OFFSET) +# define STM32_GPIOF_BRR (STM32_GPIOF_BASE + STM32_GPIO_BRR_OFFSET) +#endif + +#if (STM32_NGPIO_PORTS > 6) +# define STM32_GPIOG_MODER (STM32_GPIOG_BASE + STM32_GPIO_MODER_OFFSET) +# define STM32_GPIOG_OTYPER (STM32_GPIOG_BASE + STM32_GPIO_OTYPER_OFFSET) +# define STM32_GPIOG_OSPEED (STM32_GPIOG_BASE + STM32_GPIO_OSPEED_OFFSET) +# define STM32_GPIOG_PUPDR (STM32_GPIOG_BASE + STM32_GPIO_PUPDR_OFFSET) +# define STM32_GPIOG_IDR (STM32_GPIOG_BASE + STM32_GPIO_IDR_OFFSET) +# define STM32_GPIOG_ODR (STM32_GPIOG_BASE + STM32_GPIO_ODR_OFFSET) +# define STM32_GPIOG_BSRR (STM32_GPIOG_BASE + STM32_GPIO_BSRR_OFFSET) +# define STM32_GPIOG_LCKR (STM32_GPIOG_BASE + STM32_GPIO_LCKR_OFFSET) +# define STM32_GPIOG_AFRL (STM32_GPIOG_BASE + STM32_GPIO_AFRL_OFFSET) +# define STM32_GPIOG_AFRH (STM32_GPIOG_BASE + STM32_GPIO_AFRH_OFFSET) +# define STM32_GPIOG_BRR (STM32_GPIOG_BASE + STM32_GPIO_BRR_OFFSET) +#endif + +/* Register Bitfield Definitions ********************************************/ + +/* GPIO port mode register */ + +#define GPIO_MODER_INPUT (0x0) /* Input mode */ +#define GPIO_MODER_OUTPUT (0x1) /* General purpose output mode */ +#define GPIO_MODER_ALT (0x2) /* Alternate mode */ +#define GPIO_MODER_ANALOG (0x3) /* Analog mode (reset state) */ + +#define GPIO_MODER_SHIFT(n) ((n) << 1) +#define GPIO_MODER_MASK(n) (0x3 << GPIO_MODER_SHIFT(n)) + +#define GPIO_MODER0_SHIFT (0) +#define GPIO_MODER0_MASK (3 << GPIO_MODER0_SHIFT) +#define GPIO_MODER1_SHIFT (2) +#define GPIO_MODER1_MASK (3 << GPIO_MODER1_SHIFT) +#define GPIO_MODER2_SHIFT (4) +#define GPIO_MODER2_MASK (3 << GPIO_MODER2_SHIFT) +#define GPIO_MODER3_SHIFT (6) +#define GPIO_MODER3_MASK (3 << GPIO_MODER3_SHIFT) +#define GPIO_MODER4_SHIFT (8) +#define GPIO_MODER4_MASK (3 << GPIO_MODER4_SHIFT) +#define GPIO_MODER5_SHIFT (10) +#define GPIO_MODER5_MASK (3 << GPIO_MODER5_SHIFT) +#define GPIO_MODER6_SHIFT (12) +#define GPIO_MODER6_MASK (3 << GPIO_MODER6_SHIFT) +#define GPIO_MODER7_SHIFT (14) +#define GPIO_MODER7_MASK (3 << GPIO_MODER7_SHIFT) +#define GPIO_MODER8_SHIFT (16) +#define GPIO_MODER8_MASK (3 << GPIO_MODER8_SHIFT) +#define GPIO_MODER9_SHIFT (18) +#define GPIO_MODER9_MASK (3 << GPIO_MODER9_SHIFT) +#define GPIO_MODER10_SHIFT (20) +#define GPIO_MODER10_MASK (3 << GPIO_MODER10_SHIFT) +#define GPIO_MODER11_SHIFT (22) +#define GPIO_MODER11_MASK (3 << GPIO_MODER11_SHIFT) +#define GPIO_MODER12_SHIFT (24) +#define GPIO_MODER12_MASK (3 << GPIO_MODER12_SHIFT) +#define GPIO_MODER13_SHIFT (26) +#define GPIO_MODER13_MASK (3 << GPIO_MODER13_SHIFT) +#define GPIO_MODER14_SHIFT (28) +#define GPIO_MODER14_MASK (3 << GPIO_MODER14_SHIFT) +#define GPIO_MODER15_SHIFT (30) +#define GPIO_MODER15_MASK (3 << GPIO_MODER15_SHIFT) + +/* GPIO port output type register */ + +#define GPIO_OTYPER_PP(n) (0) /* 0=Output push-pull (reset state) */ +#define GPIO_OTYPER_OD(n) (1 << (n)) /* 1=Output open-drain */ + +/* GPIO port output speed register */ + +#define GPIO_OSPEED_5MHz (0x0) /* 5 MHz Low speed output */ +#define GPIO_OSPEED_25MHz (0x1) /* 25 MHz Medium speed output */ +#define GPIO_OSPEED_50MHz (0x2) /* 50 MHz Fast speed output */ +#define GPIO_OSPEED_120MHz (0x3) /* 120 MHz High speed output */ + +#define GPIO_OSPEED_SHIFT(n) ((n) << 1) +#define GPIO_OSPEED_MASK(n) (0x3 << GPIO_OSPEED_SHIFT(n)) + +#define GPIO_OSPEED0_SHIFT (GPIO_OSPEED_SHIFT(0)) +#define GPIO_OSPEED0_MASK (GPIO_OSPEED_MASK(0)) +#define GPIO_OSPEED1_SHIFT (GPIO_OSPEED_SHIFT(1)) +#define GPIO_OSPEED1_MASK (GPIO_OSPEED_MASK(1)) +#define GPIO_OSPEED2_SHIFT (GPIO_OSPEED_SHIFT(2)) +#define GPIO_OSPEED2_MASK (GPIO_OSPEED_MASK(2)) +#define GPIO_OSPEED3_SHIFT (GPIO_OSPEED_SHIFT(3)) +#define GPIO_OSPEED3_MASK (GPIO_OSPEED_MASK(3)) +#define GPIO_OSPEED4_SHIFT (GPIO_OSPEED_SHIFT(4)) +#define GPIO_OSPEED4_MASK (GPIO_OSPEED_MASK(4)) +#define GPIO_OSPEED5_SHIFT (GPIO_OSPEED_SHIFT(5)) +#define GPIO_OSPEED5_MASK (GPIO_OSPEED_MASK(5)) +#define GPIO_OSPEED6_SHIFT (GPIO_OSPEED_SHIFT(6)) +#define GPIO_OSPEED6_MASK (GPIO_OSPEED_MASK(6)) +#define GPIO_OSPEED7_SHIFT (GPIO_OSPEED_SHIFT(7)) +#define GPIO_OSPEED7_MASK (GPIO_OSPEED_MASK(7)) +#define GPIO_OSPEED8_SHIFT (GPIO_OSPEED_SHIFT(8)) +#define GPIO_OSPEED8_MASK (GPIO_OSPEED_MASK(8)) +#define GPIO_OSPEED9_SHIFT (GPIO_OSPEED_SHIFT(9)) +#define GPIO_OSPEED9_MASK (GPIO_OSPEED_MASK(9)) +#define GPIO_OSPEED10_SHIFT (GPIO_OSPEED_SHIFT(10)) +#define GPIO_OSPEED10_MASK (GPIO_OSPEED_MASK(10)) +#define GPIO_OSPEED11_SHIFT (GPIO_OSPEED_SHIFT(11)) +#define GPIO_OSPEED11_MASK (GPIO_OSPEED_MASK(11)) +#define GPIO_OSPEED12_SHIFT (GPIO_OSPEED_SHIFT(12)) +#define GPIO_OSPEED12_MASK (GPIO_OSPEED_MASK(12)) +#define GPIO_OSPEED13_SHIFT (GPIO_OSPEED_SHIFT(13)) +#define GPIO_OSPEED13_MASK (GPIO_OSPEED_MASK(13)) +#define GPIO_OSPEED14_SHIFT (GPIO_OSPEED_SHIFT(14)) +#define GPIO_OSPEED14_MASK (GPIO_OSPEED_MASK(14)) +#define GPIO_OSPEED15_SHIFT (GPIO_OSPEED_SHIFT(15)) +#define GPIO_OSPEED15_MASK (GPIO_OSPEED_MASK(15)) + +/* GPIO port pull-up/pull-down register */ + +#define GPIO_PUPDR_NONE (0x0) /* No pull-up, pull-down */ +#define GPIO_PUPDR_PULLUP (0x1) /* Pull-up */ +#define GPIO_PUPDR_PULLDOWN (0x2) /* Pull-down */ + +#define GPIO_PUPDR_SHIFT(n) ((n) << 1) +#define GPIO_PUPDR_MASK(n) (0x3 << GPIO_PUPDR_SHIFT(n)) + +#define GPIO_PUPDR0_SHIFT GPIO_PUPDR_SHIFT(0) +#define GPIO_PUPDR0_MASK GPIO_PUPDR_MASK(0) +#define GPIO_PUPDR1_SHIFT GPIO_PUPDR_SHIFT(1) +#define GPIO_PUPDR1_MASK GPIO_PUPDR_MASK(1) +#define GPIO_PUPDR2_SHIFT GPIO_PUPDR_SHIFT(2) +#define GPIO_PUPDR2_MASK GPIO_PUPDR_MASK(2) +#define GPIO_PUPDR3_SHIFT GPIO_PUPDR_SHIFT(3) +#define GPIO_PUPDR3_MASK GPIO_PUPDR_MASK(3) +#define GPIO_PUPDR4_SHIFT GPIO_PUPDR_SHIFT(4) +#define GPIO_PUPDR4_MASK GPIO_PUPDR_MASK(4) +#define GPIO_PUPDR5_SHIFT GPIO_PUPDR_SHIFT(5) +#define GPIO_PUPDR5_MASK GPIO_PUPDR_MASK(5) +#define GPIO_PUPDR6_SHIFT GPIO_PUPDR_SHIFT(6) +#define GPIO_PUPDR6_MASK GPIO_PUPDR_MASK(6) +#define GPIO_PUPDR7_SHIFT GPIO_PUPDR_SHIFT(7) +#define GPIO_PUPDR7_MASK GPIO_PUPDR_MASK(7) +#define GPIO_PUPDR8_SHIFT GPIO_PUPDR_SHIFT(8) +#define GPIO_PUPDR8_MASK GPIO_PUPDR_MASK(8) +#define GPIO_PUPDR9_SHIFT GPIO_PUPDR_SHIFT(9) +#define GPIO_PUPDR9_MASK GPIO_PUPDR_MASK(9) +#define GPIO_PUPDR10_SHIFT GPIO_PUPDR_SHIFT(10) +#define GPIO_PUPDR10_MASK GPIO_PUPDR_MASK(10) +#define GPIO_PUPDR11_SHIFT GPIO_PUPDR_SHIFT(11) +#define GPIO_PUPDR11_MASK GPIO_PUPDR_MASK(11) +#define GPIO_PUPDR12_SHIFT GPIO_PUPDR_SHIFT(12) +#define GPIO_PUPDR12_MASK GPIO_PUPDR_MASK(12) +#define GPIO_PUPDR13_SHIFT GPIO_PUPDR_SHIFT(13) +#define GPIO_PUPDR13_MASK GPIO_PUPDR_MASK(13) +#define GPIO_PUPDR14_SHIFT GPIO_PUPDR_SHIFT(14) +#define GPIO_PUPDR14_MASK GPIO_PUPDR_MASK(14) +#define GPIO_PUPDR15_SHIFT GPIO_PUPDR_SHIFT(15) +#define GPIO_PUPDR15_MASK GPIO_PUPDR_MASK(15) + +/* GPIO port input data register */ + +#define GPIO_IDR(n) (1 << (n)) + +/* GPIO port output data register */ + +#define GPIO_ODR(n) (1 << (n)) + +/* GPIO port bit set/reset register */ + +#define GPIO_BSRR_SET(n) (1 << (n)) +#define GPIO_BSRR_RESET(n) (1 << ((n) + 16)) + +/* GPIO port configuration lock register */ + +#define GPIO_LCKR(n) (1 << (n)) +#define GPIO_LCKK (1 << 16) /* Lock key */ + +/* GPIO alternate function low/high register */ + +#define GPIO_AFR_SHIFT(n) ((n) << 2) +#define GPIO_AFR_MASK(n) (0xf << GPIO_AFR_SHIFT(n)) + +#define GPIO_AFRL0_SHIFT (0) +#define GPIO_AFRL0_MASK (0xf << GPIO_AFRL0_SHIFT) +#define GPIO_AFRL1_SHIFT (4) +#define GPIO_AFRL1_MASK (0xf << GPIO_AFRL1_SHIFT) +#define GPIO_AFRL2_SHIFT (8) +#define GPIO_AFRL2_MASK (0xf << GPIO_AFRL2_SHIFT) +#define GPIO_AFRL3_SHIFT (12) +#define GPIO_AFRL3_MASK (0xf << GPIO_AFRL3_SHIFT) +#define GPIO_AFRL4_SHIFT (16) +#define GPIO_AFRL4_MASK (0xf << GPIO_AFRL4_SHIFT) +#define GPIO_AFRL5_SHIFT (20) +#define GPIO_AFRL5_MASK (0xf << GPIO_AFRL5_SHIFT) +#define GPIO_AFRL6_SHIFT (24) +#define GPIO_AFRL6_MASK (0xf << GPIO_AFRL6_SHIFT) +#define GPIO_AFRL7_SHIFT (28) +#define GPIO_AFRL7_MASK (0xf << GPIO_AFRL7_SHIFT) + +#define GPIO_AFRH8_SHIFT (0) +#define GPIO_AFRH8_MASK (0xf << GPIO_AFRH8_SHIFT) +#define GPIO_AFRH9_SHIFT (4) +#define GPIO_AFRH9_MASK (0xf << GPIO_AFRH9_SHIFT) +#define GPIO_AFRH10_SHIFT (8) +#define GPIO_AFRH10_MASK (0xf << GPIO_AFRH10_SHIFT) +#define GPIO_AFRH11_SHIFT (12) +#define GPIO_AFRH11_MASK (0xf << GPIO_AFRH11_SHIFT) +#define GPIO_AFRH12_SHIFT (16) +#define GPIO_AFRH12_MASK (0xf << GPIO_AFRH12_SHIFT) +#define GPIO_AFRH13_SHIFT (20) +#define GPIO_AFRH13_MASK (0xf << GPIO_AFRH13_SHIFT) +#define GPIO_AFRH14_SHIFT (24) +#define GPIO_AFRH14_MASK (0xf << GPIO_AFRH14_SHIFT) +#define GPIO_AFRH15_SHIFT (28) +#define GPIO_AFRH15_MASK (0xf << GPIO_AFRH15_SHIFT) + +/* GPIO port bit reset register */ + +#define GPIO_BRR_RESET(n) (1 << (n)) + +#endif /* __ARCH_ARM_SRC_STM32_HARDWARE_STM32G47XXX_GPIO_H */ diff --git a/arch/arm/src/stm32/hardware/stm32g47xxx_memorymap.h b/arch/arm/src/stm32/hardware/stm32g47xxx_memorymap.h new file mode 100644 index 0000000000..0b82c7db8c --- /dev/null +++ b/arch/arm/src/stm32/hardware/stm32g47xxx_memorymap.h @@ -0,0 +1,188 @@ +/**************************************************************************************************** + * arch/arm/src/stm32/hardware/stm32g47xxx_memorymap.h + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************************************/ + +#ifndef __ARCH_ARM_SRC_STM32_HARDWARE_STM32G47XXX_MEMORYMAP_H +#define __ARCH_ARM_SRC_STM32_HARDWARE_STM32G47XXX_MEMORYMAP_H + +/**************************************************************************************************** + * Pre-processor Definitions + ****************************************************************************************************/ + +/* STM32G47xxx Address Blocks ***********************************************************************/ + +#define STM32_CODE_BASE 0x00000000 /* 0x00000000-0x1fffffff: 512Mb code block */ +#define STM32_SRAM_BASE 0x20000000 /* 0x20000000-0x3fffffff: 512Mb sram block */ +#define STM32_PERIPH_BASE 0x40000000 /* 0x40000000-0x5fffffff: 512Mb peripheral block */ +#define STM32_FMC_BANK1 0x60000000 /* 0x60000000-0x6fffffff: 256Mb NOR/PSRMA/SRAM */ + /* 0x70000000-0x7fffffff: Reserved */ +#define STM32_FMC_BANK3 0x80000000 /* 0x80000000-0x8fffffff: 256Mb NAND FLASH */ +#define STM32_QSPI_BANK1 0x90000000 /* 0x90000000-0x9fffffff: 256Mb QUADSPI */ + +#define STM32_FMC_QSPI_BASE 0xa0000000 /* 0xa0000000-0xbfffffff: 256Mb FMC and QUADSPI registers */ + /* 0xc0000000-0xdfffffff: Reserved */ +#define STM32_CORTEX_BASE 0xe0000000 /* 0xe0000000-0xffffffff: 512Mb Cortex-M4 block */ + +#define STM32_REGION_MASK 0xf0000000 +#define STM32_IS_SRAM(a) ((((uint32_t)(a)) & STM32_REGION_MASK) == STM32_SRAM_BASE) + +/* Code Base Addresses ******************************************************************************/ + +#define STM32_BOOT_BASE 0x00000000 /* 0x00000000-0x0007ffff: Aliased boot memory */ + /* 0x00080000-0x07ffffff: Reserved */ +#define STM32_FLASH_BASE 0x08000000 /* 0x08000000-0x807ffff: Up to 512Kb FLASH memory */ + /* 0x08080000-0xfffffff: Reserved */ +#define STM32_CCMRAM_BASE 0x10000000 /* 0x10000000-0x10007fff: 32Kb CCM data SRAM */ + /* 0x10008000-0x1ffeffff: Reserved */ +#define STM32_SYSMEM_BASE 0x1fff0000 /* 0x1fff0000-0x1fff6fff: 28Kb System memory */ +#define STM32_OTP_AREA_BASE 0x1fff7000 /* 0x1fff7000-0x1fff73ff: 1Kb OTP area */ + /* 0x1fff7400-0x1fff77ff: Reserved */ +#define STM32_OPTION_BASE 0x1fff7800 /* 0x1fff7800-0x1fff780f: 16 Option bytes */ + /* 0x1fff7810-0x1fff7fff: Reserved */ +#define STM32_SYSMEM_BASE2 0x1fff8000 /* 0x1fff8000-0x1fffefff: 28Kb System memory */ + /* 0x1ffff000-0x1ffff7ff: Reserved */ +#define STM32_OPTION_BASE2 0x1ffff800 /* 0x1ffff800-0x1ffff80f: 16 Option bytes */ + /* 0x1fff7810-0x1fff7fff: Reserved */ + +/* System Memory Addresses **************************************************************************/ + +#define STM32_PACKAGE_INFO 0x1fff7500 /* Package data register */ +#define STM32_SYSMEM_UID 0x1fff7590 /* The 96-bit unique device identifier */ +#define STM32_SYSMEM_FSIZE 0x1fff75e0 /* This bitfield indicates the size of + * the device Flash memory expressed in + * Kbytes. Example: 0x040 corresponds + * to 64 Kbytes + */ + +/* Peripheral Base Addresses ************************************************************************/ + +#define STM32_APB1_BASE 0x40000000 /* 0x40000000-0x400097ff: APB1 */ + /* 0x40009800-0x4000ffff: Reserved */ +#define STM32_APB2_BASE 0x40010000 /* 0x40010000-0x400163ff: APB2 */ + /* 0x40016400-0x4001ffff: Reserved */ +#define STM32_AHB1_BASE 0x40020000 /* 0x40020000-0x400243ff: APB1 */ + /* 0x40024400-0x47ffffff: Reserved */ +#define STM32_AHB2_BASE 0x48000000 /* 0x48000000-0x50060bff: AHB2 */ + /* 0x50060c00-0x5fffffff: Reserved */ + +/* APB1 Base Addresses ******************************************************************************/ + +#define STM32_TIM2_BASE 0x40000000 /* 0x40000000-0x400003ff: TIM2 */ +#define STM32_TIM3_BASE 0x40000400 /* 0x40000400-0x400007ff: TIM3 */ +#define STM32_TIM4_BASE 0x40000800 /* 0x40000800-0x40000bff: TIM4 */ +#define STM32_TIM5_BASE 0x40000c00 /* 0x40000c00-0x40000fff: TIM5 */ +#define STM32_TIM6_BASE 0x40001000 /* 0x40001000-0x400013ff: TIM6 */ +#define STM32_TIM7_BASE 0x40001400 /* 0x40001400-0x400017ff: TIM7 */ +#define STM32_CRS_BASE 0x40002000 /* 0x40002000-0x400023ff: CRS */ +#define STM32_TAMP_BASE 0x40002400 /* 0x40002400-0x400027ff: TAMP */ +#define STM32_RTC_BASE 0x40002800 /* 0x40002800-0x40002bff: RTC */ +#define STM32_WWDG_BASE 0x40002c00 /* 0x40002c00-0x40002fff: WWDG */ +#define STM32_IWDG_BASE 0x40003000 /* 0x40003000-0x400033ff: IWDG */ +#define STM32_SPI2_BASE 0x40003800 /* 0x40003800-0x40003bff: SPI2 */ +#define STM32_SPI3_BASE 0x40003c00 /* 0x40003c00-0x40003fff: SPI3 */ +#define STM32_USART2_BASE 0x40004400 /* 0x40004400-0x400047ff: USART2 */ +#define STM32_USART3_BASE 0x40004800 /* 0x40004800-0x40004bff: USART3 */ +#define STM32_UART4_BASE 0x40004c00 /* 0x40004c00-0x40004fff: UART4 */ +#define STM32_UART5_BASE 0x40005000 /* 0x40005000-0x400053ff: UART5 */ +#define STM32_I2C1_BASE 0x40005400 /* 0x40005400-0x400057ff: I2C1 */ +#define STM32_I2C2_BASE 0x40005800 /* 0x40005800-0x40005bff: I2C2 */ +#define STM32_USB_BASE 0x40005c00 /* 0x40005c00-0x400063ff: USB and USB SRAM */ +#define STM32_FDCAN1_BASE 0x40006400 /* 0x40006400-0x400067ff: FDCAN1 */ +#define STM32_FDCAN2_BASE 0x40006800 /* 0x40006800-0x40006bff: FDCAN2 */ +#define STM32_FDCAN3_BASE 0x40006c00 /* 0x40006c00-0x40006fff: FDCAN3 */ +#define STM32_PWR_BASE 0x40007000 /* 0x40007000-0x400073ff: PWR */ +#define STM32_I2C3_BASE 0x40007800 /* 0x40007800-0x40007bff: I2C3 */ +#define STM32_LPTIM1_BASE 0x40007c00 /* 0x40007c00-0x40007fff: LPTIM1 */ +#define STM32_LPUART1_BASE 0x40008000 /* 0x40008000-0x400083ff: LPUART1 */ +#define STM32_I2C4_BASE 0x40008400 /* 0x40008400-0x400087ff: I2C4 */ +#define STM32_UCPD1_BASE 0x4000a000 /* 0x4000a000-0x4000a3ff: UCPD1 */ +#define STM32_SRAMCAN_BASE 0x4000a400 /* 0x4000a400-0x4000afff: FDCANs Message RAM */ + +/* APB2 Base Addresses ******************************************************************************/ + +#define STM32_SYSCFG_BASE 0x40010000 /* 0x40010000-0x40010029: SYSCFG */ +#define STM32_VREFBUF_BASE 0x40010030 /* 0x40010030-0x400101ff: VREFBUF */ +#define STM32_COMP1_BASE 0x40010200 /* 0x40010200-0x40010203: COMP1 */ +#define STM32_COMP2_BASE 0x40010204 /* 0x40010204-0x40010207: COMP2 */ +#define STM32_COMP3_BASE 0x40010208 /* 0x40010208-0x4001020b: COMP3 */ +#define STM32_COMP4_BASE 0x4001020c /* 0x4001020c-0x4001020f: COMP4 */ +#define STM32_COMP5_BASE 0x40010210 /* 0x40010210-0x40010213: COMP5 */ +#define STM32_COMP6_BASE 0x40010214 /* 0x40010214-0x40010217: COMP6 */ +#define STM32_COMP7_BASE 0x40010218 /* 0x40010218-0x400102ff: COMP7 */ +#define STM32_OPAMP_BASE 0x40010300 /* 0x40010300-0x40010303: OPAMP */ +#define STM32_OPAMP1_BASE 0x40010300 /* 0x40010300-0x40010303: OPAMP1 */ +#define STM32_OPAMP2_BASE 0x40010304 /* 0x40010304-0x40010307: OPAMP2 */ +#define STM32_OPAMP3_BASE 0x40010308 /* 0x40010308-0x4001030b: OPAMP3 */ +#define STM32_OPAMP4_BASE 0x4001030c /* 0x4001030c-0x4001030f: OPAMP4 */ +#define STM32_OPAMP5_BASE 0x40010310 /* 0x40010310-0x40010313: OPAMP5 */ +#define STM32_OPAMP6_BASE 0x40010314 /* 0x40010314-0x400103ff: OPAMP6 */ +#define STM32_EXTI_BASE 0x40010400 /* 0x40010400-0x400107ff: EXTI */ +#define STM32_TIM1_BASE 0x40012c00 /* 0x40012c00-0x40012fff: TIM1 */ +#define STM32_SPI1_BASE 0x40013000 /* 0x40013000-0x400133ff: SPI1 */ +#define STM32_TIM8_BASE 0x40013400 /* 0x40013400-0x400137ff: TIM8 */ +#define STM32_USART1_BASE 0x40013800 /* 0x40013800-0x40013bff: USART1 */ +#define STM32_SPI4_BASE 0x40013c00 /* 0x40013c00-0x40013fff: SPI4 */ +#define STM32_TIM15_BASE 0x40014000 /* 0x40014000-0x400143ff: TIM15 */ +#define STM32_TIM16_BASE 0x40014400 /* 0x40014400-0x400147ff: TIM16 */ +#define STM32_TIM17_BASE 0x40014800 /* 0x40014800-0x40014bff: TIM17 */ +#define STM32_TIM20_BASE 0x40015000 /* 0x40015000-0x400153ff: TIM20 */ +#define STM32_SAI1_BASE 0x40015400 /* 0x40015400-0x400157ff: SAI1 */ +#define STM32_HRTIM1_BASE 0x40016800 /* 0x40016800-0x400167ff: HRTIM1 */ + +/* AHB1 Base Addresses ******************************************************************************/ + +#define STM32_DMA1_BASE 0x40020000 /* 0x40020000-0x400203ff: DMA1 */ +#define STM32_DMA2_BASE 0x40020400 /* 0x40020400-0x400207ff: DMA2 */ +#define STM32_DMAMUX1_BASE 0x40020800 /* 0x40020800-0x40020bff: DMAMUX1 */ +#define STM32_CORDIC_BASE 0x40020c00 /* 0x40020c00-0x40020fff: CORDIC */ +#define STM32_RCC_BASE 0x40021000 /* 0x40021000-0x400213ff: Reset and Clock Control (RCC) */ +#define STM32_FMAC_BASE 0x40021400 /* 0x40021400-0x40021fff: FMAC */ +#define STM32_FLASHIF_BASE 0x40022000 /* 0x40022000-0x400223ff: Flash memory I/F */ +#define STM32_CRC_BASE 0x40023000 /* 0x40023000-0x400233ff: CRC */ + +/* AHB2 Base Addresses ******************************************************************************/ + +#define STM32_GPIOA_BASE 0x48000000 /* 0x48000000-0x480003ff: GPIO Port A */ +#define STM32_GPIOB_BASE 0x48000400 /* 0x48000400-0x480007ff: GPIO Port B */ +#define STM32_GPIOC_BASE 0x48000800 /* 0x48000800-0x48000bff: GPIO Port C */ +#define STM32_GPIOD_BASE 0x48000c00 /* 0X48000C00-0x48000fff: GPIO Port D */ +#define STM32_GPIOE_BASE 0x48001000 /* 0X48001000-0x480013ff: GPIO Port E */ +#define STM32_GPIOF_BASE 0x48001400 /* 0x48001400-0x480017ff: GPIO Port F */ +#define STM32_GPIOG_BASE 0x48001800 /* 0x48001800-0x48001bff: GPIO Port G */ +#define STM32_ADC12_BASE 0x50000000 /* 0x50000000-0x500003ff: ADC12 */ +#define STM32_ADC345_BASE 0x50000400 /* 0x50000400-0x500007ff: ADC345 */ +#define STM32_DAC_BASE 0x50000800 /* 0x50000800-0x50000bff: DAC */ +#define STM32_DAC1_BASE 0x50000800 /* 0x50000800-0x50000bff: DAC1 */ +#define STM32_DAC2_BASE 0x50000c00 /* 0x50000c00-0x50000fff: DAC2 */ +#define STM32_DAC3_BASE 0x50001000 /* 0x50001000-0x500013ff: DAC3 */ +#define STM32_DAC4_BASE 0x50001400 /* 0x50001400-0x500017ff: DAC4 */ + +/* Compatibility defines */ + +#define STM32_ADC34_BASE STM32_ADC345_BASE + +/* Cortex-M4 Base Addresses *************************************************************************/ + +/* Other registers -- see armv7-m/nvic.h for standard Cortex-M4 registers in + * this address range + */ + +#define STM32_DEBUGMCU_BASE 0xe0042000 + +#endif /* __ARCH_ARM_SRC_STM32_HARDWARE_STM32G47XXX_MEMORYMAP_H */ diff --git a/arch/arm/src/stm32/hardware/stm32g47xxx_pinmap.h b/arch/arm/src/stm32/hardware/stm32g47xxx_pinmap.h new file mode 100644 index 0000000000..e372874f56 --- /dev/null +++ b/arch/arm/src/stm32/hardware/stm32g47xxx_pinmap.h @@ -0,0 +1,46 @@ +/**************************************************************************** + * arch/arm/src/stm32/hardware/stm32g47xxx_pinmap.h + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +#ifndef __ARCH_ARM_SRC_STM32_HARDWARE_STM32G47XXX_PINMAP_H +#define __ARCH_ARM_SRC_STM32_HARDWARE_STM32G47XXX_PINMAP_H + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include "stm32_gpio.h" + +#if defined(CONFIG_ARCH_CHIP_STM32G474C) +# include "stm32g474cxx_pinmap.h" +#elif defined(CONFIG_ARCH_CHIP_STM32G474M) +# include "stm32g474mxx_pinmap.h" +#elif defined(CONFIG_ARCH_CHIP_STM32G474Q) +# include "stm32g474qxx_pinmap.h" +#elif defined(CONFIG_ARCH_CHIP_STM32G474R) +# include "stm32g474rxx_pinmap.h" +#elif defined(CONFIG_ARCH_CHIP_STM32G474V) +# include "stm32g474vxx_pinmap.h" +#else +# error "Unknown STM32G47xxx chip!" +#endif + +#endif /* __ARCH_ARM_SRC_STM32_HARDWARE_STM32G47XXX_PINMAP_H */ diff --git a/arch/arm/src/stm32/hardware/stm32g47xxx_pwr.h b/arch/arm/src/stm32/hardware/stm32g47xxx_pwr.h new file mode 100644 index 0000000000..0b90d5e747 --- /dev/null +++ b/arch/arm/src/stm32/hardware/stm32g47xxx_pwr.h @@ -0,0 +1,453 @@ +/**************************************************************************** + * arch/arm/src/stm32/hardware/stm32g47xxx_pwr.h + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +#ifndef __ARCH_ARM_SRC_STM32H7_HARDWARE_STM32H7X3XX_PWR_H +#define __ARCH_ARM_SRC_STM32H7_HARDWARE_STM32H7X3XX_PWR_H + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +/* Register Offsets *********************************************************/ + +#define STM32_PWR_CR1_OFFSET 0x0000 /* PWR Power Control Register 1 */ +#define STM32_PWR_CR2_OFFSET 0x0004 /* PWR Power Control Register 2 */ +#define STM32_PWR_CR3_OFFSET 0x0008 /* PWR Power Control Register 3 */ +#define STM32_PWR_CR4_OFFSET 0x000c /* PWR Power Control Register 4 */ +#define STM32_PWR_SR1_OFFSET 0x0010 /* PWR Power Status Register 1 */ +#define STM32_PWR_SR2_OFFSET 0x0014 /* PWR Power Status Register 2 */ +#define STM32_PWR_SCR_OFFSET 0x0018 /* PWR Power Status Reset Register */ + /* Offset 0x001c Reserved */ +#define STM32_PWR_PUCRA_OFFSET 0x0020 /* Power Port A Pull Up Control Register */ +#define STM32_PWR_PDCRA_OFFSET 0x0024 /* Power Port A Pull Down Control Register */ +#define STM32_PWR_PUCRB_OFFSET 0x0028 /* Power Port B Pull Up Control Register */ +#define STM32_PWR_PDCRB_OFFSET 0x002c /* Power Port B Pull Down Control Register */ +#define STM32_PWR_PUCRC_OFFSET 0x0030 /* Power Port C Pull Up Control Register */ +#define STM32_PWR_PDCRC_OFFSET 0x0034 /* Power Port C Pull Down Control Register */ +#define STM32_PWR_PUCRD_OFFSET 0x0038 /* Power Port D Pull Up Control Register */ +#define STM32_PWR_PDCRD_OFFSET 0x003c /* Power Port D Pull Down Control Register */ +#define STM32_PWR_PUCRE_OFFSET 0x0040 /* Power Port E Pull Up Control Register */ +#define STM32_PWR_PDCRE_OFFSET 0x0044 /* Power Port E Pull Down Control Register */ +#define STM32_PWR_PUCRF_OFFSET 0x0048 /* Power Port F Pull Up Control Register */ +#define STM32_PWR_PDCRF_OFFSET 0x004c /* Power Port F Pull Down Control Register */ +#define STM32_PWR_PUCRG_OFFSET 0x0050 /* Power Port G Pull Up Control Register */ +#define STM32_PWR_PDCRG_OFFSET 0x0054 /* Power Port G Pull Down Control Register */ + /* Offset 0x0058 Reserved */ + /* Offset 0x005C Reserved */ + /* Offset 0x0060 Reserved */ + /* Offset 0x0064 Reserved */ + /* Offset 0x0068 Reserved */ + /* Offset 0x006C Reserved */ + /* Offset 0x0070 Reserved */ + /* Offset 0x0074 Reserved */ + /* Offset 0x0078 Reserved */ + /* Offset 0x007C Reserved */ +#define STM32_PWR_CR5_OFFSET 0x0080 /* PWR Power Control Register 5 */ + +/* Register Addresses *******************************************************/ + +#define STM32_PWR_CR1 (STM32_PWR_BASE + STM32_PWR_CR1_OFFSET) +#define STM32_PWR_CR2 (STM32_PWR_BASE + STM32_PWR_CR2_OFFSET) +#define STM32_PWR_CR3 (STM32_PWR_BASE + STM32_PWR_CR3_OFFSET) +#define STM32_PWR_CR4 (STM32_PWR_BASE + STM32_PWR_CR4_OFFSET) +#define STM32_PWR_SR1 (STM32_PWR_BASE + STM32_PWR_SR1_OFFSET) +#define STM32_PWR_SR2 (STM32_PWR_BASE + STM32_PWR_SR2_OFFSET) +#define STM32_PWR_SCR (STM32_PWR_BASE + STM32_PWR_SCR_OFFSET) +#define STM32_PWR_PUCRA (STM32_PWR_BASE + STM32_PWR_PUCRA_OFFSET) +#define STM32_PWR_PDCRA (STM32_PWR_BASE + STM32_PWR_PDCRA_OFFSET) +#define STM32_PWR_PUCRB (STM32_PWR_BASE + STM32_PWR_PUCRB_OFFSET) +#define STM32_PWR_PDCRB (STM32_PWR_BASE + STM32_PWR_PDCRB_OFFSET) +#define STM32_PWR_PUCRC (STM32_PWR_BASE + STM32_PWR_PUCRC_OFFSET) +#define STM32_PWR_PDCRC (STM32_PWR_BASE + STM32_PWR_PDCRC_OFFSET) +#define STM32_PWR_PUCRD (STM32_PWR_BASE + STM32_PWR_PUCRD_OFFSET) +#define STM32_PWR_PDCRD (STM32_PWR_BASE + STM32_PWR_PDCRD_OFFSET) +#define STM32_PWR_PUCRE (STM32_PWR_BASE + STM32_PWR_PUCRE_OFFSET) +#define STM32_PWR_PDCRE (STM32_PWR_BASE + STM32_PWR_PDCRE_OFFSET) +#define STM32_PWR_PUCRF (STM32_PWR_BASE + STM32_PWR_PUCRF_OFFSET) +#define STM32_PWR_PDCRF (STM32_PWR_BASE + STM32_PWR_PDCRF_OFFSET) +#define STM32_PWR_PUCRG (STM32_PWR_BASE + STM32_PWR_PUCRG_OFFSET) +#define STM32_PWR_PDCRG (STM32_PWR_BASE + STM32_PWR_PDCRG_OFFSET) +#define STM32_PWR_CR5 (STM32_PWR_BASE + STM32_PWR_CR5_OFFSET) + +/* Register Bitfield Definitions ********************************************/ + +/* PWR Power Control Register 1 (CR1) */ + +#define PWR_CR1_LPR_SHIFT (14) /* Low Power Run */ +#define PWR_CR1_LPR (0x1 << PWR_CR1_LPR_SHIFT) +#define PWR_CR1_VOS_SHIFT (9) /* Voltage Scaling Range Selection */ +#define PWR_CR1_VOS_MASK (0x3 << PWR_CR1_VOS_SHIFT) +# define PWR_CR1_VOS_RANGE_1 (0x1 << PWR_CR1_VOS_SHIFT) +# define PWR_CR1_VOS_RANGE_2 (0x2 << PWR_CR1_VOS_SHIFT) +#define PWR_CR1_DBP_SHIFT (8) /* Disable Backup Domain Write Protection */ +#define PWR_CR1_DBP (0x1 << PWR_CR1_DBP_SHIFT) +#define PWR_CR1_LPMS_SHIFT (0) /* Low Power Mode Selection */ +#define PWR_CR1_LPMS_MASK (0x7 << PWR_CR1_LPMS_SHIFT) +# define PWR_CR1_LPMS_STOP_0 (0x0 << PWR_CR1_LPMS_SHIFT) /* Stop 0 Mode */ +# define PWR_CR1_LPMS_STOP_1 (0x1 << PWR_CR1_LPMS_SHIFT) /* Stop 1 Mode */ +# define PWR_CR1_LPMS_STANDBY (0x3 << PWR_CR1_LPMS_SHIFT) /* Standby Mode */ +# define PWR_CR1_LPMS_SHUTDOWN (0x4 << PWR_CR1_LPMS_SHIFT) /* Shutdown Mode */ + +/* PWR Power Control Register 2 (CR2) */ + +#define PWR_CR2_PVDE (1 << 0) /* Power Voltage Detector Enable */ +#define PWR_CR2_PLS_SHIFT (1) /* Power Voltage Detector Level Selection */ +#define PWR_CR2_PLS_MASK (0x7 << PWR_CR2_PLS_SHIFT) +# define PWR_CR2_PLS_0 (0x0 << PWR_CR2_PLS_SHIFT) +# define PWR_CR2_PLS_1 (0x1 << PWR_CR2_PLS_SHIFT) +# define PWR_CR2_PLS_2 (0x2 << PWR_CR2_PLS_SHIFT) +# define PWR_CR2_PLS_3 (0x3 << PWR_CR2_PLS_SHIFT) +# define PWR_CR2_PLS_4 (0x4 << PWR_CR2_PLS_SHIFT) +# define PWR_CR2_PLS_5 (0x5 << PWR_CR2_PLS_SHIFT) +# define PWR_CR2_PLS_6 (0x6 << PWR_CR2_PLS_SHIFT) +# define PWR_CR2_PLS_7 (0x7 << PWR_CR2_PLS_SHIFT) +#define PWR_CR2_PVMEN1 (1 << 6) /* Peripheral Voltage Monitoring 3 Enable (VDDA vs ADC or COMP Minimum Voltage) */ +#define PWR_CR2_PVMEN2 (1 << 7) /* Peripheral Voltage Monitoring 4 Enable (VDDA vs DAC 1Msps or 15Msps Minimum Voltage) */ + +/* PWR Power Control Register 3 (CR3) */ + +#define PWR_CR3_EWUP1 (1 << 0) /* Enable Wake Up Pin WKUP1 */ +#define PWR_CR3_EWUP2 (1 << 1) /* Enable Wake Up Pin WKUP2 */ +#define PWR_CR3_EWUP3 (1 << 2) /* Enable Wake Up Pin WKUP3 */ +#define PWR_CR3_EWUP4 (1 << 3) /* Enable Wake Up Pin WKUP4 */ +#define PWR_CR3_EWUP5 (1 << 4) /* Enable Wake Up Pin WKUP5 */ +#define PWR_CR3_RRS (1 << 8) /* SRAM2 Retention In Standby Mode */ +#define PWR_CR3_APC (1 << 10) /* Apply Pull Up And Pull Down Configuration */ +#define PWR_CR3_UCPD1_STDBY (1 << 13) /* USB Type C And Power Delivery Standby Mode */ +#define PWR_CR3_UCPD1_DBDIS (1 << 14) /* USB Type C And Power Delivery Dead Battery Disable */ +#define PWR_CR3_EIWUL (1 << 15) /* Enable Internal Wake Up Line */ + +/* PWR Power Control Register 4 (CR4) */ + +#define PWR_CR4_WP1 (1 << 0) /* Wake Up Pin WKUP1 polarity */ +#define PWR_CR4_WP2 (1 << 1) /* Wake Up Pin WKUP2 polarity */ +#define PWR_CR4_WP3 (1 << 2) /* Wake Up Pin WKUP3 polarity */ +#define PWR_CR4_WP4 (1 << 3) /* Wake Up Pin WKUP4 polarity */ +#define PWR_CR4_WP5 (1 << 4) /* Wake Up Pin WKUP5 polarity */ +#define PWR_CR4_VBE (1 << 8) /* VBAT Battery charging Enable */ +#define PWR_CR4_VBRS (1 << 9) /* VBAT Battery charging Resistor Selection */ + +/* PWR Power Status Register 1 (SR1) */ + +#define PWR_SR1_WUF_SHIFT (0) /* Wake Up Flags */ +#define PWR_SR1_WUF_MASK (0x1f << PWR_SR1_WUF_SHIFT) +# define PWR_SR1_WUF1 (0x1 << PWR_SR1_WUF_SHIFT) /* Wake Up Flag 1 */ +# define PWR_SR1_WUF2 (0x2 << PWR_SR1_WUF_SHIFT) /* Wake Up Flag 2 */ +# define PWR_SR1_WUF3 (0x4 << PWR_SR1_WUF_SHIFT) /* Wake Up Flag 3 */ +# define PWR_SR1_WUF4 (0x8 << PWR_SR1_WUF_SHIFT) /* Wake Up Flag 4 */ +# define PWR_SR1_WUF5 (0x10 << PWR_SR1_WUF_SHIFT) /* Wake Up Flag 5 */ +#define PWR_SR1_SBF (1 << 8) /* Stand-By Flag */ +#define PWR_SR1_WUFI (1 << 15) /* Wake Up Flag Internal */ + +/* PWR Power Status Register 2 (SR2) */ + +#define PWR_SR2_FLASHRDY (1 << 7) /* Flash Ready Flag */ +#define PWR_SR2_REGLPS (1 << 8) /* Low-power Regulator Started */ +#define PWR_SR2_REGLPF (1 << 9) /* Low-power Regulator Flag */ +#define PWR_SR2_VOSF (1 << 10) /* Voltage Scaling Flag */ +#define PWR_SR2_PVDO (1 << 11) /* Power Voltage Detector Output */ +#define PWR_SR2_PVMO1 (1 << 12) /* Peripheral Voltage Monitoring Output 1 */ +#define PWR_SR2_PVMO2 (1 << 13) /* Peripheral Voltage Monitoring Output 2 */ +#define PWR_SR2_PVMO3 (1 << 14) /* Peripheral Voltage Monitoring Output 3 */ +#define PWR_SR2_PVMO4 (1 << 15) /* Peripheral Voltage Monitoring Output 4 */ + +/* PWR Power Status Reset Register (SCR) */ + +#define PWR_SCR_CWUF_SHIFT (0) /* Clear Wake Up Flags */ +#define PWR_SCR_CWUF (0x1f << PWR_SCR_CWUF_SHIFT) +# define PWR_SCR_CWUF1 (0x1 << PWR_SCR_CWUF_SHIFT) /* Clear Wake Up Flag 1 */ +# define PWR_SCR_CWUF2 (0x2 << PWR_SCR_CWUF_SHIFT) /* Clear Wake Up Flag 2 */ +# define PWR_SCR_CWUF3 (0x4 << PWR_SCR_CWUF_SHIFT) /* Clear Wake Up Flag 3 */ +# define PWR_SCR_CWUF4 (0x8 << PWR_SCR_CWUF_SHIFT) /* Clear Wake Up Flag 4 */ +# define PWR_SCR_CWUF5 (0x10 << PWR_SCR_CWUF_SHIFT) /* Clear Wake Up Flag 5 */ +#define PWR_SCR_CSBF (1 << 8) /* Clear Standby Flag */ + +/* Power Port A Pull Up Control Register (PUCRA) */ + +#define PWR_PUCRA_PA0 (1 << 0) /* PA0 Pull Up Control Bit */ +#define PWR_PUCRA_PA1 (1 << 1) /* PA1 Pull Up Control Bit */ +#define PWR_PUCRA_PA2 (1 << 2) /* PA2 Pull Up Control Bit */ +#define PWR_PUCRA_PA3 (1 << 3) /* PA3 Pull Up Control Bit */ +#define PWR_PUCRA_PA4 (1 << 4) /* PA4 Pull Up Control Bit */ +#define PWR_PUCRA_PA5 (1 << 5) /* PA5 Pull Up Control Bit */ +#define PWR_PUCRA_PA6 (1 << 6) /* PA6 Pull Up Control Bit */ +#define PWR_PUCRA_PA7 (1 << 7) /* PA7 Pull Up Control Bit */ +#define PWR_PUCRA_PA8 (1 << 8) /* PA8 Pull Up Control Bit */ +#define PWR_PUCRA_PA9 (1 << 9) /* PA9 Pull Up Control Bit */ +#define PWR_PUCRA_PA10 (1 << 10) /* PA10 Pull Up Control Bit */ +#define PWR_PUCRA_PA11 (1 << 11) /* PA11 Pull Up Control Bit */ +#define PWR_PUCRA_PA12 (1 << 12) /* PA12 Pull Up Control Bit */ +#define PWR_PUCRA_PA13 (1 << 13) /* PA13 Pull Up Control Bit */ +#define PWR_PUCRA_PA14 (1 << 14) /* PA14 Pull Up Control Bit */ +#define PWR_PUCRA_PA15 (1 << 15) /* PA15 Pull Up Control Bit */ + +/* Power Port A Pull Down Control Register (PDCRA) */ + +#define PWR_PDCRA_PA0 (1 << 0) /* PA0 Pull Down Control Bit */ +#define PWR_PDCRA_PA1 (1 << 1) /* PA1 Pull Down Control Bit */ +#define PWR_PDCRA_PA2 (1 << 2) /* PA2 Pull Down Control Bit */ +#define PWR_PDCRA_PA3 (1 << 3) /* PA3 Pull Down Control Bit */ +#define PWR_PDCRA_PA4 (1 << 4) /* PA4 Pull Down Control Bit */ +#define PWR_PDCRA_PA5 (1 << 5) /* PA5 Pull Down Control Bit */ +#define PWR_PDCRA_PA6 (1 << 6) /* PA6 Pull Down Control Bit */ +#define PWR_PDCRA_PA7 (1 << 7) /* PA7 Pull Down Control Bit */ +#define PWR_PDCRA_PA8 (1 << 8) /* PA8 Pull Down Control Bit */ +#define PWR_PDCRA_PA9 (1 << 9) /* PA9 Pull Down Control Bit */ +#define PWR_PDCRA_PA10 (1 << 10) /* PA10 Pull Down Control Bit */ +#define PWR_PDCRA_PA11 (1 << 11) /* PA11 Pull Down Control Bit */ +#define PWR_PDCRA_PA12 (1 << 12) /* PA12 Pull Down Control Bit */ +#define PWR_PDCRA_PA13 (1 << 13) /* PA13 Pull Down Control Bit */ +#define PWR_PDCRA_PA14 (1 << 14) /* PA14 Pull Down Control Bit */ +#define PWR_PDCRA_PA15 (1 << 15) /* PA15 Pull Down Control Bit */ + +/* Power Port B Pull Up Control Register (PUCRB) */ + +#define PWR_PUCRB_PB0 (1 << 0) /* PB0 Pull Up Control Bit */ +#define PWR_PUCRB_PB1 (1 << 1) /* PB1 Pull Up Control Bit */ +#define PWR_PUCRB_PB2 (1 << 2) /* PB2 Pull Up Control Bit */ +#define PWR_PUCRB_PB3 (1 << 3) /* PB3 Pull Up Control Bit */ +#define PWR_PUCRB_PB4 (1 << 4) /* PB4 Pull Up Control Bit */ +#define PWR_PUCRB_PB5 (1 << 5) /* PB5 Pull Up Control Bit */ +#define PWR_PUCRB_PB6 (1 << 6) /* PB6 Pull Up Control Bit */ +#define PWR_PUCRB_PB7 (1 << 7) /* PB7 Pull Up Control Bit */ +#define PWR_PUCRB_PB8 (1 << 8) /* PB8 Pull Up Control Bit */ +#define PWR_PUCRB_PB9 (1 << 9) /* PB9 Pull Up Control Bit */ +#define PWR_PUCRB_PB10 (1 << 10) /* PB10 Pull Up Control Bit */ +#define PWR_PUCRB_PB11 (1 << 11) /* PB11 Pull Up Control Bit */ +#define PWR_PUCRB_PB12 (1 << 12) /* PB12 Pull Up Control Bit */ +#define PWR_PUCRB_PB13 (1 << 13) /* PB13 Pull Up Control Bit */ +#define PWR_PUCRB_PB14 (1 << 14) /* PB14 Pull Up Control Bit */ +#define PWR_PUCRB_PB15 (1 << 15) /* PB15 Pull Up Control Bit */ + +/* Power Port B Pull Down Control Register (PDCRB) */ + +#define PWR_PDCRB_PB0 (1 << 0) /* PB0 Pull Down Control Bit */ +#define PWR_PDCRB_PB1 (1 << 1) /* PB1 Pull Down Control Bit */ +#define PWR_PDCRB_PB2 (1 << 2) /* PB2 Pull Down Control Bit */ +#define PWR_PDCRB_PB3 (1 << 3) /* PB3 Pull Down Control Bit */ +#define PWR_PDCRB_PB4 (1 << 4) /* PB4 Pull Down Control Bit */ +#define PWR_PDCRB_PB5 (1 << 5) /* PB5 Pull Down Control Bit */ +#define PWR_PDCRB_PB6 (1 << 6) /* PB6 Pull Down Control Bit */ +#define PWR_PDCRB_PB7 (1 << 7) /* PB7 Pull Down Control Bit */ +#define PWR_PDCRB_PB8 (1 << 8) /* PB8 Pull Down Control Bit */ +#define PWR_PDCRB_PB9 (1 << 9) /* PB9 Pull Down Control Bit */ +#define PWR_PDCRB_PB10 (1 << 10) /* PB10 Pull Down Control Bit */ +#define PWR_PDCRB_PB11 (1 << 11) /* PB11 Pull Down Control Bit */ +#define PWR_PDCRB_PB12 (1 << 12) /* PB12 Pull Down Control Bit */ +#define PWR_PDCRB_PB13 (1 << 13) /* PB13 Pull Down Control Bit */ +#define PWR_PDCRB_PB14 (1 << 14) /* PB14 Pull Down Control Bit */ +#define PWR_PDCRB_PB15 (1 << 15) /* PB15 Pull Down Control Bit */ + +/* Power Port C Pull Up Control Register (PUCRC) */ + +#define PWR_PUCRC_PC0 (1 << 0) /* PC0 Pull Up Control Bit */ +#define PWR_PUCRC_PC1 (1 << 1) /* PC1 Pull Up Control Bit */ +#define PWR_PUCRC_PC2 (1 << 2) /* PC2 Pull Up Control Bit */ +#define PWR_PUCRC_PC3 (1 << 3) /* PC3 Pull Up Control Bit */ +#define PWR_PUCRC_PC4 (1 << 4) /* PC4 Pull Up Control Bit */ +#define PWR_PUCRC_PC5 (1 << 5) /* PC5 Pull Up Control Bit */ +#define PWR_PUCRC_PC6 (1 << 6) /* PC6 Pull Up Control Bit */ +#define PWR_PUCRC_PC7 (1 << 7) /* PC7 Pull Up Control Bit */ +#define PWR_PUCRC_PC8 (1 << 8) /* PC8 Pull Up Control Bit */ +#define PWR_PUCRC_PC9 (1 << 9) /* PC9 Pull Up Control Bit */ +#define PWR_PUCRC_PC10 (1 << 10) /* PC10 Pull Up Control Bit */ +#define PWR_PUCRC_PC11 (1 << 11) /* PC11 Pull Up Control Bit */ +#define PWR_PUCRC_PC12 (1 << 12) /* PC12 Pull Up Control Bit */ +#define PWR_PUCRC_PC13 (1 << 13) /* PC13 Pull Up Control Bit */ +#define PWR_PUCRC_PC14 (1 << 14) /* PC14 Pull Up Control Bit */ +#define PWR_PUCRC_PC15 (1 << 15) /* PC15 Pull Up Control Bit */ + +/* Power Port C Pull Down Control Register (PDCRC) */ + +#define PWR_PDCRC_PC0 (1 << 0) /* PC0 Pull Down Control Bit */ +#define PWR_PDCRC_PC1 (1 << 1) /* PC1 Pull Down Control Bit */ +#define PWR_PDCRC_PC2 (1 << 2) /* PC2 Pull Down Control Bit */ +#define PWR_PDCRC_PC3 (1 << 3) /* PC3 Pull Down Control Bit */ +#define PWR_PDCRC_PC4 (1 << 4) /* PC4 Pull Down Control Bit */ +#define PWR_PDCRC_PC5 (1 << 5) /* PC5 Pull Down Control Bit */ +#define PWR_PDCRC_PC6 (1 << 6) /* PC6 Pull Down Control Bit */ +#define PWR_PDCRC_PC7 (1 << 7) /* PC7 Pull Down Control Bit */ +#define PWR_PDCRC_PC8 (1 << 8) /* PC8 Pull Down Control Bit */ +#define PWR_PDCRC_PC9 (1 << 9) /* PC9 Pull Down Control Bit */ +#define PWR_PDCRC_PC10 (1 << 10) /* PC10 Pull Down Control Bit */ +#define PWR_PDCRC_PC11 (1 << 11) /* PC11 Pull Down Control Bit */ +#define PWR_PDCRC_PC12 (1 << 12) /* PC12 Pull Down Control Bit */ +#define PWR_PDCRC_PC13 (1 << 13) /* PC13 Pull Down Control Bit */ +#define PWR_PDCRC_PC14 (1 << 14) /* PC14 Pull Down Control Bit */ +#define PWR_PDCRC_PC15 (1 << 15) /* PC15 Pull Down Control Bit */ + +/* Power Port D Pull Up Control Register (PUCRD) */ + +#define PWR_PUCRD_PD0 (1 << 0) /* PD0 Pull Up Control Bit */ +#define PWR_PUCRD_PD1 (1 << 1) /* PD1 Pull Up Control Bit */ +#define PWR_PUCRD_PD2 (1 << 2) /* PD2 Pull Up Control Bit */ +#define PWR_PUCRD_PD3 (1 << 3) /* PD3 Pull Up Control Bit */ +#define PWR_PUCRD_PD4 (1 << 4) /* PD4 Pull Up Control Bit */ +#define PWR_PUCRD_PD5 (1 << 5) /* PD5 Pull Up Control Bit */ +#define PWR_PUCRD_PD6 (1 << 6) /* PD6 Pull Up Control Bit */ +#define PWR_PUCRD_PD7 (1 << 7) /* PD7 Pull Up Control Bit */ +#define PWR_PUCRD_PD8 (1 << 8) /* PD8 Pull Up Control Bit */ +#define PWR_PUCRD_PD9 (1 << 9) /* PD9 Pull Up Control Bit */ +#define PWR_PUCRD_PD10 (1 << 10) /* PD10 Pull Up Control Bit */ +#define PWR_PUCRD_PD11 (1 << 11) /* PD11 Pull Up Control Bit */ +#define PWR_PUCRD_PD12 (1 << 12) /* PD12 Pull Up Control Bit */ +#define PWR_PUCRD_PD13 (1 << 13) /* PD13 Pull Up Control Bit */ +#define PWR_PUCRD_PD14 (1 << 14) /* PD14 Pull Up Control Bit */ +#define PWR_PUCRD_PD15 (1 << 15) /* PD15 Pull Up Control Bit */ + +/* Power Port D Pull Down Control Register (PDCRD) */ + +#define PWR_PDCRD_PD0 (1 << 0) /* PD0 Pull Down Control Bit */ +#define PWR_PDCRD_PD1 (1 << 1) /* PD1 Pull Down Control Bit */ +#define PWR_PDCRD_PD2 (1 << 2) /* PD2 Pull Down Control Bit */ +#define PWR_PDCRD_PD3 (1 << 3) /* PD3 Pull Down Control Bit */ +#define PWR_PDCRD_PD4 (1 << 4) /* PD4 Pull Down Control Bit */ +#define PWR_PDCRD_PD5 (1 << 5) /* PD5 Pull Down Control Bit */ +#define PWR_PDCRD_PD6 (1 << 6) /* PD6 Pull Down Control Bit */ +#define PWR_PDCRD_PD7 (1 << 7) /* PD7 Pull Down Control Bit */ +#define PWR_PDCRD_PD8 (1 << 8) /* PD8 Pull Down Control Bit */ +#define PWR_PDCRD_PD9 (1 << 9) /* PD9 Pull Down Control Bit */ +#define PWR_PDCRD_PD10 (1 << 10) /* PD10 Pull Down Control Bit */ +#define PWR_PDCRD_PD11 (1 << 11) /* PD11 Pull Down Control Bit */ +#define PWR_PDCRD_PD12 (1 << 12) /* PD12 Pull Down Control Bit */ +#define PWR_PDCRD_PD13 (1 << 13) /* PD13 Pull Down Control Bit */ +#define PWR_PDCRD_PD14 (1 << 14) /* PD14 Pull Down Control Bit */ +#define PWR_PDCRD_PD15 (1 << 15) /* PD15 Pull Down Control Bit */ + +/* Power Port E Pull Up Control Register (PUCRE) */ + +#define PWR_PUCRE_PE0 (1 << 0) /* PE0 Pull Up Control Bit */ +#define PWR_PUCRE_PE1 (1 << 1) /* PE1 Pull Up Control Bit */ +#define PWR_PUCRE_PE2 (1 << 2) /* PE2 Pull Up Control Bit */ +#define PWR_PUCRE_PE3 (1 << 3) /* PE3 Pull Up Control Bit */ +#define PWR_PUCRE_PE4 (1 << 4) /* PE4 Pull Up Control Bit */ +#define PWR_PUCRE_PE5 (1 << 5) /* PE5 Pull Up Control Bit */ +#define PWR_PUCRE_PE6 (1 << 6) /* PE6 Pull Up Control Bit */ +#define PWR_PUCRE_PE7 (1 << 7) /* PE7 Pull Up Control Bit */ +#define PWR_PUCRE_PE8 (1 << 8) /* PE8 Pull Up Control Bit */ +#define PWR_PUCRE_PE9 (1 << 9) /* PE9 Pull Up Control Bit */ +#define PWR_PUCRE_PE10 (1 << 10) /* PE10 Pull Up Control Bit */ +#define PWR_PUCRE_PE11 (1 << 11) /* PE11 Pull Up Control Bit */ +#define PWR_PUCRE_PE12 (1 << 12) /* PE12 Pull Up Control Bit */ +#define PWR_PUCRE_PE13 (1 << 13) /* PE13 Pull Up Control Bit */ +#define PWR_PUCRE_PE14 (1 << 14) /* PE14 Pull Up Control Bit */ +#define PWR_PUCRE_PE15 (1 << 15) /* PE15 Pull Up Control Bit */ + +/* Power Port E Pull Down Control Register (PDCRE) */ + +#define PWR_PDCRE_PE0 (1 << 0) /* PE0 Pull Down Control Bit */ +#define PWR_PDCRE_PE1 (1 << 1) /* PE1 Pull Down Control Bit */ +#define PWR_PDCRE_PE2 (1 << 2) /* PE2 Pull Down Control Bit */ +#define PWR_PDCRE_PE3 (1 << 3) /* PE3 Pull Down Control Bit */ +#define PWR_PDCRE_PE4 (1 << 4) /* PE4 Pull Down Control Bit */ +#define PWR_PDCRE_PE5 (1 << 5) /* PE5 Pull Down Control Bit */ +#define PWR_PDCRE_PE6 (1 << 6) /* PE6 Pull Down Control Bit */ +#define PWR_PDCRE_PE7 (1 << 7) /* PE7 Pull Down Control Bit */ +#define PWR_PDCRE_PE8 (1 << 8) /* PE8 Pull Down Control Bit */ +#define PWR_PDCRE_PE9 (1 << 9) /* PE9 Pull Down Control Bit */ +#define PWR_PDCRE_PE10 (1 << 10) /* PE10 Pull Down Control Bit */ +#define PWR_PDCRE_PE11 (1 << 11) /* PE11 Pull Down Control Bit */ +#define PWR_PDCRE_PE12 (1 << 12) /* PE12 Pull Down Control Bit */ +#define PWR_PDCRE_PE13 (1 << 13) /* PE13 Pull Down Control Bit */ +#define PWR_PDCRE_PE14 (1 << 14) /* PE14 Pull Down Control Bit */ +#define PWR_PDCRE_PE15 (1 << 15) /* PE15 Pull Down Control Bit */ + +/* Power Port F Pull Up Control Register (PUCRF) */ + +#define PWR_PUCRF_PF0 (1 << 0) /* PF0 Pull Up Control Bit */ +#define PWR_PUCRF_PF1 (1 << 1) /* PF1 Pull Up Control Bit */ +#define PWR_PUCRF_PF2 (1 << 2) /* PF2 Pull Up Control Bit */ +#define PWR_PUCRF_PF3 (1 << 3) /* PF3 Pull Up Control Bit */ +#define PWR_PUCRF_PF4 (1 << 4) /* PF4 Pull Up Control Bit */ +#define PWR_PUCRF_PF5 (1 << 5) /* PF5 Pull Up Control Bit */ +#define PWR_PUCRF_PF6 (1 << 6) /* PF6 Pull Up Control Bit */ +#define PWR_PUCRF_PF7 (1 << 7) /* PF7 Pull Up Control Bit */ +#define PWR_PUCRF_PF8 (1 << 8) /* PF8 Pull Up Control Bit */ +#define PWR_PUCRF_PF9 (1 << 9) /* PF9 Pull Up Control Bit */ +#define PWR_PUCRF_PF10 (1 << 10) /* PF10 Pull Up Control Bit */ +#define PWR_PUCRF_PF11 (1 << 11) /* PF11 Pull Up Control Bit */ +#define PWR_PUCRF_PF12 (1 << 12) /* PF12 Pull Up Control Bit */ +#define PWR_PUCRF_PF13 (1 << 13) /* PF13 Pull Up Control Bit */ +#define PWR_PUCRF_PF14 (1 << 14) /* PF14 Pull Up Control Bit */ +#define PWR_PUCRF_PF15 (1 << 15) /* PF15 Pull Up Control Bit */ + +/* Power Port F Pull Down Control Register (PDCRF) */ + +#define PWR_PDCRF_PF0 (1 << 0) /* PF0 Pull Down Control Bit */ +#define PWR_PDCRF_PF1 (1 << 1) /* PF1 Pull Down Control Bit */ +#define PWR_PDCRF_PF2 (1 << 2) /* PF2 Pull Down Control Bit */ +#define PWR_PDCRF_PF3 (1 << 3) /* PF3 Pull Down Control Bit */ +#define PWR_PDCRF_PF4 (1 << 4) /* PF4 Pull Down Control Bit */ +#define PWR_PDCRF_PF5 (1 << 5) /* PF5 Pull Down Control Bit */ +#define PWR_PDCRF_PF6 (1 << 6) /* PF6 Pull Down Control Bit */ +#define PWR_PDCRF_PF7 (1 << 7) /* PF7 Pull Down Control Bit */ +#define PWR_PDCRF_PF8 (1 << 8) /* PF8 Pull Down Control Bit */ +#define PWR_PDCRF_PF9 (1 << 9) /* PF9 Pull Down Control Bit */ +#define PWR_PDCRF_PF10 (1 << 10) /* PF10 Pull Down Control Bit */ +#define PWR_PDCRF_PF11 (1 << 11) /* PF11 Pull Down Control Bit */ +#define PWR_PDCRF_PF12 (1 << 12) /* PF12 Pull Down Control Bit */ +#define PWR_PDCRF_PF13 (1 << 13) /* PF13 Pull Down Control Bit */ +#define PWR_PDCRF_PF14 (1 << 14) /* PF14 Pull Down Control Bit */ +#define PWR_PDCRF_PF15 (1 << 15) /* PF15 Pull Down Control Bit */ + +/* Power Port G Pull Up Control Register (PUCRG) */ + +#define PWR_PUCRG_PG0 (1 << 0) /* PG0 Pull Up Control Bit */ +#define PWR_PUCRG_PG1 (1 << 1) /* PG1 Pull Up Control Bit */ +#define PWR_PUCRG_PG2 (1 << 2) /* PG2 Pull Up Control Bit */ +#define PWR_PUCRG_PG3 (1 << 3) /* PG3 Pull Up Control Bit */ +#define PWR_PUCRG_PG4 (1 << 4) /* PG4 Pull Up Control Bit */ +#define PWR_PUCRG_PG5 (1 << 5) /* PG5 Pull Up Control Bit */ +#define PWR_PUCRG_PG6 (1 << 6) /* PG6 Pull Up Control Bit */ +#define PWR_PUCRG_PG7 (1 << 7) /* PG7 Pull Up Control Bit */ +#define PWR_PUCRG_PG8 (1 << 8) /* PG8 Pull Up Control Bit */ +#define PWR_PUCRG_PG9 (1 << 9) /* PG9 Pull Up Control Bit */ +#define PWR_PUCRG_PG10 (1 << 10) /* PG10 Pull Up Control Bit */ +#define PWR_PUCRG_PG11 (1 << 11) /* PG11 Pull Up Control Bit */ +#define PWR_PUCRG_PG12 (1 << 12) /* PG12 Pull Up Control Bit */ +#define PWR_PUCRG_PG13 (1 << 13) /* PG13 Pull Up Control Bit */ +#define PWR_PUCRG_PG14 (1 << 14) /* PG14 Pull Up Control Bit */ +#define PWR_PUCRG_PG15 (1 << 15) /* PG15 Pull Up Control Bit */ + +/* Power Port G Pull Down Control Register (PDCRG) */ + +#define PWR_PDCRG_PG0 (1 << 0) /* PG0 Pull Down Control Bit */ +#define PWR_PDCRG_PG1 (1 << 1) /* PG1 Pull Down Control Bit */ +#define PWR_PDCRG_PG2 (1 << 2) /* PG2 Pull Down Control Bit */ +#define PWR_PDCRG_PG3 (1 << 3) /* PG3 Pull Down Control Bit */ +#define PWR_PDCRG_PG4 (1 << 4) /* PG4 Pull Down Control Bit */ +#define PWR_PDCRG_PG5 (1 << 5) /* PG5 Pull Down Control Bit */ +#define PWR_PDCRG_PG6 (1 << 6) /* PG6 Pull Down Control Bit */ +#define PWR_PDCRG_PG7 (1 << 7) /* PG7 Pull Down Control Bit */ +#define PWR_PDCRG_PG8 (1 << 8) /* PG8 Pull Down Control Bit */ +#define PWR_PDCRG_PG9 (1 << 9) /* PG9 Pull Down Control Bit */ +#define PWR_PDCRG_PG10 (1 << 10) /* PG10 Pull Down Control Bit */ +#define PWR_PDCRG_PG11 (1 << 11) /* PG11 Pull Down Control Bit */ +#define PWR_PDCRG_PG12 (1 << 12) /* PG12 Pull Down Control Bit */ +#define PWR_PDCRG_PG13 (1 << 13) /* PG13 Pull Down Control Bit */ +#define PWR_PDCRG_PG14 (1 << 14) /* PG14 Pull Down Control Bit */ +#define PWR_PDCRG_PG15 (1 << 15) /* PG15 Pull Down Control Bit */ + +/* PWR power control register 5 (CR5) */ + +#define PWR_CR5_R1MODE_SHIFT (8) +#define PWR_CR5_R1MODE (0x1 << PWR_CR5_R1MODE_SHIFT) /* Main Regulator Range 1 Mode */ + +#endif /* __ARCH_ARM_SRC_STM32H7_HARDWARE_STM32H7X3XX_PWR_H */ diff --git a/arch/arm/src/stm32/hardware/stm32g47xxx_rcc.h b/arch/arm/src/stm32/hardware/stm32g47xxx_rcc.h new file mode 100644 index 0000000000..5dfc9c4e70 --- /dev/null +++ b/arch/arm/src/stm32/hardware/stm32g47xxx_rcc.h @@ -0,0 +1,677 @@ +/**************************************************************************** + * arch/arm/src/stm32/hardware/stm32g47xxx_rcc.h + * Register offsets, addresses, and bitfield defines for STM32G47xxx RCC + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +#ifndef __ARCH_ARM_SRC_STM32_HARDWARE_STM32G47XXX_RCC_H +#define __ARCH_ARM_SRC_STM32_HARDWARE_STM32G47XXX_RCC_H + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +/* Abbreviations: + * HSE - High Speed External (clock) + * HSI - High Speed Internal (clock) + * POR - Power On Reset + * RCC - Reset and Clock Control + */ + +/* Register Offsets *********************************************************/ + +#define STM32_RCC_CR_OFFSET 0x0000 /* RCC Clock Control */ +#define STM32_RCC_ICSCR_OFFSET 0x0004 /* RCC Internal Clock Sources Calibration */ +#define STM32_RCC_CFGR_OFFSET 0x0008 /* RCC Clock Configuration */ +#define STM32_RCC_PLLCFGR_OFFSET 0x000c /* RCC PLL configuration register */ + /* Offset 0x0010 Reserved */ + /* Offset 0x0014 Reserved */ +#define STM32_RCC_CIER_OFFSET 0x0018 /* RCC Clock Interrupt Enable */ +#define STM32_RCC_CIFR_OFFSET 0x001c /* RCC Clock Interrupt Flag */ +#define STM32_RCC_CICR_OFFSET 0x0020 /* RCC Clock Interrupt Clear */ + /* Offset 0x0024 Reserved */ +#define STM32_RCC_AHB1RSTR_OFFSET 0x0028 /* RCC AHB1 Peripheral Reset */ +#define STM32_RCC_AHB2RSTR_OFFSET 0x002c /* RCC AHB2 Peripheral Reset */ +#define STM32_RCC_AHB3RSTR_OFFSET 0x0030 /* RCC AHB3 Peripheral Reset */ + /* Offset 0x0034 Reserved */ +#define STM32_RCC_APB1RSTR1_OFFSET 0x0038 /* RCC APB1 Peripheral Reset Register 1 */ +#define STM32_RCC_APB1RSTR2_OFFSET 0x003c /* RCC APB1 Peripheral Reset Register 2 */ +#define STM32_RCC_APB2RSTR_OFFSET 0x0040 /* RCC APB2 Peripheral Reset */ + /* Offset 0x0044 Reserved */ +#define STM32_RCC_AHB1ENR_OFFSET 0x0048 /* RCC AHB1 Peripheral Clock Enable */ +#define STM32_RCC_AHB2ENR_OFFSET 0x004c /* RCC AHB2 Peripheral Clock Enable */ +#define STM32_RCC_AHB3ENR_OFFSET 0x0050 /* RCC AHB3 Peripheral Clock Enable */ + /* Offset 0x0054 Reserved */ +#define STM32_RCC_APB1ENR1_OFFSET 0x0058 /* RCC APB1 Peripheral Clock Enable Register 1 */ +#define STM32_RCC_APB1ENR2_OFFSET 0x005c /* RCC APB1 Peripheral Clock Enable Register 2 */ +#define STM32_RCC_APB2ENR_OFFSET 0x0060 /* RCC APB2 Peripheral Clock Enable */ + /* Offset 0x0064 Reserved */ +#define STM32_RCC_AHB1SMENR_OFFSET 0x0068 /* RCC AHB1 Peripheral Clock Enable in Sleep/Stop Modes */ +#define STM32_RCC_AHB2SMENR_OFFSET 0x006c /* RCC AHB2 Peripheral Clock Enable in Sleep/Stop Modes */ +#define STM32_RCC_AHB3SMENR_OFFSET 0x0070 /* RCC AHB3 Peripheral Clock Enable in Sleep/Stop Modes */ + /* Offset 0x0074 Reserved */ +#define STM32_RCC_APB1SMENR1_OFFSET 0x0078 /* RCC APB1 Peripheral Clock Enable in Sleep/Stop Modes (1 of 2) */ +#define STM32_RCC_APB1SMENR2_OFFSET 0x007c /* RCC APB1 Peripheral Clock Enable in Sleep/Stop Modes (2 of 2) */ +#define STM32_RCC_APB2SMENR_OFFSET 0x0080 /* RCC APB2 Peripheral Clock Enable in Sleep/Stop Modes */ + /* Offset 0x0084 Reserved */ +#define STM32_RCC_CCIPR_OFFSET 0x0088 /* RCC Peripherals Independent Clock Configuration (1 of 2, see CCIPR2) */ + /* Offset 0x008c Reserved */ +#define STM32_RCC_BDCR_OFFSET 0x0090 /* RCC RTC Domain Control Register */ +#define STM32_RCC_CSR_OFFSET 0x0094 /* RCC Clock Control / Status Register */ +#define STM32_RCC_CRRCR_OFFSET 0x0098 /* RCC Clock Recovery RC Register */ +#define STM32_RCC_CCIPR2_OFFSET 0x009c /* RCC Peripherals Independent Clock Configuration (2 of 2, see CCIPR) */ + +/* Register Addresses *******************************************************/ + +#define STM32_RCC_CR (STM32_RCC_BASE + STM32_RCC_CR_OFFSET) +#define STM32_RCC_ICSCR (STM32_RCC_BASE + STM32_RCC_ICSCR_OFFSET) +#define STM32_RCC_CFGR (STM32_RCC_BASE + STM32_RCC_CFGR_OFFSET) +#define STM32_RCC_PLLCFGR (STM32_RCC_BASE + STM32_RCC_PLLCFGR_OFFSET) +#define STM32_RCC_CIER (STM32_RCC_BASE + STM32_RCC_CIER_OFFSET) +#define STM32_RCC_CIFR (STM32_RCC_BASE + STM32_RCC_CIFR_OFFSET) +#define STM32_RCC_CICR (STM32_RCC_BASE + STM32_RCC_CICR_OFFSET) +#define STM32_RCC_AHB1RSTR (STM32_RCC_BASE + STM32_RCC_AHB1RSTR_OFFSET) +#define STM32_RCC_AHB2RSTR (STM32_RCC_BASE + STM32_RCC_AHB2RSTR_OFFSET) +#define STM32_RCC_AHB3RSTR (STM32_RCC_BASE + STM32_RCC_AHB3RSTR_OFFSET) +#define STM32_RCC_APB1RSTR1 (STM32_RCC_BASE + STM32_RCC_APB1RSTR1_OFFSET) +#define STM32_RCC_APB1RSTR2 (STM32_RCC_BASE + STM32_RCC_APB1RSTR2_OFFSET) +#define STM32_RCC_APB2RSTR (STM32_RCC_BASE + STM32_RCC_APB2RSTR_OFFSET) +#define STM32_RCC_AHB1ENR (STM32_RCC_BASE + STM32_RCC_AHB1ENR_OFFSET) +#define STM32_RCC_AHB2ENR (STM32_RCC_BASE + STM32_RCC_AHB2ENR_OFFSET) +#define STM32_RCC_AHB3ENR (STM32_RCC_BASE + STM32_RCC_AHB3ENR_OFFSET) +#define STM32_RCC_APB1ENR1 (STM32_RCC_BASE + STM32_RCC_APB1ENR1_OFFSET) +#define STM32_RCC_APB1ENR2 (STM32_RCC_BASE + STM32_RCC_APB1ENR2_OFFSET) +#define STM32_RCC_APB2ENR (STM32_RCC_BASE + STM32_RCC_APB2ENR_OFFSET) +#define STM32_RCC_AHB1SMENR (STM32_RCC_BASE + STM32_RCC_AHB1SMENR_OFFSET) +#define STM32_RCC_AHB2SMENR (STM32_RCC_BASE + STM32_RCC_AHB2SMENR_OFFSET) +#define STM32_RCC_AHB3SMENR (STM32_RCC_BASE + STM32_RCC_AHB3SMENR_OFFSET) +#define STM32_RCC_APB1SMENR1 (STM32_RCC_BASE + STM32_RCC_APB1SMENR1_OFFSET) +#define STM32_RCC_APB1SMENR2 (STM32_RCC_BASE + STM32_RCC_APB1SMENR2_OFFSET) +#define STM32_RCC_APB2SMENR (STM32_RCC_BASE + STM32_RCC_APB2SMENR_OFFSET) +#define STM32_RCC_CCIPR (STM32_RCC_BASE + STM32_RCC_CCIPR_OFFSET) +#define STM32_RCC_BDCR (STM32_RCC_BASE + STM32_RCC_BDCR_OFFSET) +#define STM32_RCC_CSR (STM32_RCC_BASE + STM32_RCC_CSR_OFFSET) +#define STM32_RCC_CRRCR (STM32_RCC_BASE + STM32_RCC_CRRCR_OFFSET) +#define STM32_RCC_CCIPR2 (STM32_RCC_BASE + STM32_RCC_CCIPR2_OFFSET) + +/* Register Bitfield Definitions ********************************************/ + +/* CR - Clock Control Register */ + +#define RCC_CR_HSION (1 << 8) /* Bit 8: HSI16 clock enable */ +#define RCC_CR_HSIKERON (1 << 9) /* Bit 9: HSI16 always enable for peripheral kernel */ +#define RCC_CR_HSIRDY (1 << 10) /* Bit 10: HSI16 clock ready flag */ +#define RCC_CR_HSEON (1 << 16) /* Bit 16: HSE clock enable */ +#define RCC_CR_HSERDY (1 << 17) /* Bit 17: HSE clock ready flag */ +#define RCC_CR_HSEBYP (1 << 18) /* Bit 18: HSE crystal oscillator bypass */ +#define RCC_CR_CSSON (1 << 19) /* Bit 19: HSE clock security system enable */ +#define RCC_CR_PLLON (1 << 24) /* Bit 24: Main PLL enable */ +#define RCC_CR_PLLRDY (1 << 25) /* Bit 25: Main PLL ready */ + +#define RCC_CR_RESERVED_MASK 0xfcf0f8ff /* Bits 31-26, 23-20, 15-11, and 7-0 should be kept at reset value */ +#define RCC_CR_RESET 0x00000063 /* Value at POR */ + +/* ICSCR - Internal Clock Sources Calibration Register */ + +#define RCC_ICSCR_HSICAL_SHIFT (16) /* Bits 23-16: HSI16 calibration (factory programmed, read only) */ +#define RCC_ICSCR_HSICAL_MASK (0xff << RCC_ICSCR_HSICAL_SHIFT) + +#define RCC_ICSCR_HSITRIM_SHIFT (24) /* Bits 30-24: HSI16 clock trimming */ +#define RCC_ICSCR_HSITRIM_MASK (0x7f << RCC_ICSCR_HSITRIM_SHIFT) +#define RCC_ICSCR_HSITRIM_RESET (0x40 << RCC_ICSCR_HSITRIM_SHIFT) + +/* CFGR - Clock Configuration Register */ + +#define RCC_CFGR_SW_SHIFT (0) /* Bits 1-0: System clock switch */ +#define RCC_CFGR_SW_MASK (0x3 << RCC_CFGR_SW_SHIFT) +# define RCC_CFGR_SW_HSI (1 << RCC_CFGR_SW_SHIFT) +# define RCC_CFGR_SW_HSE (2 << RCC_CFGR_SW_SHIFT) +# define RCC_CFGR_SW_PLL (3 << RCC_CFGR_SW_SHIFT) +#define RCC_CFGR_SWS_SHIFT (2) /* Bits 3-2: System clock switch status */ +#define RCC_CFGR_SWS_MASK (0x3 << RCC_CFGR_SWS_SHIFT) +# define RCC_CFGR_SWS_HSI (1 << RCC_CFGR_SWS_SHIFT) +# define RCC_CFGR_SWS_HSE (2 << RCC_CFGR_SWS_SHIFT) +# define RCC_CFGR_SWS_PLL (3 << RCC_CFGR_SWS_SHIFT) +#define RCC_CFGR_HPRE_SHIFT (4) /* Bits 7-4: AHB prescaler */ +#define RCC_CFGR_HPRE_MASK (0xf << RCC_CFGR_HPRE_SHIFT) +# define RCC_CFGR_HPRE_SYSCLK (0 << RCC_CFGR_HPRE_SHIFT) +# define RCC_CFGR_HPRE_SYSCLKd2 (8 << RCC_CFGR_HPRE_SHIFT) +# define RCC_CFGR_HPRE_SYSCLKd4 (9 << RCC_CFGR_HPRE_SHIFT) +# define RCC_CFGR_HPRE_SYSCLKd8 (10 << RCC_CFGR_HPRE_SHIFT) +# define RCC_CFGR_HPRE_SYSCLKd16 (11 << RCC_CFGR_HPRE_SHIFT) +# define RCC_CFGR_HPRE_SYSCLKd64 (12 << RCC_CFGR_HPRE_SHIFT) +# define RCC_CFGR_HPRE_SYSCLKd128 (13 << RCC_CFGR_HPRE_SHIFT) +# define RCC_CFGR_HPRE_SYSCLKd256 (14 << RCC_CFGR_HPRE_SHIFT) +# define RCC_CFGR_HPRE_SYSCLKd512 (15 << RCC_CFGR_HPRE_SHIFT) +#define RCC_CFGR_PPRE1_SHIFT (8) /* Bits 10-8: AHB1 prescaler */ +#define RCC_CFGR_PPRE1_MASK (0x7 << RCC_CFGR_PPRE1_SHIFT) +# define RCC_CFGR_PPRE1_HCLK (0 << RCC_CFGR_PPRE1_SHIFT) +# define RCC_CFGR_PPRE1_HCLKd2 (4 << RCC_CFGR_PPRE1_SHIFT) +# define RCC_CFGR_PPRE1_HCLKd4 (5 << RCC_CFGR_PPRE1_SHIFT) +# define RCC_CFGR_PPRE1_HCLKd8 (6 << RCC_CFGR_PPRE1_SHIFT) +# define RCC_CFGR_PPRE1_HCLKd16 (7 << RCC_CFGR_PPRE1_SHIFT) +#define RCC_CFGR_PPRE2_SHIFT (11) /* Bits 13-11: AHB2 prescaler */ +#define RCC_CFGR_PPRE2_MASK (0x7 << RCC_CFGR_PPRE2_SHIFT) +# define RCC_CFGR_PPRE2_HCLK (0 << RCC_CFGR_PPRE2_SHIFT) +# define RCC_CFGR_PPRE2_HCLKd2 (4 << RCC_CFGR_PPRE2_SHIFT) +# define RCC_CFGR_PPRE2_HCLKd4 (5 << RCC_CFGR_PPRE2_SHIFT) +# define RCC_CFGR_PPRE2_HCLKd8 (6 << RCC_CFGR_PPRE2_SHIFT) +# define RCC_CFGR_PPRE2_HCLKd16 (7 << RCC_CFGR_PPRE2_SHIFT) + /* Bits 23-14: Reserved */ +#define RCC_CFGR_MCOSEL_SHIFT (24) /* Bits 27-24: MCU clock output*/ +#define RCC_CFGR_MCOSEL_MASK (0xf << RCC_CFGR_MCOSEL_SHIFT) +#define RCC_CFGR_MCOPRE_SHIFT (28) /* Bit 28: */ +#define RCC_CFGR_MCOPRE_MASK (0x7 << RCC_CFGR_MCOPRE_SHIFT) + /* Bit 31: Reserved */ + +#define RCC_CFGR_RESERVED_MASK 0x00ffc000 /* Bits 23-14 should be kept at reset value */ +#define RCC_CFGR_RESET 0x00000001 /* It's actually 0x5 but bits 3-2 are read only */ + +/* PLLCFGR - System PLL Configuration Register */ + +#define RCC_PLLCFGR_PLLSRC_SHIFT (0) /* Bits 1-0: Main PLL entry clock source */ +#define RCC_PLLCFGR_PLLSRC_MASK (3 << RCC_PLLCFGR_PLLSRC_SHIFT) +# define RCC_PLLCFGR_PLLSRC_NOCLK (0 << RCC_PLLCFGR_PLLSRC_SHIFT) +# define RCC_PLLCFGR_PLLSRC_HSI (2 << RCC_PLLCFGR_PLLSRC_SHIFT) +# define RCC_PLLCFGR_PLLSRC_HSE (3 << RCC_PLLCFGR_PLLSRC_SHIFT) + /* Bits 3-2: Reserved */ +#define RCC_PLLCFGR_PLLM_SHIFT (4) /* Bits 7-4: Division factor M of main PLL input clock */ +#define RCC_PLLCFGR_PLLM_MASK (0xf << RCC_PLLCFGR_PLLM_SHIFT) +#define RCC_PLLCFGR_PLLM(n) ((((n) - 1) << RCC_PLLCFGR_PLLM_SHIFT) & RCC_PLLCFGR_PLLM_MASK) /* n=1..16 */ + +#define RCC_PLLCFGR_PLLN_SHIFT (8) /* Bits 14-8: Main PLL multiplication factor N for VCO, n=8..127 */ +#define RCC_PLLCFGR_PLLN_MASK (0x7f << RCC_PLLCFGR_PLLN_SHIFT) +#define RCC_PLLCFGR_PLLN(n) (((n) << RCC_PLLCFGR_PLLN_SHIFT) & RCC_PLLCFGR_PLLN_MASK) + /* Bit 15: Reserved */ +#define RCC_PLLCFGR_PLLPEN (1 << 16) /* Bit 16: Main PLL PCLK output enable */ +#define RCC_PLLCFGR_PLLP (1 << 17) /* Bit 17: Main PLL division factor for PLL P clock, 0:PLLP=7, 1:PLLP=17 */ + /* Bits 19-18: Reserved */ +#define RCC_PLLCFGR_PLLQEN (1 << 20) /* Bit 20: Main PLL Q clock output enable */ +#define RCC_PLLCFGR_PLLQ_SHIFT (21) /* Bits 22-21: Main PLL division factor for PLL Q clock */ +#define RCC_PLLCFGR_PLLQ_MASK (0x3 << RCC_PLLCFGR_PLLQ_SHIFT) +# define RCC_PLLCFGR_PLLQ_2 (0x0 << RCC_PLLCFGR_PLLQ_SHIFT) +# define RCC_PLLCFGR_PLLQ_4 (0x1 << RCC_PLLCFGR_PLLQ_SHIFT) +# define RCC_PLLCFGR_PLLQ_6 (0x2 << RCC_PLLCFGR_PLLQ_SHIFT) +# define RCC_PLLCFGR_PLLQ_8 (0x3 << RCC_PLLCFGR_PLLQ_SHIFT) + /* Bits 23: Reserved */ +#define RCC_PLLCFGR_PLLREN (1 << 24) /* Bit 24: PLL R clock output enable */ +#define RCC_PLLCFGR_PLLR_SHIFT (25) /* Bits 26-25: Main PLL division factor for PLL R clock (system clock) */ +#define RCC_PLLCFGR_PLLR_MASK (3 << RCC_PLLCFGR_PLLR_SHIFT) +# define RCC_PLLCFGR_PLLR_2 (0x0 << RCC_PLLCFGR_PLLR_SHIFT) +# define RCC_PLLCFGR_PLLR_4 (0x1 << RCC_PLLCFGR_PLLR_SHIFT) +# define RCC_PLLCFGR_PLLR_6 (0x2 << RCC_PLLCFGR_PLLR_SHIFT) +# define RCC_PLLCFGR_PLLR_8 (0x3 << RCC_PLLCFGR_PLLR_SHIFT) + +#define RCC_PLLCFGR_PLLPDIV_SHIFT (27) /* Bits 31-27: Main PLL division factor for PLL P clock */ +#define RCC_PLLCFGR_PLLPDIV_MASK (0x1f << RCC_PLLCFGR_PLLPDIV_SHIFT) +#define RCC_PLLCFGR_PLLPDIV(n) (((n) << RCC_PLLCFGR_PLLPDIV_SHIFT) & RCC_PLLCFGR_PLLPDIV_MASK) /* n=2..31 */ + +#define RCC_PLLCFGR_RESERVED_MASK 0x008c800c /* Bits 23, 19-18, 15, and 3-2 should be kept at reset value */ +#define RCC_PLLCFGR_RESET 0x00001000 + +/* CIER - Clock Interrupt Enable Register */ + +#define RCC_CIER_LSIRDYIE (1 << 0) +#define RCC_CIER_LSERDYIE (1 << 1) +#define RCC_CIER_HSIRDYIE (1 << 3) +#define RCC_CIER_HSERDYIE (1 << 4) +#define RCC_CIER_PLLRDYIE (1 << 5) +#define RCC_CIER_LSECSSIE (1 << 9) +#define RCC_CIER_HSI48RDYIE (1 << 10) + +/* CIFR - Clock Interrupt Flag Register */ + +#define RCC_CIFR_LSIRDYF (1 << 0) +#define RCC_CIFR_LSERDYF (1 << 1) +#define RCC_CIFR_HSIRDYF (1 << 3) +#define RCC_CIFR_HSERDYF (1 << 4) +#define RCC_CIFR_PLLRDYF (1 << 5) +#define RCC_CIFR_CSSF (1 << 8) +#define RCC_CIFR_LSECSSF (1 << 9) +#define RCC_CIFR_HSI48RDYF (1 << 10) + +/* CICR - Clock Interrupt Clear Register */ + +#define RCC_CICR_LSIRDYC (1 << 0) +#define RCC_CICR_LSERDYC (1 << 1) +#define RCC_CICR_HSIRDYC (1 << 3) +#define RCC_CICR_HSERDYC (1 << 4) +#define RCC_CICR_PLLRDYC (1 << 5) +#define RCC_CICR_CSSC (1 << 8) +#define RCC_CICR_LSECSSC (1 << 9) +#define RCC_CICR_HSI48RDYC (1 << 10) + +/* AHB1RSTR - AHB1 Peripheral Reset Register */ + +#define RCC_AHB1RSTR_DMA1RST (1 << 0) +#define RCC_AHB1RSTR_DMA2RST (1 << 1) +#define RCC_AHB1RSTR_DMAMUX1RST (1 << 2) +#define RCC_AHB1RSTR_CORDICRST (1 << 3) +#define RCC_AHB1RSTR_FMACRST (1 << 4) +#define RCC_AHB1RSTR_FLASHRST (1 << 8) +#define RCC_AHB1RSTR_CRCRST (1 << 12) + +/* AHB2RSTR - AHB2 Peripheral Reset Register */ + +#define RCC_AHB2RSTR_GPIOARST (1 << 0) +#define RCC_AHB2RSTR_GPIOBRST (1 << 1) +#define RCC_AHB2RSTR_GPIOCRST (1 << 2) +#define RCC_AHB2RSTR_GPIODRST (1 << 3) +#define RCC_AHB2RSTR_GPIOERST (1 << 4) +#define RCC_AHB2RSTR_GPIOFRST (1 << 5) +#define RCC_AHB2RSTR_GPIOGRST (1 << 6) +#define RCC_AHB2RSTR_ADC12RST (1 << 13) +#define RCC_AHB2RSTR_ADC345RST (1 << 14) +#define RCC_AHB2RSTR_DAC1RST (1 << 16) +#define RCC_AHB2RSTR_DAC2RST (1 << 17) +#define RCC_AHB2RSTR_DAC3RST (1 << 18) +#define RCC_AHB2RSTR_DAC4RST (1 << 19) +#define RCC_AHB2RSTR_RNGRST (1 << 26) + +/* AHB3RSTR - AHB3 Peripheral Reset Register */ + +#define RCC_AHB3RSTR_FMCRST (1 << 0) +#define RCC_AHB3RSTR_QSPIRST (1 << 8) + +/* APB1RSTR1 - APB1 Peripheral Reset Register 1 */ + +#define RCC_APB1RSTR1_TIM2RST (1 << 0) +#define RCC_APB1RSTR1_TIM3RST (1 << 1) +#define RCC_APB1RSTR1_TIM4RST (1 << 2) +#define RCC_APB1RSTR1_TIM5RST (1 << 3) +#define RCC_APB1RSTR1_TIM6RST (1 << 4) +#define RCC_APB1RSTR1_TIM7RST (1 << 5) +#define RCC_APB1RSTR1_CRSRST (1 << 8) +#define RCC_APB1RSTR1_SPI2RST (1 << 14) +#define RCC_APB1RSTR1_SPI3RST (1 << 15) +#define RCC_APB1RSTR1_USART2RST (1 << 17) +#define RCC_APB1RSTR1_USART3RST (1 << 18) +#define RCC_APB1RSTR1_UART4RST (1 << 19) +#define RCC_APB1RSTR1_UART5RST (1 << 20) +#define RCC_APB1RSTR1_I2C1RST (1 << 21) +#define RCC_APB1RSTR1_I2C2RST (1 << 22) +#define RCC_APB1RSTR1_USBRST (1 << 23) +#define RCC_APB1RSTR1_FDCANRST (1 << 25) +#define RCC_APB1RSTR1_PWRRST (1 << 28) +#define RCC_APB1RSTR1_I2C3RST (1 << 30) +#define RCC_APB1RSTR1_LPTIM1RST (1 << 31) + +/* APB1RSTR2 - APB1 Peripheral Reset Register 2 */ + +#define RCC_APB1RSTR2_LPUART1RST (1 << 0) +#define RCC_APB1RSTR2_I2C4RST (1 << 1) +#define RCC_APB1RSTR2_UCPD1RST (1 << 8) + +/* APB2RSTR - APB2 Peripheral Reset Register */ + +#define RCC_APB2RSTR_SYSCFGRST (1 << 0) +#define RCC_APB2RSTR_TIM1RST (1 << 11) +#define RCC_APB2RSTR_SPI1RST (1 << 12) +#define RCC_APB2RSTR_TIM8RST (1 << 13) +#define RCC_APB2RSTR_USART1RST (1 << 14) +#define RCC_APB2RSTR_SPI4RST (1 << 15) +#define RCC_APB2RSTR_TIM15RST (1 << 16) +#define RCC_APB2RSTR_TIM16RST (1 << 17) +#define RCC_APB2RSTR_TIM17RST (1 << 18) +#define RCC_APB2RSTR_TIM20RST (1 << 20) +#define RCC_APB2RSTR_SAI1RST (1 << 21) +#define RCC_APB2RSTR_HRTIM1RST (1 << 26) + +/* AHB1ENR - AHB1 Peripheral Clocks Enable Register */ + +#define RCC_AHB1ENR_DMA1EN (1 << 0) +#define RCC_AHB1ENR_DMA2EN (1 << 1) +#define RCC_AHB1ENR_DMAMUX1EN (1 << 2) +#define RCC_AHB1ENR_CORDICEN (1 << 3) +#define RCC_AHB1ENR_FMACEN (1 << 4) +#define RCC_AHB1ENR_FLASHEN (1 << 8) +#define RCC_AHB1ENR_CRCEN (1 << 12) + +/* AHB2ENR - AHB2 Peripheral Clocks Enable Register */ + +#define RCC_AHB2ENR_GPIOEN(n) ((1 << (n)) & 0x7f) +#define RCC_AHB2ENR_GPIOAEN (1 << 0) +#define RCC_AHB2ENR_GPIOBEN (1 << 1) +#define RCC_AHB2ENR_GPIOCEN (1 << 2) +#define RCC_AHB2ENR_GPIODEN (1 << 3) +#define RCC_AHB2ENR_GPIOEEN (1 << 4) +#define RCC_AHB2ENR_GPIOFEN (1 << 5) +#define RCC_AHB2ENR_GPIOGEN (1 << 6) +#define RCC_AHB2ENR_ADC12EN (1 << 13) +#define RCC_AHB2ENR_ADC345EN (1 << 14) +#define RCC_AHB2ENR_DAC1EN (1 << 16) +#define RCC_AHB2ENR_DAC2EN (1 << 17) +#define RCC_AHB2ENR_DAC3EN (1 << 18) +#define RCC_AHB2ENR_DAC4EN (1 << 19) +#define RCC_AHB2ENR_RNGEN (1 << 26) + +/* AHB3ENR - AHB3 Peripheral Clocks Enable Register */ + +#define RCC_AHB3ENR_FMCEN (1 << 0) +#define RCC_AHB3ENR_QSPIEN (1 << 8) + +/* APB1ENR1 - APB1 Peripheral Clocks Enable Register 1 */ + +#define RCC_APB1ENR1_TIM2EN (1 << 0) +#define RCC_APB1ENR1_TIM3EN (1 << 1) +#define RCC_APB1ENR1_TIM4EN (1 << 2) +#define RCC_APB1ENR1_TIM5EN (1 << 3) +#define RCC_APB1ENR1_TIM6EN (1 << 4) +#define RCC_APB1ENR1_TIM7EN (1 << 5) +#define RCC_APB1ENR1_CRSEN (1 << 8) +#define RCC_APB1ENR1_RTCAPBEN (1 << 10) +#define RCC_APB1ENR1_WWDGEN (1 << 11) +#define RCC_APB1ENR1_SPI2EN (1 << 14) +#define RCC_APB1ENR1_SPI3EN (1 << 15) +#define RCC_APB1ENR1_USART2EN (1 << 17) +#define RCC_APB1ENR1_USART3EN (1 << 18) +#define RCC_APB1ENR1_UART4EN (1 << 19) +#define RCC_APB1ENR1_UART5EN (1 << 20) +#define RCC_APB1ENR1_I2C1EN (1 << 21) +#define RCC_APB1ENR1_I2C2EN (1 << 22) +#define RCC_APB1ENR1_USBEN (1 << 23) +#define RCC_APB1ENR1_FDCANEN (1 << 25) +#define RCC_APB1ENR1_PWREN (1 << 28) +#define RCC_APB1ENR1_I2C3EN (1 << 30) +#define RCC_APB1ENR1_LPTIM1EN (1 << 31) + +/* APB1ENR2 - APB1 Peripheral Clocks Enable Register 2 */ + +#define RCC_APB1ENR2_LPUART1EN (1 << 0) +#define RCC_APB1ENR2_I2C4EN (1 << 1) +#define RCC_APB1ENR2_UCPD1EN (1 << 8) + +/* APB2ENR - APB2 Peripheral Clocks Enable Register */ + +#define RCC_APB2ENR_SYSCFGEN (1 << 0) +#define RCC_APB2ENR_TIM1EN (1 << 11) +#define RCC_APB2ENR_SPI1EN (1 << 12) +#define RCC_APB2ENR_TIM8EN (1 << 13) +#define RCC_APB2ENR_USART1EN (1 << 14) +#define RCC_APB2ENR_SPI4EN (1 << 15) +#define RCC_APB2ENR_TIM15EN (1 << 16) +#define RCC_APB2ENR_TIM16EN (1 << 17) +#define RCC_APB2ENR_TIM17EN (1 << 18) +#define RCC_APB2ENR_TIM20EN (1 << 20) +#define RCC_APB2ENR_SAI1EN (1 << 21) +#define RCC_APB2ENR_HRTIM1EN (1 << 26) + +/* AHB1SMENR - AHB1 Peripheral Clocks Enable In Sleep/Stop Mode Register */ + +#define RCC_AHB1SMENR_DMA1SMEN (1 << 0) +#define RCC_AHB1SMENR_DMA2SMEN (1 << 1) +#define RCC_AHB1SMENR_DMAMUX1SMEN (1 << 2) +#define RCC_AHB1SMENR_CORDICSMEN (1 << 3) +#define RCC_AHB1SMENR_FMACSMEN (1 << 4) +#define RCC_AHB1SMENR_FLASHSMEN (1 << 8) +#define RCC_AHB1SMENR_SRAM1SMEN (1 << 9) +#define RCC_AHB1SMENR_CRCSMEN (1 << 12) + +/* AHB2SMENR - AHB2 Peripheral Clocks Enable In Sleep/Stop Mode Register */ + +#define RCC_AHB2SMENR_GPIOASMEN (1 << 0) +#define RCC_AHB2SMENR_GPIOBSMEN (1 << 1) +#define RCC_AHB2SMENR_GPIOCSMEN (1 << 2) +#define RCC_AHB2SMENR_GPIODSMEN (1 << 3) +#define RCC_AHB2SMENR_GPIOESMEN (1 << 4) +#define RCC_AHB2SMENR_GPIOFSMEN (1 << 5) +#define RCC_AHB2SMENR_GPIOGSMEN (1 << 6) +#define RCC_AHB2SMENR_CCMSRAMSMEN (1 << 9) +#define RCC_AHB2SMENR_SRAM2SMEN (1 << 10) +#define RCC_AHB2SMENR_ADC12SMEN (1 << 13) +#define RCC_AHB2SMENR_ADC345SMEN (1 << 14) +#define RCC_AHB2SMENR_DAC1SMEN (1 << 16) +#define RCC_AHB2SMENR_DAC2SMEN (1 << 17) +#define RCC_AHB2SMENR_DAC3SMEN (1 << 18) +#define RCC_AHB2SMENR_DAC4SMEN (1 << 19) +#define RCC_AHB2SMENR_RNGSMEN (1 << 26) + +/* AHB3SMENR - AHB3 Peripheral Clocks Enable In Sleep/Stop Mode Register */ + +#define RCC_AHB3SMENR_FMCSMEN (1 << 0) +#define RCC_AHB3SMENR_QSPISMEN (1 << 8) + +/* APB1SMENR1 - APB1 Peripheral Clocks Enable In Sleep/Stop Mode Register 1 */ + +#define RCC_APB1SMENR1_TIM2SMEN (1 << 0) +#define RCC_APB1SMENR1_TIM3SMEN (1 << 1) +#define RCC_APB1SMENR1_TIM4SMEN (1 << 2) +#define RCC_APB1SMENR1_TIM5SMEN (1 << 3) +#define RCC_APB1SMENR1_TIM6SMEN (1 << 4) +#define RCC_APB1SMENR1_TIM7SMEN (1 << 5) +#define RCC_APB1SMENR1_CRSSMEN (1 << 8) +#define RCC_APB1SMENR1_RTCAPBSMEN (1 << 10) +#define RCC_APB1SMENR1_WWDGSMEN (1 << 11) +#define RCC_APB1SMENR1_SPI2SMEN (1 << 14) +#define RCC_APB1SMENR1_SPI3SMEN (1 << 15) +#define RCC_APB1SMENR1_USART2SMEN (1 << 17) +#define RCC_APB1SMENR1_USART3SMEN (1 << 18) +#define RCC_APB1SMENR1_UART4SMEN (1 << 19) +#define RCC_APB1SMENR1_UART5SMEN (1 << 20) +#define RCC_APB1SMENR1_I2C1SMEN (1 << 21) +#define RCC_APB1SMENR1_I2C2SMEN (1 << 22) +#define RCC_APB1SMENR1_USBSMEN (1 << 23) +#define RCC_APB1SMENR1_FDCANSMEN (1 << 25) +#define RCC_APB1SMENR1_PWRSMEN (1 << 28) +#define RCC_APB1SMENR1_I2C3SMEN (1 << 30) +#define RCC_APB1SMENR1_LPTIM1SMEN (1 << 31) + +/* APB1SMENR2 - APB1 Peripheral Clocks Enable In Sleep/Stop Mode Register 2 */ + +#define RCC_APB1SMENR2_LPUART1SMEN (1 << 0) +#define RCC_APB1SMENR2_I2C4SMEN (1 << 1) +#define RCC_APB1SMENR2_UCPD1SMEN (1 << 8) + +/* APB2SMENR - APB2 Peripheral Clocks Enable In Sleep/Stop Mode Register */ + +#define RCC_APB2SMENR_SYSCFGSMEN (1 << 0) +#define RCC_APB2SMENR_TIM1SMEN (1 << 11) +#define RCC_APB2SMENR_SPI1SMEN (1 << 12) +#define RCC_APB2SMENR_TIM8SMEN (1 << 13) +#define RCC_APB2SMENR_USART1SMEN (1 << 14) +#define RCC_APB2SMENR_SPI4SMEN (1 << 15) +#define RCC_APB2SMENR_TIM15SMEN (1 << 16) +#define RCC_APB2SMENR_TIM16SMEN (1 << 17) +#define RCC_APB2SMENR_TIM17SMEN (1 << 18) +#define RCC_APB2SMENR_TIM20SMEN (1 << 20) +#define RCC_APB2SMENR_SAI1SMEN (1 << 21) +#define RCC_APB2SMENR_HRTIM1SMEN (1 << 26) + +/* CCIPR - Peripherals Independent Clock Configuration Register */ + +#define RCC_CCIPR_USART1SEL_SHIFT (0) +#define RCC_CCIPR_USART1SEL_MASK (3 << RCC_CCIPR_USART1SEL_SHIFT) +# define RCC_CCIPR_USART1SEL_PCLK (0 << RCC_CCIPR_USART1SEL_SHIFT) +# define RCC_CCIPR_USART1SEL_SYSCLK (1 << RCC_CCIPR_USART1SEL_SHIFT) +# define RCC_CCIPR_USART1SEL_HSI16 (2 << RCC_CCIPR_USART1SEL_SHIFT) +# define RCC_CCIPR_USART1SEL_LSE (3 << RCC_CCIPR_USART1SEL_SHIFT) + +#define RCC_CCIPR_USART2SEL_SHIFT (2) +#define RCC_CCIPR_USART2SEL_MASK (3 << RCC_CCIPR_USART2SEL_SHIFT) +# define RCC_CCIPR_USART2SEL_PCLK (0 << RCC_CCIPR_USART2SEL_SHIFT) +# define RCC_CCIPR_USART2SEL_SYSCLK (1 << RCC_CCIPR_USART2SEL_SHIFT) +# define RCC_CCIPR_USART2SEL_HSI16 (2 << RCC_CCIPR_USART2SEL_SHIFT) +# define RCC_CCIPR_USART2SEL_LSE (3 << RCC_CCIPR_USART2SEL_SHIFT) + +#define RCC_CCIPR_USART3SEL_SHIFT (4) +#define RCC_CCIPR_USART3SEL_MASK (3 << RCC_CCIPR_USART3SEL_SHIFT) +# define RCC_CCIPR_USART3SEL_PCLK (0 << RCC_CCIPR_USART3SEL_SHIFT) +# define RCC_CCIPR_USART3SEL_SYSCLK (1 << RCC_CCIPR_USART3SEL_SHIFT) +# define RCC_CCIPR_USART3SEL_HSI16 (2 << RCC_CCIPR_USART3SEL_SHIFT) +# define RCC_CCIPR_USART3SEL_LSE (3 << RCC_CCIPR_USART3SEL_SHIFT) + +#define RCC_CCIPR_UART4SEL_SHIFT (6) +#define RCC_CCIPR_UART4SEL_MASK (3 << RCC_CCIPR_UART4SEL_SHIFT) +# define RCC_CCIPR_UART4SEL_PCLK (0 << RCC_CCIPR_UART4SEL_SHIFT) +# define RCC_CCIPR_UART4SEL_SYSCLK (1 << RCC_CCIPR_UART4SEL_SHIFT) +# define RCC_CCIPR_UART4SEL_HSI16 (2 << RCC_CCIPR_UART4SEL_SHIFT) +# define RCC_CCIPR_UART4SEL_LSE (3 << RCC_CCIPR_UART4SEL_SHIFT) + +#define RCC_CCIPR_UART5SEL_SHIFT (8) +#define RCC_CCIPR_UART5SEL_MASK (3 << RCC_CCIPR_UART5SEL_SHIFT) +# define RCC_CCIPR_UART5SEL_PCLK (0 << RCC_CCIPR_UART5SEL_SHIFT) +# define RCC_CCIPR_UART5SEL_SYSCLK (1 << RCC_CCIPR_UART5SEL_SHIFT) +# define RCC_CCIPR_UART5SEL_HSI16 (2 << RCC_CCIPR_UART5SEL_SHIFT) +# define RCC_CCIPR_UART5SEL_LSE (3 << RCC_CCIPR_UART5SEL_SHIFT) + +#define RCC_CCIPR_LPUART1SEL_SHIFT (10) +#define RCC_CCIPR_LPUART1SEL_MASK (3 << RCC_CCIPR_LPUART1SEL_SHIFT) +# define RCC_CCIPR_LPUART1SEL_PCLK (0 << RCC_CCIPR_LPUART1SEL_SHIFT) +# define RCC_CCIPR_LPUART1SEL_SYSCLK (1 << RCC_CCIPR_LPUART1SEL_SHIFT) +# define RCC_CCIPR_LPUART1SEL_HSI16 (2 << RCC_CCIPR_LPUART1SEL_SHIFT) +# define RCC_CCIPR_LPUART1SEL_LSE (3 << RCC_CCIPR_LPUART1SEL_SHIFT) + +#define RCC_CCIPR_I2C1SEL_SHIFT (12) +#define RCC_CCIPR_I2C1SEL_MASK (3 << RCC_CCIPR_I2C1SEL_SHIFT) +# define RCC_CCIPR_I2C1SEL_PCLK (0 << RCC_CCIPR_I2C1SEL_SHIFT) +# define RCC_CCIPR_I2C1SEL_SYSCLK (1 << RCC_CCIPR_I2C1SEL_SHIFT) +# define RCC_CCIPR_I2C1SEL_HSI16 (2 << RCC_CCIPR_I2C1SEL_SHIFT) + +#define RCC_CCIPR_I2C2SEL_SHIFT (14) +#define RCC_CCIPR_I2C2SEL_MASK (3 << RCC_CCIPR_I2C2SEL_SHIFT) +# define RCC_CCIPR_I2C2SEL_PCLK (0 << RCC_CCIPR_I2C2SEL_SHIFT) +# define RCC_CCIPR_I2C2SEL_SYSCLK (1 << RCC_CCIPR_I2C2SEL_SHIFT) +# define RCC_CCIPR_I2C2SEL_HSI16 (2 << RCC_CCIPR_I2C2SEL_SHIFT) + +#define RCC_CCIPR_I2C3SEL_SHIFT (16) +#define RCC_CCIPR_I2C3SEL_MASK (3 << RCC_CCIPR_I2C3SEL_SHIFT) +# define RCC_CCIPR_I2C3SEL_PCLK (0 << RCC_CCIPR_I2C3SEL_SHIFT) +# define RCC_CCIPR_I2C3SEL_SYSCLK (1 << RCC_CCIPR_I2C3SEL_SHIFT) +# define RCC_CCIPR_I2C3SEL_HSI16 (2 << RCC_CCIPR_I2C3SEL_SHIFT) + +#define RCC_CCIPR_LPTIM1SEL_SHIFT (18) +#define RCC_CCIPR_LPTIM1SEL_MASK (3 << RCC_CCIPR_LPTIM1SEL_SHIFT) +# define RCC_CCIPR_LPTIM1SEL_PCLK (0 << RCC_CCIPR_LPTIM1SEL_SHIFT) +# define RCC_CCIPR_LPTIM1SEL_SYSCLK (1 << RCC_CCIPR_LPTIM1SEL_SHIFT) +# define RCC_CCIPR_LPTIM1SEL_HSI16 (2 << RCC_CCIPR_LPTIM1SEL_SHIFT) +# define RCC_CCIPR_LPTIM1SEL_LSE (3 << RCC_CCIPR_LPTIM1SEL_SHIFT) + +#define RCC_CCIPR_SAI1SEL_SHIFT (20) +#define RCC_CCIPR_SAI1SEL_MASK (3 << RCC_CCIPR_SAI1SEL_SHIFT) +# define RCC_CCIPR_SAI1SEL_SYSCLK (0 << RCC_CCIPR_SAI1SEL_SHIFT) +# define RCC_CCIPR_SAI1SEL_PLLQ (1 << RCC_CCIPR_SAI1SEL_SHIFT) +# define RCC_CCIPR_SAI1SEL_I2S_CKIN (2 << RCC_CCIPR_SAI1SEL_SHIFT) +# define RCC_CCIPR_SAI1SEL_HSI16 (3 << RCC_CCIPR_SAI1SEL_SHIFT) + +#define RCC_CCIPR_I2S23SEL_SHIFT (22) +#define RCC_CCIPR_I2S23SEL_MASK (3 << RCC_CCIPR_I2S23SEL_SHIFT) +# define RCC_CCIPR_I2S23SEL_SYSCLK (0 << RCC_CCIPR_I2S23SEL_SHIFT) +# define RCC_CCIPR_I2S23SEL_PLLQ (1 << RCC_CCIPR_I2S23SEL_SHIFT) +# define RCC_CCIPR_I2S23SEL_I2S_CKIN (2 << RCC_CCIPR_I2S23SEL_SHIFT) +# define RCC_CCIPR_I2S23SEL_HSI16 (3 << RCC_CCIPR_I2S23SEL_SHIFT) + +#define RCC_CCIPR_FDCANSEL_SHIFT (24) +#define RCC_CCIPR_FDCANSEL_MASK (3 << RCC_CCIPR_FDCANSEL_SHIFT) +# define RCC_CCIPR_FDCANSEL_HSE (0 << RCC_CCIPR_FDCANSEL_SHIFT) +# define RCC_CCIPR_FDCANSEL_PLLQ (1 << RCC_CCIPR_FDCANSEL_SHIFT) +# define RCC_CCIPR_FDCANSEL_PCLK (2 << RCC_CCIPR_FDCANSEL_SHIFT) + +#define RCC_CCIPR_CLK48SEL_SHIFT (26) +#define RCC_CCIPR_CLK48SEL_MASK (3 << RCC_CCIPR_CLK48SEL_SHIFT) +# define RCC_CCIPR_CLK48SEL_HSI48 (0 << RCC_CCIPR_CLK48SEL_SHIFT) +# define RCC_CCIPR_CLK48SEL_PLLQ (2 << RCC_CCIPR_CLK48SEL_SHIFT) + +#define RCC_CCIPR_ADC12SEL_SHIFT (28) +#define RCC_CCIPR_ADC12SEL_MASK (3 << RCC_CCIPR_ADC12SEL_SHIFT) +# define RCC_CCIPR_ADC12SEL_NO_CLK (0 << RCC_CCIPR_ADC12SEL_SHIFT) +# define RCC_CCIPR_ADC12SEL_PLLP (1 << RCC_CCIPR_ADC12SEL_SHIFT) +# define RCC_CCIPR_ADC12SEL_SYSCLK (2 << RCC_CCIPR_ADC12SEL_SHIFT) + +#define RCC_CCIPR_ADC345SEL_SHIFT (30) +#define RCC_CCIPR_ADC345SEL_MASK (3 << RCC_CCIPR_ADC345SEL_SHIFT) +# define RCC_CCIPR_ADC345SEL_NO_CLK (0 << RCC_CCIPR_ADC345SEL_SHIFT) +# define RCC_CCIPR_ADC345SEL_PLLP (1 << RCC_CCIPR_ADC345SEL_SHIFT) +# define RCC_CCIPR_ADC345SEL_SYSCLK (2 << RCC_CCIPR_ADC345SEL_SHIFT) + +/* BDCR - Backup Domain Control Register */ + +#define RCC_BDCR_LSEON (1 << 0) +#define RCC_BDCR_LSERDY (1 << 1) +#define RCC_BDCR_LSEBYP (1 << 2) + +#define RCC_BDCR_LSEDRV_SHIFT (3) +#define RCC_BDCR_LSEDRV_MASK (3 << RCC_BDCR_LSEDRV_SHIFT) +# define RCC_BDCR_LSEDRV_LOW (0 << RCC_BDCR_LSEDRV_SHIFT) +# define RCC_BDCR_LSEDRV_MEDIUM_LOW (1 << RCC_BDCR_LSEDRV_SHIFT) +# define RCC_BDCR_LSEDRV_MEDIUM_HIGH (2 << RCC_BDCR_LSEDRV_SHIFT) +# define RCC_BDCR_LSEDRV_HIGH (3 << RCC_BDCR_LSEDRV_SHIFT) + +#define RCC_BDCR_LSECSSON (1 << 5) +#define RCC_BDCR_LSECSSD (1 << 6) + +#define RCC_BDCR_RTCSEL_SHIFT (8) +#define RCC_BDCR_RTCSEL_MASK (3 << RCC_BDCR_RTCSEL_SHIFT) +# define RCC_BDCR_RTCSEL_NO_CLK (0 << RCC_BDCR_RTCSEL_SHIFT) +# define RCC_BDCR_RTCSEL_LSE (1 << RCC_BDCR_RTCSEL_SHIFT) +# define RCC_BDCR_RTCSEL_LSI (2 << RCC_BDCR_RTCSEL_SHIFT) +# define RCC_BDCR_RTCSEL_HSE (3 << RCC_BDCR_RTCSEL_SHIFT) + +#define RCC_BDCR_RTCEN (1 << 15) +#define RCC_BDCR_BDRST (1 << 16) +#define RCC_BDCR_LSCOEN (1 << 24) +#define RCC_BDCR_LSCOSEL (1 << 25) + +/* CSR - Clock Control & Status Register */ + +#define RCC_CSR_LSION (1 << 0) +#define RCC_CSR_LSIRDY (1 << 1) +#define RCC_CSR_RMVF (1 << 23) +#define RCC_CSR_OBLRSTF (1 << 25) +#define RCC_CSR_PINRSTF (1 << 26) +#define RCC_CSR_BORRSTF (1 << 27) +#define RCC_CSR_SFTRSTF (1 << 28) +#define RCC_CSR_IWDGRSTF (1 << 29) +#define RCC_CSR_WWDGRSTF (1 << 30) +#define RCC_CSR_LPWRRSTF (1 << 31) + +/* CRRCR - Clock Recovery RC Register */ + +#define RCC_CRRCR_HSI48ON (1 << 0) +#define RCC_CRRCR_HSI48RDY (1 << 1) + +#define RCC_CRRCR_HSI48CAL_SHIFT (7) +#define RCC_CRRCR_HSI48CAL_MASK (0x1ff << RCC_CRRCR_HSI48CAL_SHIFT) +#define RCC_CRRCR_HSI48CAL(n) (((n) << RCC_CRRCR_HSI48CAL_SHIFT) & RCC_CRRCR_HSI48CAL_MASK) + +/* CCIPR2 - Peripherals Independent Clock Configuration Register 2 */ + +#define RCC_CCIPR2_I2C4SEL_SHIFT (0) +#define RCC_CCIPR2_I2C4SEL_MASK (3 << RCC_CCIPR2_I2C4SEL_SHIFT) +#define RCC_CCIPR2_I2C4SEL_PCLK (0 << RCC_CCIPR2_I2C4SEL_SHIFT) +#define RCC_CCIPR2_I2C4SEL_SYSCLK (1 << RCC_CCIPR2_I2C4SEL_SHIFT) +#define RCC_CCIPR2_I2C4SEL_HSI16 (2 << RCC_CCIPR2_I2C4SEL_SHIFT) + +#define RCC_CCIPR2_QSPISEL_SHIFT (20) +#define RCC_CCIPR2_QSPISEL_MASK (3 << RCC_CCIPR2_QSPISEL_SHIFT) +#define RCC_CCIPR2_QSPISEL_SYSCLK (0 << RCC_CCIPR2_QSPISEL_SHIFT) +#define RCC_CCIPR2_QSPISEL_HSI16 (1 << RCC_CCIPR2_QSPISEL_SHIFT) +#define RCC_CCIPR2_QSPISEL_PLLQ (2 << RCC_CCIPR2_QSPISEL_SHIFT) + +/* Compatibility definitions ************************************************/ + +/* Compatibility with F1/F2/F4 Status Register names */ + +#define STM32_RCC_APB1ENR_OFFSET STM32_RCC_APB1ENR1_OFFSET +#define STM32_RCC_APB1ENR STM32_RCC_APB1ENR1 + +#define RCC_APB1ENR_USART2EN RCC_APB1ENR1_USART2EN +#define RCC_APB1ENR_USART3EN RCC_APB1ENR1_USART3EN +#define RCC_APB1ENR_UART4EN RCC_APB1ENR1_UART4EN +#define RCC_APB1ENR_UART5EN RCC_APB1ENR1_UART5EN + +#endif /* __ARCH_ARM_SRC_STM32_HARDWARE_STM32G47XXX_RCC_H */ diff --git a/arch/arm/src/stm32/hardware/stm32g47xxx_syscfg.h b/arch/arm/src/stm32/hardware/stm32g47xxx_syscfg.h new file mode 100644 index 0000000000..5257868f1f --- /dev/null +++ b/arch/arm/src/stm32/hardware/stm32g47xxx_syscfg.h @@ -0,0 +1,171 @@ +/**************************************************************************** + * arch/arm/src/stm32/hardware/stm32g47xxx_syscfg.h + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +#ifndef __ARCH_ARM_SRC_STM32_HARDWARE_STM32G47XXX_SYSCFG_H +#define __ARCH_ARM_SRC_STM32_HARDWARE_STM32G47XXX_SYSCFG_H + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include +#include "chip.h" + +#ifdef CONFIG_STM32_STM32G47XX + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +/* Register Offsets *********************************************************/ + +#define STM32_SYSCFG_MEMRMP_OFFSET 0x0000 /* SYSCFG memory remap register */ +#define STM32_SYSCFG_CFGR1_OFFSET 0x0004 /* SYSCFG configuration register 1 */ +#define STM32_SYSCFG_EXTICR_OFFSET(p) (0x0008 + ((p) & 0x000c)) /* Registers are displaced by 4! */ +# define STM32_SYSCFG_EXTICR1_OFFSET 0x0008 /* SYSCFG external interrupt configuration register 1 */ +# define STM32_SYSCFG_EXTICR2_OFFSET 0x000c /* SYSCFG external interrupt configuration register 2 */ +# define STM32_SYSCFG_EXTICR3_OFFSET 0x0010 /* SYSCFG external interrupt configuration register 3 */ +# define STM32_SYSCFG_EXTICR4_OFFSET 0x0014 /* SYSCFG external interrupt configuration register 4 */ +#define STM32_SYSCFG_SCSR_OFFSET 0x0018 /* SYSCFG CCMSRAM control and status register */ +#define STM32_SYSCFG_CFGR2_OFFSET 0x001c /* SYSCFG configuration register 2 */ +#define STM32_SYSCFG_SWPR_OFFSET 0x0020 /* SYSCFG CCMSRAM write protection register */ +#define STM32_SYSCFG_SKR_OFFSET 0x0024 /* SYSCFG CCMSRAM key register */ + +/* Register Addresses *******************************************************/ + +#define STM32_SYSCFG_MEMRMP (STM32_SYSCFG_BASE + STM32_SYSCFG_MEMRMP_OFFSET) +#define STM32_SYSCFG_CFGR1 (STM32_SYSCFG_BASE + STM32_SYSCFG_CFGR1_OFFSET) +#define STM32_SYSCFG_EXTICR(p) (STM32_SYSCFG_BASE + STM32_SYSCFG_EXTICR_OFFSET(p)) +# define STM32_SYSCFG_EXTICR1 (STM32_SYSCFG_BASE + STM32_SYSCFG_EXTICR1_OFFSET) +# define STM32_SYSCFG_EXTICR2 (STM32_SYSCFG_BASE + STM32_SYSCFG_EXTICR2_OFFSET) +# define STM32_SYSCFG_EXTICR3 (STM32_SYSCFG_BASE + STM32_SYSCFG_EXTICR3_OFFSET) +# define STM32_SYSCFG_EXTICR4 (STM32_SYSCFG_BASE + STM32_SYSCFG_EXTICR4_OFFSET) +#define STM32_SYSCFG_SCSR (STM32_SYSCFG_BASE + STM32_SYSCFG_SCSR_OFFSET) +#define STM32_SYSCFG_CFGR2 (STM32_SYSCFG_BASE + STM32_SYSCFG_CFGR2_OFFSET) +#define STM32_SYSCFG_SWPR (STM32_SYSCFG_BASE + STM32_SYSCFG_SWPR_OFFSET) +#define STM32_SYSCFG_SKR (STM32_SYSCFG_BASE + STM32_SYSCFG_SKR_OFFSET) + +/* Register Bitfield Definitions ********************************************/ + +/* Memory remap register (MEMRMP) */ + +#define SYSCFG_MEMRMP_MEM_MODE_SHIFT (0) +#define SYSCFG_MEMRMP_MEM_MODE_MASK (0x7 << SYSCFG_MEMRMP_MEM_MODE_SHIFT) +# define SYSCFG_MEMRMP_MEM_MODE_FLASH (0x0 << SYSCFG_MEMRMP_MEM_MODE_SHIFT) /* Main Flash memory mapped at 0x00000000 */ +# define SYSCFG_MEMRMP_MEM_MODE_SYSTEM (0x1 << SYSCFG_MEMRMP_MEM_MODE_SHIFT) /* System Flash memory mapped at 0x00000000 */ +# define SYSCFG_MEMRMP_MEM_MODE_FSMC (0x2 << SYSCFG_MEMRMP_MEM_MODE_SHIFT) /* FSMC memory */ +# define SYSCFG_MEMRMP_MEM_MODE_SRAM1 (0x3 << SYSCFG_MEMRMP_MEM_MODE_SHIFT) /* SRAM1 mapped at 0x00000000 */ +# define SYSCFG_MEMRMP_MEM_MODE_QSPI (0x4 << SYSCFG_MEMRMP_MEM_MODE_SHIFT) /* QUADSPI memory mapped at 0x00000000 */ +#define SYSCFG_MEMRMP_FB_MODE_MASK (1 << 8) /* User Flash Bank mode selection */ + +/* Configuration register 1 (CFGR1) */ + +#define SYSCFG_CFGR1_BOOSTEN_MASK (1 << 8) /* I/O analog switch voltage booster enable */ +#define SYSCFG_CFGR1_ANASWVDD_MASK (1 << 9) /* GPIO analog switch control voltage selection */ +#define SYSCFG_CFGR1_I2C_PB6_FMP_MASK (1 << 16) /* I2C PB6 fast mode plus */ +#define SYSCFG_CFGR1_I2C_PB7_FMP_MASK (1 << 17) /* I2C PB7 fast mode plus */ +#define SYSCFG_CFGR1_I2C_PB8_FMP_MASK (1 << 18) /* I2C PB8 fast mode plus */ +#define SYSCFG_CFGR1_I2C_PB9_FMP_MASK (1 << 19) /* I2C PB9 fast mode plus */ +#define SYSCFG_CFGR1_I2C1_FMP_MASK (1 << 20) /* I2C1 fast mode plus */ +#define SYSCFG_CFGR1_I2C2_FMP_MASK (1 << 21) /* I2C2 fast mode plus */ +#define SYSCFG_CFGR1_I2C3_FMP_MASK (1 << 22) /* I2C3 fast mode plus */ +#define SYSCFG_CFGR1_I2C4_FMP_MASK (1 << 23) /* I2C4 fast mode plus */ +#define SYSCFG_CFGR1_FPUIE_INVALIDOP (1 << 26) /* Invalid operation interrupt enable */ +#define SYSCFG_CFGR1_FPUIE_DIVZERO (1 << 27) /* Divide by zero interrupt enable */ +#define SYSCFG_CFGR1_FPUIE_UNDERFLOW (1 << 28) /* Underflow interrupt enable */ +#define SYSCFG_CFGR1_FPUIE_OVERFLOW (1 << 29) /* Overflow interrupt enable */ +#define SYSCFG_CFGR1_FPUIE_DENORMAL (1 << 30) /* Input denormal interrupt enable */ +#define SYSCFG_CFGR1_FPUIE_INEXACT (1 << 31) /* Inexact interrupt enable */ + +/* External interrupt (EXTI) configuration registers 1-4 (EXTICR1..4) */ + +#define SYSCFG_EXTICR_PORTA (0) /* 0000: PA[x] pin */ +#define SYSCFG_EXTICR_PORTB (1) /* 0001: PB[x] pin */ +#define SYSCFG_EXTICR_PORTC (2) /* 0010: PC[x] pin */ +#define SYSCFG_EXTICR_PORTD (3) /* 0011: PD[x] pin */ +#define SYSCFG_EXTICR_PORTE (4) /* 0100: PE[x] pin */ +#define SYSCFG_EXTICR_PORTF (5) /* 0101: PF[x] pin */ +#define SYSCFG_EXTICR_PORTG (6) /* 0110: PG[x] pin */ + +#define SYSCFG_EXTICR_PORT_MASK (15) +#define SYSCFG_EXTICR_EXTI_SHIFT(g) (((g) & 3) << 2) +#define SYSCFG_EXTICR_EXTI_MASK(g) (SYSCFG_EXTICR_PORT_MASK << (SYSCFG_EXTICR_EXTI_SHIFT(g))) + +#define SYSCFG_EXTICR1_EXTI0_SHIFT (0) /* Bits 0-3: EXTI 0 configuration */ +#define SYSCFG_EXTICR1_EXTI0_MASK (SYSCFG_EXTICR_PORT_MASK << SYSCFG_EXTICR1_EXTI0_SHIFT) +#define SYSCFG_EXTICR1_EXTI1_SHIFT (4) /* Bits 4-7: EXTI 1 configuration */ +#define SYSCFG_EXTICR1_EXTI1_MASK (SYSCFG_EXTICR_PORT_MASK << SYSCFG_EXTICR1_EXTI1_SHIFT) +#define SYSCFG_EXTICR1_EXTI2_SHIFT (8) /* Bits 8-11: EXTI 2 configuration */ +#define SYSCFG_EXTICR1_EXTI2_MASK (SYSCFG_EXTICR_PORT_MASK << SYSCFG_EXTICR1_EXTI2_SHIFT) +#define SYSCFG_EXTICR1_EXTI3_SHIFT (12) /* Bits 12-15: EXTI 3 configuration */ +#define SYSCFG_EXTICR1_EXTI3_MASK (SYSCFG_EXTICR_PORT_MASK << SYSCFG_EXTICR1_EXTI3_SHIFT) + +#define SYSCFG_EXTICR2_EXTI4_SHIFT (0) /* Bits 0-3: EXTI 4 configuration */ +#define SYSCFG_EXTICR2_EXTI4_MASK (SYSCFG_EXTICR_PORT_MASK << SYSCFG_EXTICR2_EXTI4_SHIFT) +#define SYSCFG_EXTICR2_EXTI5_SHIFT (4) /* Bits 4-7: EXTI 5 configuration */ +#define SYSCFG_EXTICR2_EXTI5_MASK (SYSCFG_EXTICR_PORT_MASK << SYSCFG_EXTICR2_EXTI5_SHIFT) +#define SYSCFG_EXTICR2_EXTI6_SHIFT (8) /* Bits 8-11: EXTI 6 configuration */ +#define SYSCFG_EXTICR2_EXTI6_MASK (SYSCFG_EXTICR_PORT_MASK << SYSCFG_EXTICR2_EXTI6_SHIFT) +#define SYSCFG_EXTICR2_EXTI7_SHIFT (12) /* Bits 12-15: EXTI 7 configuration */ +#define SYSCFG_EXTICR2_EXTI7_MASK (SYSCFG_EXTICR_PORT_MASK << SYSCFG_EXTICR2_EXTI7_SHIFT) + +#define SYSCFG_EXTICR3_EXTI8_SHIFT (0) /* Bits 0-3: EXTI 8 configuration */ +#define SYSCFG_EXTICR3_EXTI8_MASK (SYSCFG_EXTICR_PORT_MASK << SYSCFG_EXTICR3_EXTI8_SHIFT) +#define SYSCFG_EXTICR3_EXTI9_SHIFT (4) /* Bits 4-7: EXTI 9 configuration */ +#define SYSCFG_EXTICR3_EXTI9_MASK (SYSCFG_EXTICR_PORT_MASK << SYSCFG_EXTICR3_EXTI9_SHIFT) +#define SYSCFG_EXTICR3_EXTI10_SHIFT (8) /* Bits 8-11: EXTI 10 configuration */ +#define SYSCFG_EXTICR3_EXTI10_MASK (SYSCFG_EXTICR_PORT_MASK << SYSCFG_EXTICR3_EXTI10_SHIFT) +#define SYSCFG_EXTICR3_EXTI11_SHIFT (12) /* Bits 12-15: EXTI 11 configuration */ +#define SYSCFG_EXTICR3_EXTI11_MASK (SYSCFG_EXTICR_PORT_MASK << SYSCFG_EXTICR3_EXTI11_SHIFT) + +#define SYSCFG_EXTICR4_EXTI12_SHIFT (0) /* Bits 0-3: EXTI 12 configuration */ +#define SYSCFG_EXTICR4_EXTI12_MASK (SYSCFG_EXTICR_PORT_MASK << SYSCFG_EXTICR4_EXTI12_SHIFT) +#define SYSCFG_EXTICR4_EXTI13_SHIFT (4) /* Bits 4-7: EXTI 13 configuration */ +#define SYSCFG_EXTICR4_EXTI13_MASK (SYSCFG_EXTICR_PORT_MASK << SYSCFG_EXTICR4_EXTI13_SHIFT) +#define SYSCFG_EXTICR4_EXTI14_SHIFT (8) /* Bits 8-11: EXTI 14 configuration */ +#define SYSCFG_EXTICR4_EXTI14_MASK (SYSCFG_EXTICR_PORT_MASK << SYSCFG_EXTICR4_EXTI14_SHIFT) +#define SYSCFG_EXTICR4_EXTI15_SHIFT (12) /* Bits 12-15: EXTI 15 configuration */ +#define SYSCFG_EXTICR4_EXTI15_MASK (SYSCFG_EXTICR_PORT_MASK << SYSCFG_EXTICR4_EXTI15_SHIFT) + +/* CCM SRAM control and status register (SCSR) */ + +#define SYSCFG_SCSR_CCMER (1 << 0) /* CCMSRAM Erase Request */ +#define SYSCFG_SCSR_CCMBSY (1 << 1) /* CCMSRAM Erase In Progress */ + +/* Configuration register 2 (CFGR2) */ + +#define SYSCFG_CFGR2_CLL (1 << 0) /* Cortex M4 lockup (HARDFAULT) output enable bit */ +#define SYSCFG_CFGR2_SPL (1 << 1) /* SRAM1 and CCM SRAM parity lock */ +#define SYSCFG_CFGR2_PVDL (1 << 2) /* PVD lock enable bit */ +#define SYSCFG_CFGR2_ECCL (1 << 3) /* ECC lock */ +#define SYSCFG_CFGR2_SPF (1 << 8) /* SRAM1 and CCM STAM parity error flag */ + +/* CCM SRAM write protection register (SWPR) */ + +#define SYSCFG_SWPR_PWP(n) (1 << (n)) /* CCMSRAM Write protection for page n=0..31 */ + +/* CCM SRAM key register (SKR) */ + +#define SYSCFG_SKR_KEY_SHIFT (0) /* CCMSRAM write protection key for software erase */ +#define SYSCFG_SKR_KEY_MASK (0xff << SYSCFG_SKR_KEY_SHIFT) +# define SYSCFG_SKR_KEY(n) (((n) << SYSCFG_SKR_KEY_SHIFT) & SYSCFG_SKR_KEY_MASK) + +#endif /* CONFIG_STM32_STM32G47XX */ +#endif /* __ARCH_ARM_SRC_STM32_HARDWARE_STM32G47XXX_SYSCFG_H */ diff --git a/arch/arm/src/stm32/hardware/stm32g47xxx_uart.h b/arch/arm/src/stm32/hardware/stm32g47xxx_uart.h new file mode 100644 index 0000000000..b37d0b2bc1 --- /dev/null +++ b/arch/arm/src/stm32/hardware/stm32g47xxx_uart.h @@ -0,0 +1,420 @@ +/**************************************************************************** + * arch/arm/src/stm32/hardware/stm32g47xxx_uart.h + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +#ifndef __ARCH_ARM_SRC_STM32_HARDWARE_STM32G47XXX_UART_H +#define __ARCH_ARM_SRC_STM32_HARDWARE_STM32G47XXX_UART_H + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include "chip.h" + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +/* Register Offsets *********************************************************/ + +#define STM32_USART_CR1_OFFSET 0x0000 /* Control Register 1 */ +#define STM32_USART_CR2_OFFSET 0x0004 /* Control Register 2 */ +#define STM32_USART_CR3_OFFSET 0x0008 /* Control Register 3 */ +#define STM32_USART_BRR_OFFSET 0x000c /* BAUD Rate Register */ +#define STM32_USART_GTPR_OFFSET 0x0010 /* Guard Time and Prescaler Register */ +#define STM32_USART_RTOR_OFFSET 0x0014 /* Receiver Timeout Register */ +#define STM32_USART_RQR_OFFSET 0x0018 /* Request Register */ +#define STM32_USART_ISR_OFFSET 0x001c /* Interrupt and Status Register */ +#define STM32_USART_ICR_OFFSET 0x0020 /* Interrupt Flag Clear Register */ +#define STM32_USART_RDR_OFFSET 0x0024 /* Receive Data Register */ +#define STM32_USART_TDR_OFFSET 0x0028 /* Transmit Data Register */ +#define STM32_USART_PRESC_OFFSET 0x002c /* Prescaler Register */ + +/* Register Addresses *******************************************************/ + +#if (STM32_NUSART > 0) +# define STM32_USART1_CR1 (STM32_USART1_BASE + STM32_USART_CR1_OFFSET) +# define STM32_USART1_CR2 (STM32_USART1_BASE + STM32_USART_CR2_OFFSET) +# define STM32_USART1_CR3 (STM32_USART1_BASE + STM32_USART_CR3_OFFSET) +# define STM32_USART1_BRR (STM32_USART1_BASE + STM32_USART_BRR_OFFSET) +# define STM32_USART1_GTPR (STM32_USART1_BASE + STM32_USART_GTPR_OFFSET) +# define STM32_USART1_RTOR (STM32_USART1_BASE + STM32_USART_RTOR_OFFSET) +# define STM32_USART1_RQR (STM32_USART1_BASE + STM32_USART_RQR_OFFSET) +# define STM32_USART1_ISR (STM32_USART1_BASE + STM32_USART_ISR_OFFSET) +# define STM32_USART1_ICR (STM32_USART1_BASE + STM32_USART_ICR_OFFSET) +# define STM32_USART1_RDR (STM32_USART1_BASE + STM32_USART_RDR_OFFSET) +# define STM32_USART1_TDR (STM32_USART1_BASE + STM32_USART_TDR_OFFSET) +# define STM32_USART1_PRESC (STM32_USART1_BASE + STM32_USART_PRESC_OFFSET) +#endif + +#if (STM32_NUSART > 1) +# define STM32_USART2_CR1 (STM32_USART2_BASE + STM32_USART_CR1_OFFSET) +# define STM32_USART2_CR2 (STM32_USART2_BASE + STM32_USART_CR2_OFFSET) +# define STM32_USART2_CR3 (STM32_USART2_BASE + STM32_USART_CR3_OFFSET) +# define STM32_USART2_BRR (STM32_USART2_BASE + STM32_USART_BRR_OFFSET) +# define STM32_USART2_GTPR (STM32_USART2_BASE + STM32_USART_GTPR_OFFSET) +# define STM32_USART2_RTOR (STM32_USART2_BASE + STM32_USART_RTOR_OFFSET) +# define STM32_USART2_RQR (STM32_USART2_BASE + STM32_USART_RQR_OFFSET) +# define STM32_USART2_ISR (STM32_USART2_BASE + STM32_USART_ISR_OFFSET) +# define STM32_USART2_ICR (STM32_USART2_BASE + STM32_USART_ICR_OFFSET) +# define STM32_USART2_RDR (STM32_USART2_BASE + STM32_USART_RDR_OFFSET) +# define STM32_USART2_TDR (STM32_USART2_BASE + STM32_USART_TDR_OFFSET) +# define STM32_USART2_PRESC (STM32_USART2_BASE + STM32_USART_PRESC_OFFSET) +#endif + +#if (STM32_NUSART > 2) +# define STM32_USART3_CR1 (STM32_USART3_BASE + STM32_USART_CR1_OFFSET) +# define STM32_USART3_CR2 (STM32_USART3_BASE + STM32_USART_CR2_OFFSET) +# define STM32_USART3_CR3 (STM32_USART3_BASE + STM32_USART_CR3_OFFSET) +# define STM32_USART3_BRR (STM32_USART3_BASE + STM32_USART_BRR_OFFSET) +# define STM32_USART3_GTPR (STM32_USART3_BASE + STM32_USART_GTPR_OFFSET) +# define STM32_USART3_RTOR (STM32_USART3_BASE + STM32_USART_RTOR_OFFSET) +# define STM32_USART3_RQR (STM32_USART3_BASE + STM32_USART_RQR_OFFSET) +# define STM32_USART3_ISR (STM32_USART3_BASE + STM32_USART_ISR_OFFSET) +# define STM32_USART3_ICR (STM32_USART3_BASE + STM32_USART_ICR_OFFSET) +# define STM32_USART3_RDR (STM32_USART3_BASE + STM32_USART_RDR_OFFSET) +# define STM32_USART3_TDR (STM32_USART3_BASE + STM32_USART_TDR_OFFSET) +# define STM32_USART3_PRESC (STM32_USART3_BASE + STM32_USART_PRESC_OFFSET) +#endif + +#if (STM32_NUSART > 3) +# define STM32_UART4_CR1 (STM32_UART4_BASE + STM32_USART_CR1_OFFSET) +# define STM32_UART4_CR2 (STM32_UART4_BASE + STM32_USART_CR2_OFFSET) +# define STM32_UART4_CR3 (STM32_UART4_BASE + STM32_USART_CR3_OFFSET) +# define STM32_UART4_BRR (STM32_UART4_BASE + STM32_USART_BRR_OFFSET) +# define STM32_UART4_GTPR (STM32_UART4_BASE + STM32_USART_GTPR_OFFSET) +# define STM32_UART4_RTOR (STM32_UART4_BASE + STM32_USART_RTOR_OFFSET) +# define STM32_UART4_RQR (STM32_UART4_BASE + STM32_USART_RQR_OFFSET) +# define STM32_UART4_ISR (STM32_UART4_BASE + STM32_USART_ISR_OFFSET) +# define STM32_UART4_ICR (STM32_UART4_BASE + STM32_USART_ICR_OFFSET) +# define STM32_UART4_RDR (STM32_UART4_BASE + STM32_USART_RDR_OFFSET) +# define STM32_UART4_TDR (STM32_UART4_BASE + STM32_USART_TDR_OFFSET) +# define STM32_UART4_PRESC (STM32_UART4_BASE + STM32_USART_PRESC_OFFSET) +#endif + +#if (STM32_NUSART > 4) +# define STM32_UART5_CR1 (STM32_UART5_BASE + STM32_USART_CR1_OFFSET) +# define STM32_UART5_CR2 (STM32_UART5_BASE + STM32_USART_CR2_OFFSET) +# define STM32_UART5_CR3 (STM32_UART5_BASE + STM32_USART_CR3_OFFSET) +# define STM32_UART5_BRR (STM32_UART5_BASE + STM32_USART_BRR_OFFSET) +# define STM32_UART5_GTPR (STM32_UART5_BASE + STM32_USART_GTPR_OFFSET) +# define STM32_UART5_RTOR (STM32_UART5_BASE + STM32_USART_RTOR_OFFSET) +# define STM32_UART5_RQR (STM32_UART5_BASE + STM32_USART_RQR_OFFSET) +# define STM32_UART5_ISR (STM32_UART5_BASE + STM32_USART_ISR_OFFSET) +# define STM32_UART5_ICR (STM32_UART5_BASE + STM32_USART_ICR_OFFSET) +# define STM32_UART5_RDR (STM32_UART5_BASE + STM32_USART_RDR_OFFSET) +# define STM32_UART5_TDR (STM32_UART5_BASE + STM32_USART_TDR_OFFSET) +# define STM32_UART5_PRESC (STM32_UART5_BASE + STM32_USART_PRESC_OFFSET) +#endif + +/* Register Bitfield Definitions ********************************************/ + +/* Control Register 1 */ + +#define USART_CR1_UE (1 << 0) /* Bit 0 - USART Enable */ +#define USART_CR1_UESM (1 << 1) /* Bit 1 - USART Enable in low power Mode */ +#define USART_CR1_RE (1 << 2) /* Bit 2 - Receiver Enable */ +#define USART_CR1_TE (1 << 3) /* Bit 3 - Transmitter Enable */ +#define USART_CR1_IDLEIE (1 << 4) /* Bit 4 - IDLE Interrupt Enable */ +#define USART_CR1_RXFNEIE (1 << 5) /* Bit 5 in FIFO mode - Rx FIFO Not Empty Interrupt Enable */ +#define USART_CR1_RXNEIE (1 << 5) /* Bit 5 in Non-FIFO mode - Rx Data Register Not Empty Interrupt Enable */ +#define USART_CR1_TCIE (1 << 6) /* Bit 6 - Transmission Complete Interrupt Enable */ +#define USART_CR1_TXFNFIE (1 << 7) /* Bit 7 in FIFO mode - Tx FIFO Not Full Interrupt Enable */ +#define USART_CR1_TXEIE (1 << 7) /* Bit 7 in Non-FIFO mode - Tx Data Register Empty Interrupt Enable */ +#define USART_CR1_PEIE (1 << 8) /* Bit 8 - PE Interrupt Enable */ +#define USART_CR1_PS (1 << 9) /* Bit 9 - Parity Selection */ +#define USART_CR1_PCE (1 << 10) /* Bit 10 - Parity Control Enable */ +#define USART_CR1_WAKE (1 << 11) /* Bit 11 - Receiver Wakeup method */ +#define USART_CR1_M0 (1 << 12) /* Bit 12 - Word length - Bit 0 */ +#define USART_CR1_MME (1 << 13) /* Bit 13 - Mute Mode Enable */ +#define USART_CR1_CMIE (1 << 14) /* Bit 14 - Character match interrupt enable */ +#define USART_CR1_OVER8 (1 << 15) /* Bit 15 - Oversampling by 8-bit or 16-bit mode */ +#define USART_CR1_DEDT_SHIFT (16) /* Bits 20:16 - Driver Enable Deassertion Time, in 1/16ths or 1/8ths bit time */ +#define USART_CR1_DEDT_MASK (0x1f << USART_CR1_DEDT_SHIFT) +# define USART_CR1_DEDT(n) (((n) << USART_CR1_DEDT_SHIFT) & USART_CR1_DEDT_MASK) +#define USART_CR1_DEAT_SHIFT (21) /* Bits 25:21 - Driver Enable Assertion Time, in 1/16ths or 1/8ths bit time */ +#define USART_CR1_DEAT_MASK (0x1f << USART_CR1_DEAT_SHIFT) +# define USART_CR1_DEAT(n) (((n) << USART_CR1_DEAT_SHIFT) & USART_CR1_DEAT_MASK) +#define USART_CR1_RTOIE (1 << 26) /* Bit 26 - Receive Time Out interrupt enable */ +#define USART_CR1_EOBIE (1 << 27) /* Bit 27 - End of Block interrupt enable */ +#define USART_CR1_M1 (1 << 28) /* Bit 28 - Word length - Bit 1 */ +#define USART_CR1_FIFOEN (1 << 29) /* Bit 29 - FIFO mode enable */ +#define USART_CR1_TXFEIE (1 << 30) /* Bit 30 - TXFIFO empty interrupt enable */ +#define USART_CR1_RXFFIE (1 << 31) /* Bit 31 - RXFIFO Full interrupt enable */ + +#define USART_CR1_M_MASK (USART_CR1_M0 | USART_CR1_M1) + +#define USART_CR1_ALLINTS \ + (USART_CR1_IDLEIE | USART_CR1_RXNEIE | USART_CR1_TCIE | \ + USART_CR1_TXEIE | USART_CR1_PEIE | USART_CR1_CMIE | USART_CR1_RTOIE | \ + USART_CR1_EOBIE | USART_CR1_TXFEIE | USART_CR1_RXFFIE) + +/* Control Register 2 */ + +#define USART_CR2_SLVEN (1 << 0) /* Synchronous Slave Mode Enable */ +#define USART_CR2_DIS_NSS (1 << 3) /* Slave Select (NSS) Pin Ignore For SPI */ +#define USART_CR2_ADDM7 (1 << 4) /* 7-Bit / 4-Bit Address Detection */ +#define USART_CR2_LBDL (1 << 5) /* LIN Break Detection Length */ +#define USART_CR2_LBDIE (1 << 6) /* LIN Break Detection Interrupt Enable */ +#define USART_CR2_LBCL (1 << 8) /* Last Bit Clock pulse */ +#define USART_CR2_CPHA (1 << 9) /* Clock Phase */ +#define USART_CR2_CPOL (1 << 10) /* Clock Polarity */ +#define USART_CR2_CLKEN (1 << 11) /* Clock Enable */ +#define USART_CR2_STOP_SHIFT (12) /* Stop Bit Mode */ +#define USART_CR2_STOP_MASK (0x3 << USART_CR2_STOP_SHIFT) +# define USART_CR2_STOP1 (0x0 << USART_CR2_STOP_SHIFT) /* 1 Stop Bit */ +# define USART_CR2_STOP0p5 (0x1 << USART_CR2_STOP_SHIFT) /* 0.5 Stop Bit */ +# define USART_CR2_STOP2 (0x2 << USART_CR2_STOP_SHIFT) /* 2 Stop Bits */ +# define USART_CR2_STOP1p5 (0x3 << USART_CR2_STOP_SHIFT) /* 1.5 Stop Bits */ +#define USART_CR2_LINEN (1 << 14) /* LIN Mode Enable */ +#define USART_CR2_SWAP (1 << 15) /* Swap TX/RX Pins */ +#define USART_CR2_RXINV (1 << 16) /* RX Pin Active Level Inversion */ +#define USART_CR2_TXINV (1 << 17) /* TX Pin Active Level Inversion */ +#define USART_CR2_DATAINV (1 << 18) /* Binary Data Inversion */ +#define USART_CR2_MSBFIRST (1 << 19) /* MSB First */ +#define USART_CR2_ABREN (1 << 20) /* Auto BAUD-Rate Enable */ +#define USART_CR2_ABRMOD_SHIFT (21) /* Auto BAUD-Rate Detection Mode */ +#define USART_CR2_ABRMOD_MASK (0x3 << USART_CR2_ABRMOD_SHIFT) +# define USART_CR2_ABRMOD_STARTBIT (0x0 << USART_CR2_ABRMOD_SHIFT) /* Measurement of Start Bit */ +# define USART_CR2_ABRMOD_FALLEDGE (0x1 << USART_CR2_ABRMOD_SHIFT) /* Falling Edge To Falling Edge */ +# define USART_CR2_ABRMOD_7F_FRAME (0x2 << USART_CR2_ABRMOD_SHIFT) /* 0X7F Frame Detection */ +# define USART_CR2_ABRMOD_55_FRAME (0x3 << USART_CR2_ABRMOD_SHIFT) /* 0X55 Frame Detection */ +#define USART_CR2_RTOEN (1 << 23) /* Receiver Time-Out Enable */ +#define USART_CR2_ADD8_SHIFT (24) /* Address of the USART Node */ +#define USART_CR2_ADD8_MASK (0xff << USART_CR2_ADD8_SHIFT) + +/* Control Register 3 */ + +#define USART_CR3_EIE (1 << 0) /* Error Interrupt Enable */ +#define USART_CR3_IREN (1 << 1) /* IrDA Mode Enable */ +#define USART_CR3_IRLP (1 << 2) /* IrDA Low-Power */ +#define USART_CR3_HDSEL (1 << 3) /* Half-Duplex Selection */ +#define USART_CR3_NACK (1 << 4) /* SmartCard NACK Enable */ +#define USART_CR3_SCEN (1 << 5) /* SmartCard Mode Enable */ +#define USART_CR3_DMAR (1 << 6) /* DMA Enable Receiver */ +#define USART_CR3_DMAT (1 << 7) /* DMA Enable Transmitter */ +#define USART_CR3_RTSE (1 << 8) /* RTS Enable */ +#define USART_CR3_CTSE (1 << 9) /* CTS Enable */ +#define USART_CR3_CTSIE (1 << 10) /* CTS Interrupt Enable */ +#define USART_CR3_ONEBIT (1 << 11) /* One Sample Bit Method Enable */ +#define USART_CR3_OVRDIS (1 << 12) /* Overrun Disable */ +#define USART_CR3_DDRE (1 << 13) /* DMA Disable on Reception Error */ +#define USART_CR3_DEM (1 << 14) /* Driver Enable Mode */ +#define USART_CR3_DEP (1 << 15) +#define USART_CR3_SCARCNT_SHIFT (17) /* SmartCard Auto-Retry Count */ +#define USART_CR3_SCARCNT_MASK (0x7 << USART_CR3_SCARCNT_SHIFT) +# define USART_CR3_SCARCNT(n) (((n) << USART_CR3_SCARCNT_SHIFT) & USART_CR3_SCARCNT_MASK) +#define USART_CR3_WUS_SHIFT (20) /* Wake Up From Low Power Mode Interrupt Flag Selection) */ +#define USART_CR3_WUS_MASK (0x3 << USART_CR3_WUS_SHIFT) +# define USART_CR3_WUS_ADDR (0x0 << USART_CR3_WUS_SHIFT) /* On Address Match */ +# define USART_CR3_WUS_STARTBIT (0x2 << USART_CR3_WUS_SHIFT) /* On Start Bit Detection */ +# define USART_CR3_WUS_RXFNE (0x3 << USART_CR3_WUS_SHIFT) /* On RXNE/RXFNE */ +#define USART_CR3_WUFIE (1 << 22) /* Wake Up From Low Power Mode Interrupt Enable */ +#define USART_CR3_TXFTIE (1 << 23) /* Transmit FIFO Threshold Interrupt Enable */ +#define USART_CR3_TCBGTIE (1 << 24) /* Transmit Complete Before Guard Time Interrupt Enable */ +#define USART_CR3_RXFTCFG_SHIFT (25) /* Receive FIFO Threshold Configuration */ +#define USART_CR3_RXFTCFG_MASK (0x7 << USART_CR3_RXFTCFG_SHIFT) +# define USART_CR3_RXFTCFG_1_8 (0x0 << USART_CR3_RXFTCFG_SHIFT) /* When Rx FIFO Reaches 1/8Th Depth */ +# define USART_CR3_RXFTCFG_1_4 (0x1 << USART_CR3_RXFTCFG_SHIFT) /* When Rx FIFO Reaches 1/4Th Depth */ +# define USART_CR3_RXFTCFG_1_2 (0x2 << USART_CR3_RXFTCFG_SHIFT) /* When Rx FIFO Reaches 1/2 Depth */ +# define USART_CR3_RXFTCFG_3_4 (0x3 << USART_CR3_RXFTCFG_SHIFT) /* When Rx FIFO Reaches 3/4Ths Depth */ +# define USART_CR3_RXFTCFG_7_8 (0x4 << USART_CR3_RXFTCFG_SHIFT) /* When Rx FIFO Reaches 7/8Ths Depth */ +# define USART_CR3_RXFTCFG_FULL (0x5 << USART_CR3_RXFTCFG_SHIFT) /* When Rx FIFO Is Full */ +#define USART_CR3_RXFTIE (1 << 28) /* Receive FIFO Threshold Interrupt Enable */ +#define USART_CR3_TXFTCFG_SHIFT (29) /* Transmit FIFO Threshold Configuration */ +#define USART_CR3_TXFTCFG_MASK (0x7 << USART_CR3_TXFTCFG_SHIFT) +# define USART_CR3_TXFTCFG_1_8 (0x0 << USART_CR3_TXFTCFG_SHIFT) /* When Tx FIFO Reaches 1/8Th Depth */ +# define USART_CR3_TXFTCFG_1_4 (0x1 << USART_CR3_TXFTCFG_SHIFT) /* When Tx FIFO Reaches 1/4Th Depth */ +# define USART_CR3_TXFTCFG_1_2 (0x2 << USART_CR3_TXFTCFG_SHIFT) /* When Tx FIFO Reaches 1/2 Depth */ +# define USART_CR3_TXFTCFG_3_4 (0x3 << USART_CR3_TXFTCFG_SHIFT) /* When Tx FIFO Reaches 3/4Ths Depth */ +# define USART_CR3_TXFTCFG_7_8 (0x4 << USART_CR3_TXFTCFG_SHIFT) /* When Tx FIFO Reaches 7/8Ths Depth */ +# define USART_CR3_TXFTCFG_FULL (0x5 << USART_CR3_TXFTCFG_SHIFT) /* When Tx FIFO Is Full */ + +/* BAUD Rate Register */ + +/* Full BRR field */ + +#define USART_BRR_SHIFT (0) +#define USART_BRR_MASK (0xffff << USART_BRR_BRR_SHIFT) +# define USART_BRR(n) (((n) << USART_BRR_BRR_SHIFT) & USART_BRR_BRR_MASK) + +/* Partial BRR field BRR[3:0]: + * + * When OVER8 = 0: BRR[3:0] = USARTDIV[3:0] + * + * When OVER8 = 1: BRR[2:0] = (USARTDIV[3:0] >> 1) and + * BRR[3] must be kept cleared. + */ + +#define USART_BRR_0_3_SHIFT (0) +#define USART_BRR_0_3_MASK (0xf << USART_BRR_0_3_SHIFT) +# define USART_BRR_0_3(n) (((n) << USART_BRR_0_3_SHIFT) & USART_BRR_0_3_MASK) + +/* Partial BRR field BRR[15:4]: + * BRR[15:4] = USARTDIV[15:4] + */ + +#define USART_BRR_4_15_SHIFT (4) +#define USART_BRR_4_15_MASK (0xfff << USART_BRR_4_15_SHIFT) +# define USART_BRR_4_15(n) (((n) << USART_BRR_4_15_SHIFT) & USART_BRR_4_15_MASK) + +/* Guard Time and Prescaler Register */ + +#define USART_GTPR_PSC_SHIFT (0) /* Prescaler Value */ +#define USART_GTPR_PSC_MASK (0xff << USART_GTPR_PSC_SHIFT) +# define USART_GTPR_PSC(n) (((n) << USART_GTPR_PSC_SHIFT) & USART_GTPR_PSC_MASK) +#define USART_GTPR_GT_SHIFT (8) /* Guard Time Value */ +#define USART_GTPR_GT_MASK (0xff << USART_GTPR_GT_SHIFT) +# define USART_GTPR_GT(n) (((n) << USART_GTPR_GT_SHIFT) & USART_GTPR_GT_MASK) + +/* Receiver Timeout Register */ + +#define USART_RTOR_RTO_SHIFT (0) /* Receiver Time Out Value */ +#define USART_RTOR_RTO_MASK (0xffffff << USART_RTOR_RTO_SHIFT) +# define USART_RTOR_RTO(n) (((n) << USART_RTOR_RTO_SHIFT) & USART_RTOR_RTO_MASK) +#define USART_RTOR_BLEN_SHIFT (24) /* Block Length */ +#define USART_RTOR_BLEN_MASK (0xff << USART_RTOR_BLEN_SHIFT) +# define USART_RTOR_BLEN(n) (((n) << USART_RTOR_BLEN_SHIFT) & USART_RTOR_BLEN_MASK) + +/* Request Register */ + +#define USART_RQR_ABRRQ (1 << 0) /* Bit 0 - Auto-Baud Rate Request */ +#define USART_RQR_SBKRQ (1 << 1) /* Bit 1 - Send Break Request */ +#define USART_RQR_MMRQ (1 << 2) /* Bit 2 - Mute Mode Request */ +#define USART_RQR_RXFRQ (1 << 3) /* Bit 3 - Receive Data Flush Request */ +#define USART_RQR_TXFRQ (1 << 4) /* Bit 4 - Transmit Data Flush Request */ + +/* Interrupt and Status Register */ + +#define USART_ISR_PE (1 << 0) /* Bit 0 - Parity Error */ +#define USART_ISR_FE (1 << 1) /* Bit 1 - Framing Error */ +#define USART_ISR_NE (1 << 2) /* Bit 2 - Noise Detected Flag */ +#define USART_ISR_ORE (1 << 3) /* Bit 3 - Overrun Error */ +#define USART_ISR_IDLE (1 << 4) /* Bit 4 - Idle Line Detected */ +#define USART_ISR_RXFNE (1 << 5) /* Bit 5 (When FIFO in use) - Rx FIFO Not Empty */ +#define USART_ISR_RXNE (1 << 5) /* Bit 5 (When FIFO not in use) - Rx Data Register Not Empty */ +#define USART_ISR_TC (1 << 6) /* Bit 6 - Transmission Complete */ +#define USART_ISR_TXFNF (1 << 7) /* Bit 7 (When FIFO in use) - Tx FIFO Not Full */ +#define USART_ISR_TXE (1 << 7) /* Bit 7 (When FIFO not in use) - Tx Data Register Empty */ +#define USART_ISR_LBDF (1 << 8) /* Bit 8 - LIN Break Detection Flag */ +#define USART_ISR_CTSIF (1 << 9) /* Bit 9 - CTS Interrupt Flag */ +#define USART_ISR_CTS (1 << 10) /* Bit 10 - CTS Flag */ +#define USART_ISR_RTOF (1 << 11) /* Bit 11 - Receiver Time Out */ +#define USART_ISR_EOBF (1 << 12) /* Bit 12 - End of Block Flag */ +#define USART_ISR_UDR (1 << 13) /* Bit 13 - SPI Slave Underrun Error Flag */ +#define USART_ISR_ABRE (1 << 14) /* Bit 14 - Auto BAUD Rate Error */ +#define USART_ISR_ABRF (1 << 15) /* Bit 15 - Auto BAUD Rate Flag */ +#define USART_ISR_BUSY (1 << 16) /* Bit 16 - Busy Flag */ +#define USART_ISR_CMF (1 << 17) /* Bit 17 - Character Match Flag */ +#define USART_ISR_SBKF (1 << 18) /* Bit 18 - Send Break Flag */ +#define USART_ISR_RWU (1 << 19) /* Bit 19 - Receive Wake Up From Mute Mode Flag */ +#define USART_ISR_WUF (1 << 20) /* Bit 20 - Wake Up From Stop Mode Flag */ +#define USART_ISR_TEACK (1 << 21) /* Bit 21 - Transmit Enable Acknowledge Flag */ +#define USART_ISR_REACK (1 << 22) /* Bit 22 - Receive Enable Acknowledge Flag */ +#define USART_ISR_TXFE (1 << 23) /* Bit 23 (When FIFO in use) - Tx FIFO Empty */ +#define USART_ISR_RXFF (1 << 24) /* Bit 24 (When FIFO in use) - Rx FIFO Full */ +#define USART_ISR_TCBGT (1 << 25) /* Bit 25 - Transmission Complete Before Guard Time Completion */ +#define USART_ISR_RXFT (1 << 26) /* Bit 26 (When FIFO in use) - Rx FIFO Threshold Flag */ +#define USART_ISR_TXFT (1 << 27) /* Bit 27 (When FIFO in use) - Tx FIFO Threshold Flag */ + +#define USART_ISR_ALLBITS (0x0fffffff) + +/* Interrupt Flag Clear Register */ + +#define USART_ICR_PECF (1 << 0) /* Bit 0 - Parity Error Clear Flag */ +#define USART_ICR_FECF (1 << 1) /* Bit 1 - Framing Error Clear Flag */ +#define USART_ICR_NCF (1 << 2) /* Bit 2 - Noise detected Clear Flag */ +#define USART_ICR_ORECF (1 << 3) /* Bit 3 - OverRun Error Clear Flag */ +#define USART_ICR_IDLECF (1 << 4) /* Bit 4 - Idle Line Detected Clear Flag */ +#define USART_ICR_TXFECF (1 << 5) /* Bit 5 - Tx FIFO Empty Clear Flag */ +#define USART_ICR_TCCF (1 << 6) /* Bit 6 - Transmission Complete Clear Flag */ +#define USART_ICR_TCBGTCF (1 << 7) /* Bit 7 - Transmission Complete Before Guard Time Clear Flag */ +#define USART_ICR_LBDCF (1 << 8) /* Bit 8 - LIN Break Detection Clear Flag */ +#define USART_ICR_CTSCF (1 << 9) /* Bit 9 - CTS Interrupt Clear Flag */ +#define USART_ICR_RTOCF (1 << 11) /* Bit 11 - Receiver Timeout Clear Flag */ +#define USART_ICR_EOBCF (1 << 12) /* Bit 12 - End of Block Clear Flag */ +#define USART_ICR_UDRCF (1 << 13) /* Bit 13 - SPI Slave Underrun Clear Flag */ +#define USART_ICR_CMCF (1 << 17) /* Bit 17 - Character Match Clear Flag */ +#define USART_ICR_WUCF (1 << 20) /* Bit 20 - Wake Up From Stop Mode Clear Flag */ + +/* Receive Data Register */ + +#define USART_RDR_SHIFT (0) +#define USART_RDR_MASK (0x1ff << USART_RDR_SHIFT) +# define USART_RDR(n) (((n) << USART_RDR_SHIFT) & USART_RDR_MASK) + +/* Transmit Data Register */ + +#define USART_TDR_SHIFT (0) +#define USART_TDR_MASK (0x1ff << USART_TDR_SHIFT) +# define USART_TDR(n) (((n) << USART_TDR_SHIFT) & USART_TDR_MASK) + +/* Prescaler Register */ + +#define USART_PRESC_PRESCALER_SHIFT (0) +#define USART_PRESC_PRESCALER_MASK (0xf << USART_PRESC_PRESCALER_SHIFT) +#define USART_PRESC_PRESCALER_1 (0x0 << USART_PRESC_PRESCALER_SHIFT) +#define USART_PRESC_PRESCALER_2 (0x1 << USART_PRESC_PRESCALER_SHIFT) +#define USART_PRESC_PRESCALER_4 (0x2 << USART_PRESC_PRESCALER_SHIFT) +#define USART_PRESC_PRESCALER_6 (0x3 << USART_PRESC_PRESCALER_SHIFT) +#define USART_PRESC_PRESCALER_8 (0x4 << USART_PRESC_PRESCALER_SHIFT) +#define USART_PRESC_PRESCALER_10 (0x5 << USART_PRESC_PRESCALER_SHIFT) +#define USART_PRESC_PRESCALER_12 (0x6 << USART_PRESC_PRESCALER_SHIFT) +#define USART_PRESC_PRESCALER_16 (0x7 << USART_PRESC_PRESCALER_SHIFT) +#define USART_PRESC_PRESCALER_32 (0x8 << USART_PRESC_PRESCALER_SHIFT) +#define USART_PRESC_PRESCALER_64 (0x9 << USART_PRESC_PRESCALER_SHIFT) +#define USART_PRESC_PRESCALER_128 (0xa << USART_PRESC_PRESCALER_SHIFT) +#define USART_PRESC_PRESCALER_256 (0xb << USART_PRESC_PRESCALER_SHIFT) + +/* Compatibility definitions ************************************************/ + +/* Compatibility with F1/F2/F4 Status Register names */ + +#define STM32_USART_SR_OFFSET STM32_USART_ISR_OFFSET + +#define USART_SR_PE USART_ISR_PE /* Parity Error */ +#define USART_SR_FE USART_ISR_FE /* Framing error */ +#define USART_SR_NE USART_ISR_NE /* Noise detected flag */ +#define USART_SR_ORE USART_ISR_ORE /* Overrun error */ +#define USART_SR_IDLE USART_ISR_IDLE /* IDLE line detected */ +#define USART_SR_RXNE USART_ISR_RXNE /* Read Data Register Not Empty */ +#define USART_SR_TC USART_ISR_TC /* Transmission Complete */ +#define USART_SR_TXE USART_ISR_TXE /* Transmit Data Register Empty */ +#define USART_SR_LBD USART_ISR_LBDF /* LIN Break Detection Flag */ +#define USART_SR_CTS USART_ISR_CTS /* CTS Flag */ + +#define USART_SR_ALLBITS USART_ISR_ALLBITS + +#define USART_CR1_M USART_CR1_M0 + +/**************************************************************************** + * Public Types + ****************************************************************************/ + +/**************************************************************************** + * Public Data + ****************************************************************************/ + +/**************************************************************************** + * Public Function Prototypes + ****************************************************************************/ + +#endif /* __ARCH_ARM_SRC_STM32_HARDWARE_STM32G47XXX_UART_H */ diff --git a/arch/arm/src/stm32/stm32g47xxx_rcc.c b/arch/arm/src/stm32/stm32g47xxx_rcc.c new file mode 100644 index 0000000000..febde577a1 --- /dev/null +++ b/arch/arm/src/stm32/stm32g47xxx_rcc.c @@ -0,0 +1,972 @@ +/**************************************************************************** + * arch/arm/src/stm32/stm32g47xxx_rcc.c + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/* Unless otherwise specified, when comments in this file refer to the + * reference manual, that is the STM32G474 Reference Manual (RM0440 Rev 2). + * + * This file requires a clocking configuration, which is set in board.h, + * consisting of some or all of the following defines: + * + * STM32_HSI_FREQUENCY should be defined to the frequency of the MCU's + * high speed internal (HSI) oscillator in Hz. + * + * STM32_LSI_FREQUENCY should be defined to the frequency of the MCU's low + * speed internal (LSI) oscillator in Hz. + * + * If the board has an external crystal or oscillator, STM32_BOARD_XTAL + * should be defined its frequency in Hz. + * + * If the board has a high speed external (HSE) crystal/oscillator, + * STM32_HSE_FREQUENCY should be defined to its frequency in Hz. + * + * If the board has a low speed external (LSE) crystal/oscillator, + * STM32_LSE_FREQUENCY should be defined to its frequency in Hz. + * + * If the PLL is used, its source must be set by defining + * STM32_PLLCFGR_PLLSRC to one of the following: RCC_PLLCFGR_PLLSRC_HSI or + * RCC_PLLCFGR_PLLSRC_HSE, and each of its output clock(s) should be + * enabled, as needed, by setting STM32_PLLCFGR_PLLCFG to the bitwise OR + * of RCC_PLLCFGR_PLLPEN, RCC_PLLCFGR_PLLQEN, and/or RCC_PLLCFGR_PLLREN. + * Its prescale division and VCO multiplication factors must be set by + * defining STM32_PLLCFGR_PLLM and STM32_PLLCFGR_PLLN, using the + * RCC_PLLCFGR_PLLM() and RCC_PLLCFGR_PLLN() macros, respectively. The + * division factors for each enabled PLL output must be set by defining + * STM32_PLLCFGR_PLLP, STM32_PLLCFGR_PLLQ, and STM32_PLLCFGR_PLLR, using + * the RCC_PLLCFGR_PLLP(), RCC_PLLCFGR_PLLQ(), and RCC_PLLCFGR_PLLR() + * macros, respectively. The resulting frequencies must be specified by + * defining STM32_VCO_FREQUENCY, STM32_PLLP_FREQUENCY, + * STM32_PLLQ_FREQUENCY, and STM32_PLLR_FREQUENCY to those frequency in + * Hz, which can be calculated in terms of above-defined frequencies. + * + * The SYSCLK source must be given by defining STM32_SYSCLK_SW to one of + * RCC_CFGR_SW_HSI, RCC_CFGR_SW_HSE, or RCC_CFGR_SW_PLL, defining + * STM32_SYSCLK_SWS to one of RCC_CFGR_SWS_HSI, RCC_CFGR_SWS_HSE, or + * RCC_CFGR_SWS_PLL, and defining STM32_SYSCLK_FREQUENCY to the resulting + * SYSCLK frequency in Hz. For example, if SYSCLK is driven by the PLL "R" + * clock, STM32_SYSCLK_FREQUENCY can be defined to STM32_PLLR_FREQUENCY, + * which was defined earlier. + * + * The AHB clock (HCLK) must be setup by defining STM32_RCC_CFGR_HPRE to + * one of RCC_CFGR_HPRE_SYSCLK, RCC_CFGR_HPRE_SYSCLKd2, + * RCC_CFGR_HPRE_SYSCLKd4, RCC_CFGR_HPRE_SYSCLKd8, + * RCC_CFGR_HPRE_SYSCLKd16, RCC_CFGR_HPRE_SYSCLKd64, + * RCC_CFGR_HPRE_SYSCLKd128, RCC_CFGR_HPRE_SYSCLKd256, or + * RCC_CFGR_HPRE_SYSCLKd512. Also, STM32_HCLK_FREQUENCY must be defined to + * its resulting frequency in Hz. For example, if HCLK is driven by + * SYSCLK, STM32_HCLK_FREQUENCY can be defined to STM32_SYSCLK_FREQUENCY. + * + * The APB1 clock (PCLK1) must be setup by defining STM32_RCC_CFGR_PPRE1 + * to one of RCC_CFGR_PPRE1_HCLK, RCC_CFGR_PPRE1_HCLKd2, + * RCC_CFGR_PPRE1_HCLKd4, RCC_CFGR_PPRE1_HCLKd8, RCC_CFGR_PPRE1_HCLKd16 + * and defining STM32_PCLK1_FREQUENCY to its frequency in Hz. + * + * The APB2 clock (PCLK2) must be setup by defining STM32_RCC_CFGR_PPRE2 + * to one of RCC_CFGR_PPRE2_HCLK, RCC_CFGR_PPRE2_HCLKd2, + * RCC_CFGR_PPRE2_HCLKd4, RCC_CFGR_PPRE2_HCLKd8, RCC_CFGR_PPRE2_HCLKd16 + * and defining STM32_PCLK2_FREQUENCY to its frequency in Hz. + */ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include "hardware/stm32g47xxx_pwr.h" + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +#if (STM32_SYSCLK_SW == RCC_CFGR_SW_HSE) +# define USE_HSE +#endif + +#if (STM32_SYSCLK_SW == RCC_CFGR_SW_HSI) +# define USE_HSI +#endif + +#if (STM32_SYSCLK_SW == RCC_CFGR_SW_PLL) +# define USE_PLL +# define PLLRDY_TIMEOUT (100 * CONFIG_BOARD_LOOPSPERMSEC) +# if (STM32_PLLCFGR_PLLSRC == RCC_PLLCFGR_PLLSRC_HSE) +# define USE_HSE +# elif (STM32_PLLCFGR_PLLSRC == RCC_PLLCFGR_PLLSRC_HSI) +# define USE_HSI +# else +# error "STM32_SYSCLK_SW is RCC_CFGR_SW_PLL but STM32_PLLCFGR_PLLSRC is not recognized!" +# endif +#endif + +#if defined(USE_HSI) +# define HSIRDY_TIMEOUT (100 * CONFIG_BOARD_LOOPSPERMSEC) +#endif + +#if defined(USE_HSE) +# define HSERDY_TIMEOUT (100 * CONFIG_BOARD_LOOPSPERMSEC) +#endif + +/* Per the reference manual: + * + * Choose PWR VOS range setting and R1MODE based on SYSCLK frequency (see + * section 5.1.5, Dynamic voltage scaling management). + * + * Choose number of FLASH wait states according to CPU clock (HCLK) + * frequency (see section 3.3.3, Read access latency, and Table 9 in that + * section. + * + * This will define FLASH_ACR_LATENCY_SETTING, PWR_CR1_VOS_RANGE_SETTING, + * and PWR_CR5_R1MODE_SETTING to the appropriate settings. + */ + +#if (STM32_SYSCLK_FREQUENCY > 26000000) +# define PWR_CR1_VOS_RANGE_SETTING PWR_CR1_VOS_RANGE_1 +# if (STM32_SYSCLK_FREQUENCY > 150000000) +# define PWR_CR5_R1MODE_SETTING 0 +# else +# define PWR_CR5_R1MODE_SETTING PWR_CR5_R1MODE +# endif +# if (STM32_HCLK_FREQUENCY <= 20000000) +# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_0 +# elif (STM32_HCLK_FREQUENCY <= 40000000) +# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_1 +# elif (STM32_HCLK_FREQUENCY <= 60000000) +# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_2 +# elif (STM32_HCLK_FREQUENCY <= 80000000) +# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_3 +# elif (STM32_HCLK_FREQUENCY <= 100000000) +# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_4 +# elif (STM32_HCLK_FREQUENCY <= 120000000) +# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_5 +# elif (STM32_HCLK_FREQUENCY <= 140000000) +# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_6 +# elif (STM32_HCLK_FREQUENCY <= 160000000) +# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_7 +# elif (STM32_HCLK_FREQUENCY <= 170000000) +# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_8 +# else +# error "Incorrect STM32_HCLK_FREQUENCY (VOS range 1)!" +# endif +#else +# define PWR_CR1_VOS_RANGE_SETTING PWR_CR1_VOS_RANGE_2; +# define PWR_CR5_R1MODE_SETTING 0 +# if (STM32_HCLK_FREQUENCY <= 8000000) +# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_0 +# elif (STM32_HCLK_FREQUENCY <= 16000000) +# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_1 +# elif (STM32_HCLK_FREQUENCY <= 26000000) +# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_2 +# else +# error "Incorrect STM32_HCLK_FREQUENCY! (VOS range 2)" +# endif +#endif + +/**************************************************************************** + * Private Types + ****************************************************************************/ + +/**************************************************************************** + * Private Function Prototypes + ****************************************************************************/ + +/**************************************************************************** + * Private Data + ****************************************************************************/ + +/**************************************************************************** + * Public Data + ****************************************************************************/ + +/**************************************************************************** + * Private Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: rcc_reset + * + * Description: + * Put all RCC registers in reset state. + * + ****************************************************************************/ + +static inline void rcc_reset(void) +{ + uint32_t regval; + + /* Set HSION bit to the reset value and wait until HSI ready */ + + regval = getreg32(STM32_RCC_CR); + regval |= RCC_CR_HSION; + putreg32(regval, STM32_RCC_CR); + + while ((getreg32(STM32_RCC_CR) & RCC_CR_HSIRDY) != RCC_CR_HSIRDY) + { + } + + /* Reset HSI trimming */ + + regval = getreg32(STM32_RCC_ICSCR); + regval &= ~(RCC_ICSCR_HSITRIM_MASK); + regval |= RCC_ICSCR_HSITRIM_RESET; + putreg32(regval, STM32_RCC_ICSCR); + + /* Reset CFGR register */ + + regval = getreg32(STM32_RCC_CFGR); + regval &= RCC_CFGR_RESERVED_MASK; + regval |= RCC_CFGR_RESET; + putreg32(regval, STM32_RCC_CFGR); + + /* Wait until HSI is being used as the system clock, else we cannot clear + * the HSEON, HSEBYP, and PLLON bits. + */ + + while ((getreg32(STM32_RCC_CFGR) & RCC_CFGR_SWS_MASK) != RCC_CFGR_SWS_HSI) + { + } + + /* Clear the HSEON, HSEBYP, and PLLON bits */ + + regval = getreg32(STM32_RCC_CR); + regval &= ~(RCC_CR_HSEON | RCC_CR_HSEBYP | RCC_CR_PLLON); + putreg32(regval, STM32_RCC_CR); + + /* Wait until PLL is OFF, else we cannot change some of the bits in the + * PLLCFGR register. + */ + + while ((getreg32(STM32_RCC_CR) & RCC_CR_PLLRDY) != 0) + { + } + + /* Reset PLLCFGR register */ + + regval = getreg32(STM32_RCC_PLLCFGR); + regval &= RCC_PLLCFGR_RESERVED_MASK; + regval |= RCC_PLLCFGR_RESET; + putreg32(RCC_PLLCFGR_RESET, STM32_RCC_PLLCFGR); + + /* Disable all RCC interrupts and clear any previously pended ones */ + + putreg32(0, STM32_RCC_CIER); + putreg32(0xffffffff, STM32_RCC_CICR); +} + +/**************************************************************************** + * Name: rcc_enableahb1 + * + * Description: + * Enable selected AHB1 peripherals. + * + ****************************************************************************/ + +static inline void rcc_enableahb1(void) +{ + uint32_t regval; + + regval = getreg32(STM32_RCC_AHB1ENR); + regval |= RCC_AHB1ENR_FLASHEN; + +#if defined(CONFIG_STM32_DMA1) + regval |= RCC_AHB1ENR_DMA1EN; +#endif + +#if defined(CONFIG_STM32_DMA2) + regval |= RCC_AHB1ENR_DMA2EN; +#endif + +#if defined(CONFIG_STM32_DMA1) || defined(CONFIG_STM32_DMA2) + regval |= RCC_AHB1ENR_DMAMUX1EN; +#endif + +#if defined(CONFIG_STM32_CORDIC) + regval |= RCC_AHB1ENR_CORDICEN; +#endif + +#if defined(CONFIG_STM32_FMAC) + regval |= RCC_AHB1ENR_FMACEN; +#endif + +#if defined(CONFIG_STM32_CRC) + regval |= RCC_AHB1ENR_CRCEN; +#endif + + putreg32(regval, STM32_RCC_AHB1ENR); +} + +/**************************************************************************** + * Name: rcc_enableahb2 + * + * Description: + * Enable selected AHB2 peripherals. + * + ****************************************************************************/ + +static inline void rcc_enableahb2(void) +{ + uint32_t regval; + + regval = getreg32(STM32_RCC_AHB2ENR); + +#if (STM32_NGPIO_PORTS > 0) + regval |= (RCC_AHB2ENR_GPIOAEN +# if (STM32_NGPIO_PORTS > 1) + | RCC_AHB2ENR_GPIOBEN +# endif +# if (STM32_NGPIO_PORTS > 2) + | RCC_AHB2ENR_GPIOCEN +# endif +# if (STM32_NGPIO_PORTS > 3) + | RCC_AHB2ENR_GPIODEN +# endif +# if (STM32_NGPIO_PORTS > 4) + | RCC_AHB2ENR_GPIOEEN +# endif +# if (STM32_NGPIO_PORTS > 5) + | RCC_AHB2ENR_GPIOFEN +# endif +# if (STM32_NGPIO_PORTS > 6) + | RCC_AHB2ENR_GPIOGEN +# endif + ); +#endif + +#if defined(CONFIG_STM32_ADC1) || defined(CONFIG_STM32_ADC2) + regval |= RCC_AHB2ENR_ADC12EN; +#endif + +#if defined(CONFIG_STM32_ADC3) || defined(CONFIG_STM32_ADC4) || \ + defined(CONFIG_STM32_ADC5) + regval |= RCC_AHB2ENR_ADC345EN; +#endif + +#if defined(CONFIG_STM32_DAC1) + regval |= RCC_AHB2ENR_DAC1EN; +#endif + +#if defined(CONFIG_STM32_DAC2) + regval |= RCC_AHB2ENR_DAC2EN; +#endif + +#if defined(CONFIG_STM32_DAC3) + regval |= RCC_AHB2ENR_DAC3EN; +#endif + +#if defined(CONFIG_STM32_DAC4) + regval |= RCC_AHB2ENR_DAC4EN; +#endif + +#if defined(CONFIG_STM32_RNG) + regval |= RCC_AHB2ENR_RNGEN; +#endif + + putreg32(regval, STM32_RCC_AHB2ENR); +} + +/**************************************************************************** + * Name: rcc_enableahb3 + * + * Description: + * Enable selected AHB3 peripherals. + * + ****************************************************************************/ + +static inline void rcc_enableahb3(void) +{ + uint32_t regval; + + regval = getreg32(STM32_RCC_AHB3ENR); + +#if defined(CONFIG_STM32_FMC) + regval |= RCC_AHB3ENR_FMCEN; +#endif + +#if defined(CONFIG_STM32_QSPI) + regval |= RCC_AHB3ENR_QSPIEN; +#endif + + putreg32(regval, STM32_RCC_AHB3ENR); +} + +/**************************************************************************** + * Name: rcc_enableapb1 + * + * Description: + * Enable selected APB1 peripherals. + * + ****************************************************************************/ + +static inline void rcc_enableapb1(void) +{ + uint32_t regval; + + /* Careful: There are two separate registers for enabling APB1 + * peripherals. Configure the first register: + */ + + regval = getreg32(STM32_RCC_APB1ENR1); + regval |= RCC_APB1ENR1_PWREN; + +#if defined(CONFIG_STM32_TIM2) + regval |= RCC_APB1ENR1_TIM2EN; +#endif + +#if defined(CONFIG_STM32_TIM3) + regval |= RCC_APB1ENR1_TIM3EN; +#endif + +#if defined(CONFIG_STM32_TIM4) + regval |= RCC_APB1ENR1_TIM4EN; +#endif + +#if defined(CONFIG_STM32_TIM5) + regval |= RCC_APB1ENR1_TIM5EN; +#endif + +#if defined(CONFIG_STM32_TIM6) + regval |= RCC_APB1ENR1_TIM6EN; +#endif + +#if defined(CONFIG_STM32_TIM7) + regval |= RCC_APB1ENR1_TIM7EN; +#endif + +#if defined(CONFIG_STM32_CRS) + regval |= RCC_APB1ENR1_CRSEN; +#endif + +#if defined(CONFIG_STM32_RTC) + regval |= RCC_APB1ENR1_RTCAPBEN; +#endif + +#if defined(CONFIG_STM32_WWDG) + regval |= RCC_APB1ENR1_WWDGEN; +#endif + +#if defined(CONFIG_STM32_SPI2) + regval |= RCC_APB1ENR1_SPI2EN; +#endif + +#if defined(CONFIG_STM32_SPI3) + regval |= RCC_APB1ENR1_SPI3EN; +#endif + +#if defined(CONFIG_STM32_USART2) + regval |= RCC_APB1ENR1_USART2EN; +#endif + +#if defined(CONFIG_STM32_USART3) + regval |= RCC_APB1ENR1_USART3EN; +#endif + +#if defined(CONFIG_STM32_UART4) + regval |= RCC_APB1ENR1_UART4EN; +#endif + +#if defined(CONFIG_STM32_UART5) + regval |= RCC_APB1ENR1_UART5EN; +#endif + +#if defined(CONFIG_STM32_I2C1) + regval |= RCC_APB1ENR1_I2C1EN; +#endif + +#if defined(CONFIG_STM32_I2C2) + regval |= RCC_APB1ENR1_I2C2EN; +#endif + +#if defined(CONFIG_STM32_USB) + regval |= RCC_APB1ENR1_USBEN; +#endif + +#if defined(CONFIG_STM32_FDCAN) + regval |= RCC_APB1ENR1_FDCANEN; +#endif + +#if defined(CONFIG_STM32_I2C3) + regval |= RCC_APB1ENR1_I2C3EN; +#endif + +#if defined(CONFIG_STM32_LPTIM1) + regval |= RCC_APB1ENR1_LPTIM1EN; +#endif + + putreg32(regval, STM32_RCC_APB1ENR1); + + /* Now configure the second register: */ + + regval = getreg32(STM32_RCC_APB1ENR2); + +#if defined(CONFIG_STM32_LPUART1) + regval |= RCC_APB1ENR2_LPUART1EN; +#endif + +#if defined(CONFIG_STM32_I2C4) + regval |= RCC_APB1ENR2_I2C4EN; +#endif + +#if defined(CONFIG_STM32_UCPD) + regval |= RCC_APB1ENR2_UCPD1EN; +#endif + + putreg32(regval, STM32_RCC_APB1ENR2); +} + +/**************************************************************************** + * Name: rcc_enableapb2 + * + * Description: + * Enable selected APB2 peripherals. + * + ****************************************************************************/ + +static inline void rcc_enableapb2(void) +{ + uint32_t regval; + + regval = getreg32(STM32_RCC_APB2ENR); + +#if defined(CONFIG_STM32_SYSCFG) + regval |= RCC_APB2ENR_SYSCFGEN; +#endif + +#if defined(CONFIG_STM32_TIM1) + regval |= RCC_APB2ENR_TIM1EN; +#endif + +#if defined(CONFIG_STM32_SPI1) + regval |= RCC_APB2ENR_SPI1EN; +#endif + +#if defined(CONFIG_STM32_TIM8) + regval |= RCC_APB2ENR_TIM8EN; +#endif + +#if defined(CONFIG_STM32_USART1) + regval |= RCC_APB2ENR_USART1EN; +#endif + +#if defined(CONFIG_STM32_SPI4) + regval |= RCC_APB2ENR_SPI4EN; +#endif + +#if defined(CONFIG_STM32_TIM15) + regval |= RCC_APB2ENR_TIM15EN; +#endif + +#if defined(CONFIG_STM32_TIM16) + regval |= RCC_APB2ENR_TIM16EN; +#endif + +#if defined(CONFIG_STM32_TIM17) + regval |= RCC_APB2ENR_TIM17EN; +#endif + +#if defined(CONFIG_STM32_TIM20) + regval |= RCC_APB2ENR_TIM20EN; +#endif + +#if defined(CONFIG_STM32_SAI1) + regval |= RCC_APB2ENR_SAI1EN; +#endif + +#if defined(CONFIG_STM32_HRTIM1) + regval |= RCC_APB2ENR_HRTIM1EN; +#endif + + putreg32(regval, STM32_RCC_APB2ENR); +} + +/**************************************************************************** + * Name: stm32_rcc_enablehse + * + * Description: + * Enable the High-Speed External (HSE) Oscillator. + * + ****************************************************************************/ + +#if defined (USE_HSE) +static inline bool stm32_rcc_enablehse(void) +{ + uint32_t regval; + uint32_t timeout; + + /* Enable External High-Speed Clock (HSE) */ + + regval = getreg32(STM32_RCC_CR); +#if defined(STM32_HSEBYP_ENABLE) /* May be defined in board.h header file */ + regval |= RCC_CR_HSEBYP; /* Enable HSE clock bypass */ +#else + regval &= ~RCC_CR_HSEBYP; /* Disable HSE clock bypass */ +#endif + regval |= RCC_CR_HSEON; /* Enable HSE */ + putreg32(regval, STM32_RCC_CR); + + /* Wait until the HSE is ready (or until a timeout elapsed) */ + + for (timeout = HSERDY_TIMEOUT; timeout > 0; timeout--) + { + if ((getreg32(STM32_RCC_CR) & RCC_CR_HSERDY) != 0) + { + /* HSE has been enabled successfully and is ready */ + + return true; + } + } + + /* HSE was not enabled successfully or timed out; this could + * mean that the external crystal or oscillator is missing or + * not working. + */ + + return false; +} +#endif /* USE_HSE */ + +/**************************************************************************** + * Name: stm32_rcc_enablehsi + * + * Description: + * Enable the High-Speed Internal (HSI) Oscillator. + * + ****************************************************************************/ + +#if defined (USE_HSI) +static inline bool stm32_rcc_enablehsi(void) +{ + uint32_t regval; + uint32_t timeout; + + /* Enable Internal High-Speed Clock (HSI) */ + + regval = getreg32(STM32_RCC_CR); + regval |= RCC_CR_HSION; + putreg32(regval, STM32_RCC_CR); + + /* Wait until the HSI is ready (or until a timeout elapsed) */ + + for (timeout = HSIRDY_TIMEOUT; timeout > 0; timeout--) + { + if ((getreg32(STM32_RCC_CR) & RCC_CR_HSIRDY) != 0) + { + /* HSI has been enabled successfully and is ready */ + + return true; + } + } + + /* HSI was not enabled successfully or timed out */ + + return false; +} +#endif /* USE_HSI */ + +/**************************************************************************** + * Name: stm32_rcc_enablepll + * + * Description: + * Enable the Phase Locked Loop (PLL). + * + ****************************************************************************/ + +#if defined (USE_PLL) +static inline bool stm32_rcc_enablepll(void) +{ + uint32_t regval; + uint32_t timeout; + + /* Preserve reserved bits when altering the PLLCFGR register */ + + regval = getreg32(STM32_RCC_PLLCFGR); + regval &= ~(RCC_PLLCFGR_RESERVED_MASK); + + /* Configure PLL source and enables */ + + regval |= STM32_PLLCFGR_PLLSRC | STM32_PLLCFGR_PLLCFG; + + /* Configure PLL multiplication and division factors */ + + regval |= STM32_PLLCFGR_PLLM | STM32_PLLCFGR_PLLN; + + /* Configure PLL clock outputs division factors */ + + regval |= STM32_PLLCFGR_PLLP | STM32_PLLCFGR_PLLQ | STM32_PLLCFGR_PLLR; + + /* Write PLLCFG register */ + + putreg32(regval, STM32_RCC_PLLCFGR); + + /* Enable PLL */ + + regval = getreg32(STM32_RCC_CR); + regval |= RCC_CR_PLLON; + putreg32(regval, STM32_RCC_CR); + + /* Wait until PLL ready (or timeout) */ + + for (timeout = PLLRDY_TIMEOUT; timeout > 0; timeout--) + { + if ((getreg32(STM32_RCC_CR) & RCC_CR_PLLRDY) != 0) + { + /* PLL has been enabled successfully and is ready */ + + return true; + } + } + + /* PLL was not enabled successfully or timed out */ + + return false; +} +#endif /* USE_PLL */ + +/**************************************************************************** + * Name: stm32_stdclockconfig + * + * Description: + * Called to change to new clock based on settings in board.h. + * + * Pre-conditions: + * rcc_reset() and rcc_resetbkp() have been called and the HSI is + * the MCU's SYSCLK. + ****************************************************************************/ + +static void stm32_stdclockconfig(void) +{ + uint32_t regval; + + /* REVISIT: + * + * (1) We only support SYSCLK from HSE, HSI, or PLL, with PLL + * clocked by HSE or HSI. There is no configuration here for + * LSI, LSE, or HSI48. + * + * (2) We do not yet explicitly disable any clocks to save power. + * + * (3) Do we need to enable clock(s) to any bus(es) before we can + * access the PWR registers? And if so, do we need to disable + * any such clock(s) before programming the clock tree? + * + * (4) Do we need to enable write access or unlock anything + * before we can program any of the following things? + */ + + /* Set up the power regulator per configured SYSCLK frequency. + * + * Before we begin, make sure voltage regulator is ready to receive + * any changes by waiting until VOSF bit is cleared by hardware. + * + * REVISIT: This should use the implementation in stm32_pwr.c, but + * it appears to be too different than this family and will need + * to be refactored accordingly. It is implemented here directly as + * a stopgap. + */ + + /* REVISIT: Do we need to activate RCC_APB1ENR1_PWREN bit in + * RCC_APB1ENR1? + */ + + while ((getreg32(STM32_PWR_SR2) & PWR_SR2_VOSF) != 0) + { + } + + /* Choose the appropriate PWR VOS range and R1MODE based on the + * SYSCLK we're going to configure: + * + * R1MODE: Enable range 1 boost mode for 150MHz < SYSCLK <= 170MHz, + * disable range 1 boost mode for 26MHz < SYSCLK <= 150MHz. + * + * VOS: Range 1 for SYSCLK > 26MHz; range 2 for SYSCLK <= 26MHz. + */ + + regval = getreg32(STM32_PWR_CR5); + regval &= ~(PWR_CR5_R1MODE); + regval |= PWR_CR5_R1MODE_SETTING; + putreg32(regval, STM32_PWR_CR5); + + regval = getreg32(STM32_PWR_CR1); + regval &= ~(PWR_CR1_VOS_MASK); + regval |= PWR_CR1_VOS_RANGE_SETTING; + putreg32(regval, STM32_PWR_CR1); + + /* Now we have to wait until VOSF bit is cleared by hardware + * again + */ + + while ((getreg32(STM32_PWR_SR2) & PWR_SR2_VOSF) != 0) + { + } + + /* Now we can program the clock tree */ + +#if defined(USE_HSE) + /* The HSE is being used, either as input to the PLL or as SYSCLK + * itself. Enable the HSE. + */ + + if (stm32_rcc_enablehse() != true) + { + /* REVISIT: If we get here, timeout occurred waiting for HSE ready. + * We should have some sort of mechanism by which the application + * software can query whether the MCU has started up properly, so + * that it could possibly report an error or at least not attempt + * to work with wrong timing. Currently, as there is no mechanism + * in place to do that, we do not configure the clock any further. + */ + + return; + } +#endif + +#if defined (USE_HSI) + /* The HSI is being used, either as input to the PLL or as SYSCLK + * itself. Enable the HSI. + */ + + if (stm32_rcc_enablehsi() != true) + { + /* REVISIT: If we get here, timeout occurred waiting for HSI ready. + * We should have some sort of mechanism by which the application + * software can query whether the MCU has started up properly, so + * that it could possibly report an error or at least not attempt + * to work with wrong timing. Currently, as there is no mechanism + * in place to do that, we do not configure the clock any further. + */ + + return; + } +#endif + +#if defined(USE_PLL) + + if (stm32_rcc_enablepll() != true) + { + /* REVISIT: If we get here, timeout occurred waiting for HSI ready. + * We should have some sort of mechanism by which the application + * software can query whether the MCU has started up properly, so + * that it could possibly report an error or at least not attempt + * to work with wrong timing. Currently, as there is no mechanism + * in place to do that, we do not configure the clock any further. + */ + + return; + } + +#endif + + /* Configure FLASH wait states per the SYSCLK frequency that is about + * to go into effect and enable prefetch to reduce latency due to + * these wait states (ART accelerator). + * + * REVISIT: Should we also enable I-Cache and D-Cache? Also, the + * reference manual suggests that we must read the ACR register to + * make sure the latency setting has taken effect. Are we doing that + * correctly? + */ + + regval = getreg32(STM32_FLASH_ACR); + regval &= ~FLASH_ACR_LATENCY_MASK; + regval |= FLASH_ACR_LATENCY_SETTING; + regval |= FLASH_ACR_PRFTEN; + putreg32(regval, STM32_FLASH_ACR); + + while ((getreg32(STM32_FLASH_ACR) & FLASH_ACR_LATENCY_MASK) != + FLASH_ACR_LATENCY_SETTING) + { + } + + /* Before selecting the SYSCLK source, set the HPRE, PPRE1, and PPRE2 + * dividers. + */ + +#if (STM32_SYSCLK_FREQUENCY > 150000000) && (STM32_RCC_CFGR_HPRE == RCC_CFGR_HPRE_SYSCLK) + + /* If SYSCLK > 150MHz, temporarily set the HCLK prescaler (RCC_CFGR_HPRE) + * to divide by 2 (RCC_CFGR_HPRE_SYSCLKd2) before changing SYSCLK source + * to PLL. Afterwards, (after waiting at least 1us) change back to no + * division (RCC_CFGR_HPRE_SYSCLK). See reference manual, section 5.1.5. + */ + + regval = getreg32(STM32_RCC_CFGR); + regval &= ~(RCC_CFGR_HPRE_MASK); + regval |= RCC_CFGR_HPRE_SYSCLKd2; + putreg32(regval, STM32_RCC_CFGR); +#endif + + /* Select the system clock source as defined in board.h. This could + * be the HSI, HSE, or PLL (most likely the PLL). + */ + + regval = getreg32(STM32_RCC_CFGR); + regval &= ~(RCC_CFGR_SW_MASK); + regval |= STM32_SYSCLK_SW; + putreg32(regval, STM32_RCC_CFGR); + + /* Wait until the selected source is used as the system clock source */ + + while ((getreg32(STM32_RCC_CFGR) & RCC_CFGR_SWS_MASK) != STM32_SYSCLK_SWS) + { + } + + /* Before we set HCLK prescaler to the correct value, temporarily + * divide APB1 and APB2 clocks by 16 to avoid problems. + */ + + regval = getreg32(STM32_RCC_CFGR); + regval &= ~(RCC_CFGR_PPRE1_MASK | RCC_CFGR_PPRE2_MASK); + regval |= (RCC_CFGR_PPRE1_HCLKd16 | RCC_CFGR_PPRE2_HCLKd16); + putreg32(regval, STM32_RCC_CFGR); + + /* Now set HCLK prescaler to the correct value */ + + regval = getreg32(STM32_RCC_CFGR); + regval &= ~(RCC_CFGR_HPRE_MASK); + regval |= STM32_RCC_CFGR_HPRE; + putreg32(regval, STM32_RCC_CFGR); + + /* Now set APB1 and APB2 prescalers to the correct value */ + + regval = getreg32(STM32_RCC_CFGR); + regval &= ~(RCC_CFGR_PPRE1_MASK | RCC_CFGR_PPRE2_MASK); + regval |= (STM32_RCC_CFGR_PPRE1 | STM32_RCC_CFGR_PPRE2); + putreg32(regval, STM32_RCC_CFGR); +} + +/**************************************************************************** + * Name: rcc_enableperipherals + * + * Description: + * Enable all peripheral buses and all configured peripherals. + * + ****************************************************************************/ + +static inline void rcc_enableperipherals(void) +{ + rcc_enableahb1(); + rcc_enableahb2(); + rcc_enableahb3(); + rcc_enableapb1(); + rcc_enableapb2(); +} + +/**************************************************************************** + * Public Functions + ****************************************************************************/ +