diff --git a/src/main/drivers/serial_uart_impl.h b/src/main/drivers/serial_uart_impl.h index fc59e5291b..fe73ff62f2 100644 --- a/src/main/drivers/serial_uart_impl.h +++ b/src/main/drivers/serial_uart_impl.h @@ -114,6 +114,13 @@ #define UARTDEV_COUNT (UARTDEV_COUNT_1 + UARTDEV_COUNT_2 + UARTDEV_COUNT_3 + UARTDEV_COUNT_4 + UARTDEV_COUNT_5 + UARTDEV_COUNT_6 + UARTDEV_COUNT_7 + UARTDEV_COUNT_8) +typedef struct uartPinDef_s { + ioTag_t pin; +#if defined(STM32F7) + uint8_t af; +#endif +} uartPinDef_t; + typedef struct uartHardware_s { UARTDevice_e device; // XXX Not required for full allocation USART_TypeDef* reg; @@ -125,8 +132,8 @@ typedef struct uartHardware_s { DMA_Stream_TypeDef *txDMAStream; DMA_Stream_TypeDef *rxDMAStream; #endif - ioTag_t rxPins[UARTHARDWARE_MAX_PINS]; - ioTag_t txPins[UARTHARDWARE_MAX_PINS]; + uartPinDef_t rxPins[UARTHARDWARE_MAX_PINS]; + uartPinDef_t txPins[UARTHARDWARE_MAX_PINS]; #if defined(STM32F7) uint32_t rcc_ahb1; rccPeriphTag_t rcc_apb2; @@ -134,9 +141,7 @@ typedef struct uartHardware_s { #else rccPeriphTag_t rcc; #endif -#if defined(STM32F7) - uint8_t afs[UARTHARDWARE_MAX_PINS]; -#else +#if !defined(STM32F7) uint8_t af; #endif #if defined(STM32F7) @@ -159,6 +164,10 @@ typedef struct uartDevice_s { const uartHardware_t *hardware; ioTag_t rx; ioTag_t tx; +#if defined(STM32F7) + uint8_t rxAF; + uint8_t txAF; +#endif volatile uint8_t rxBuffer[UART_RX_BUFFER_SIZE]; volatile uint8_t txBuffer[UART_TX_BUFFER_SIZE]; } uartDevice_t; diff --git a/src/main/drivers/serial_uart_pinconfig.c b/src/main/drivers/serial_uart_pinconfig.c index d9d6f9ad90..44d26158a7 100644 --- a/src/main/drivers/serial_uart_pinconfig.c +++ b/src/main/drivers/serial_uart_pinconfig.c @@ -52,11 +52,19 @@ void uartPinConfigure(const serialPinConfig_t *pSerialPinConfig) const UARTDevice_e device = hardware->device; for (int pindex = 0 ; pindex < UARTHARDWARE_MAX_PINS ; pindex++) { - if (hardware->rxPins[pindex] && (hardware->rxPins[pindex] == pSerialPinConfig->ioTagRx[device])) + if (hardware->rxPins[pindex].pin == pSerialPinConfig->ioTagRx[device]) { uartdev->rx = pSerialPinConfig->ioTagRx[device]; +#if defined(STM32F7) + uartdev->rxAF = hardware->rxPins[pindex].af; +#endif + } - if (hardware->txPins[pindex] && (hardware->txPins[pindex] == pSerialPinConfig->ioTagTx[device])) + if (hardware->txPins[pindex].pin == pSerialPinConfig->ioTagTx[device]) { uartdev->tx = pSerialPinConfig->ioTagTx[device]; +#if defined(STM32F7) + uartdev->txAF = hardware->txPins[pindex].af; +#endif + } } if (uartdev->rx || uartdev->tx) { diff --git a/src/main/drivers/serial_uart_stm32f10x.c b/src/main/drivers/serial_uart_stm32f10x.c index b6a7ac3c9d..dda58f5ade 100644 --- a/src/main/drivers/serial_uart_stm32f10x.c +++ b/src/main/drivers/serial_uart_stm32f10x.c @@ -67,8 +67,8 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = { .reg = USART1, .rxDMAChannel = UART1_RX_DMA_CHANNEL, .txDMAChannel = UART1_TX_DMA_CHANNEL, - .rxPins = { DEFIO_TAG_E(PA10), DEFIO_TAG_E(PB7), IO_TAG_NONE }, - .txPins = { DEFIO_TAG_E(PA9), DEFIO_TAG_E(PB6), IO_TAG_NONE }, + .rxPins = { { DEFIO_TAG_E(PA10) }, { DEFIO_TAG_E(PB7) } }, + .txPins = { { DEFIO_TAG_E(PA9) }, { DEFIO_TAG_E(PB6) } }, //.af = GPIO_AF_USART1, .rcc = RCC_APB2(USART1), .irqn = USART1_IRQn, @@ -82,8 +82,8 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = { .reg = USART2, .rxDMAChannel = UART2_RX_DMA_CHANNEL, .txDMAChannel = UART2_TX_DMA_CHANNEL, - .rxPins = { DEFIO_TAG_E(PA3), DEFIO_TAG_E(PD6), IO_TAG_NONE }, - .txPins = { DEFIO_TAG_E(PA2), DEFIO_TAG_E(PD5), IO_TAG_NONE }, + .rxPins = { { DEFIO_TAG_E(PA3) }, { DEFIO_TAG_E(PD6) } }, + .txPins = { { DEFIO_TAG_E(PA2) }, { DEFIO_TAG_E(PD5) } }, //.af = GPIO_AF_USART2, .rcc = RCC_APB1(USART2), .irqn = USART2_IRQn, @@ -97,8 +97,8 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = { .reg = USART3, .rxDMAChannel = UART3_RX_DMA_CHANNEL, .txDMAChannel = UART3_TX_DMA_CHANNEL, - .rxPins = { DEFIO_TAG_E(PB11), DEFIO_TAG_E(PD9), DEFIO_TAG_E(PC11) }, - .txPins = { DEFIO_TAG_E(PB10), DEFIO_TAG_E(PD8), DEFIO_TAG_E(PC10) }, + .rxPins = { { DEFIO_TAG_E(PB11) }, { DEFIO_TAG_E(PD9) }, { DEFIO_TAG_E(PC11) } }, + .txPins = { { DEFIO_TAG_E(PB10) }, { DEFIO_TAG_E(PD8) }, { DEFIO_TAG_E(PC10) } }, //.af = GPIO_AF_USART3, .rcc = RCC_APB1(USART3), .irqn = USART3_IRQn, diff --git a/src/main/drivers/serial_uart_stm32f30x.c b/src/main/drivers/serial_uart_stm32f30x.c index 68574d5de3..f771ca39f8 100644 --- a/src/main/drivers/serial_uart_stm32f30x.c +++ b/src/main/drivers/serial_uart_stm32f30x.c @@ -90,8 +90,8 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = { .reg = USART1, .rxDMAChannel = UART1_RX_DMA, .txDMAChannel = UART1_TX_DMA, - .rxPins = { DEFIO_TAG_E(PA10), DEFIO_TAG_E(PB7), DEFIO_TAG_E(PC5), DEFIO_TAG_E(PE1) }, - .txPins = { DEFIO_TAG_E(PA9), DEFIO_TAG_E(PB6), DEFIO_TAG_E(PC4), DEFIO_TAG_E(PE0) }, + .rxPins = { { DEFIO_TAG_E(PA10) }, { DEFIO_TAG_E(PB7) }, { DEFIO_TAG_E(PC5) }, { DEFIO_TAG_E(PE1) } }, + .txPins = { { DEFIO_TAG_E(PA9) }, { DEFIO_TAG_E(PB6) }, { DEFIO_TAG_E(PC4) }, { DEFIO_TAG_E(PE0) } }, .rcc = RCC_APB2(USART1), .af = GPIO_AF_7, .irqn = USART1_IRQn, @@ -106,8 +106,8 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = { .reg = USART2, .rxDMAChannel = UART2_RX_DMA, .txDMAChannel = UART2_TX_DMA, - .rxPins = { DEFIO_TAG_E(PA15), DEFIO_TAG_E(PA3), DEFIO_TAG_E(PB4), DEFIO_TAG_E(PD6) }, - .txPins = { DEFIO_TAG_E(PA14), DEFIO_TAG_E(PA2), DEFIO_TAG_E(PB3), DEFIO_TAG_E(PD5) }, + .rxPins = { { DEFIO_TAG_E(PA15) }, { DEFIO_TAG_E(PA3) }, { DEFIO_TAG_E(PB4) }, { DEFIO_TAG_E(PD6) } }, + .txPins = { { DEFIO_TAG_E(PA14) }, { DEFIO_TAG_E(PA2) }, { DEFIO_TAG_E(PB3) }, { DEFIO_TAG_E(PD5) } }, .rcc = RCC_APB1(USART2), .af = GPIO_AF_7, .irqn = USART2_IRQn, @@ -122,8 +122,8 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = { .reg = USART3, .rxDMAChannel = UART3_RX_DMA, .txDMAChannel = UART3_TX_DMA, - .rxPins = { DEFIO_TAG_E(PB11), DEFIO_TAG_E(PC11), DEFIO_TAG_E(PD9), IO_TAG_NONE }, - .txPins = { DEFIO_TAG_E(PB10), DEFIO_TAG_E(PC10), DEFIO_TAG_E(PD8), IO_TAG_NONE }, + .rxPins = { { DEFIO_TAG_E(PB11) }, { DEFIO_TAG_E(PC11) }, { DEFIO_TAG_E(PD9) } }, + .txPins = { { DEFIO_TAG_E(PB10) }, { DEFIO_TAG_E(PC10) }, { DEFIO_TAG_E(PD8) } }, .rcc = RCC_APB1(USART3), .af = GPIO_AF_7, .irqn = USART3_IRQn, @@ -139,8 +139,8 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = { .reg = UART4, .rxDMAChannel = 0, // XXX UART4_RX_DMA !? .txDMAChannel = 0, // XXX UART4_TX_DMA !? - .rxPins = { DEFIO_TAG_E(PC11), IO_TAG_NONE, IO_TAG_NONE, IO_TAG_NONE }, - .txPins = { DEFIO_TAG_E(PC10), IO_TAG_NONE, IO_TAG_NONE, IO_TAG_NONE }, + .rxPins = { { DEFIO_TAG_E(PC11) } }, + .txPins = { { DEFIO_TAG_E(PC10) } }, .rcc = RCC_APB1(UART4), .af = GPIO_AF_5, .irqn = UART4_IRQn, @@ -156,8 +156,8 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = { .reg = UART5, .rxDMAChannel = 0, .txDMAChannel = 0, - .rxPins = { DEFIO_TAG_E(PD2), IO_TAG_NONE, IO_TAG_NONE, IO_TAG_NONE }, - .txPins = { DEFIO_TAG_E(PC12), IO_TAG_NONE, IO_TAG_NONE, IO_TAG_NONE }, + .rxPins = { { DEFIO_TAG_E(PD2) } }, + .txPins = { { DEFIO_TAG_E(PC12) } }, .rcc = RCC_APB1(UART5), .af = GPIO_AF_5, .irqn = UART5_IRQn, diff --git a/src/main/drivers/serial_uart_stm32f4xx.c b/src/main/drivers/serial_uart_stm32f4xx.c index 61ff2b49e9..88de45f27a 100644 --- a/src/main/drivers/serial_uart_stm32f4xx.c +++ b/src/main/drivers/serial_uart_stm32f4xx.c @@ -51,8 +51,8 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = { #ifdef USE_UART1_TX_DMA .txDMAStream = DMA2_Stream7, #endif - .rxPins = { DEFIO_TAG_E(PA10), DEFIO_TAG_E(PB7), IO_TAG_NONE }, - .txPins = { DEFIO_TAG_E(PA9), DEFIO_TAG_E(PB6), IO_TAG_NONE }, + .rxPins = { { DEFIO_TAG_E(PA10) }, { DEFIO_TAG_E(PB7) } }, + .txPins = { { DEFIO_TAG_E(PA9) }, { DEFIO_TAG_E(PB6) } }, .af = GPIO_AF_USART1, .rcc = RCC_APB2(USART1), .irqn = USART1_IRQn, @@ -72,8 +72,8 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = { #ifdef USE_UART2_TX_DMA .txDMAStream = DMA1_Stream6, #endif - .rxPins = { DEFIO_TAG_E(PA3), DEFIO_TAG_E(PD6), IO_TAG_NONE }, - .txPins = { DEFIO_TAG_E(PA2), DEFIO_TAG_E(PD5), IO_TAG_NONE }, + .rxPins = { { DEFIO_TAG_E(PA3) }, { DEFIO_TAG_E(PD6) } }, + .txPins = { { DEFIO_TAG_E(PA2) }, { DEFIO_TAG_E(PD5) } }, .af = GPIO_AF_USART2, .rcc = RCC_APB1(USART2), .irqn = USART2_IRQn, @@ -93,8 +93,8 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = { #ifdef USE_UART3_TX_DMA .txDMAStream = DMA1_Stream3, #endif - .rxPins = { DEFIO_TAG_E(PB11), DEFIO_TAG_E(PC11), DEFIO_TAG_E(PD9) }, - .txPins = { DEFIO_TAG_E(PB10), DEFIO_TAG_E(PC10), DEFIO_TAG_E(PD8) }, + .rxPins = { { DEFIO_TAG_E(PB11) }, { DEFIO_TAG_E(PC11) }, { DEFIO_TAG_E(PD9) } }, + .txPins = { { DEFIO_TAG_E(PB10) }, { DEFIO_TAG_E(PC10) }, { DEFIO_TAG_E(PD8) } }, .af = GPIO_AF_USART3, .rcc = RCC_APB1(USART3), .irqn = USART3_IRQn, @@ -114,8 +114,8 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = { #ifdef USE_UART4_TX_DMA .txDMAStream = DMA1_Stream4, #endif - .rxPins = { DEFIO_TAG_E(PA1), DEFIO_TAG_E(PC11), IO_TAG_NONE }, - .txPins = { DEFIO_TAG_E(PA0), DEFIO_TAG_E(PC10), IO_TAG_NONE }, + .rxPins = { { DEFIO_TAG_E(PA1) }, { DEFIO_TAG_E(PC11) } }, + .txPins = { { DEFIO_TAG_E(PA0) }, { DEFIO_TAG_E(PC10) } }, .af = GPIO_AF_UART4, .rcc = RCC_APB1(UART4), .irqn = UART4_IRQn, @@ -135,8 +135,8 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = { #ifdef USE_UART5_TX_DMA .txDMAStream = DMA1_Stream7, #endif - .rxPins = { DEFIO_TAG_E(PD2), IO_TAG_NONE, IO_TAG_NONE }, - .txPins = { DEFIO_TAG_E(PC12), IO_TAG_NONE, IO_TAG_NONE }, + .rxPins = { { DEFIO_TAG_E(PD2) } }, + .txPins = { { DEFIO_TAG_E(PC12) } }, .af = GPIO_AF_UART5, .rcc = RCC_APB1(UART5), .irqn = UART5_IRQn, @@ -156,8 +156,8 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = { #ifdef USE_UART6_TX_DMA .txDMAStream = DMA2_Stream6, #endif - .rxPins = { DEFIO_TAG_E(PC7), DEFIO_TAG_E(PG9), IO_TAG_NONE }, - .txPins = { DEFIO_TAG_E(PC6), DEFIO_TAG_E(PG14), IO_TAG_NONE }, + .rxPins = { { DEFIO_TAG_E(PC7) }, { DEFIO_TAG_E(PG9) } }, + .txPins = { { DEFIO_TAG_E(PC6) }, { DEFIO_TAG_E(PG14) } }, .af = GPIO_AF_USART6, .rcc = RCC_APB2(USART6), .irqn = USART6_IRQn, diff --git a/src/main/drivers/serial_uart_stm32f7xx.c b/src/main/drivers/serial_uart_stm32f7xx.c index 2b51e5d645..2bacb1a2ad 100644 --- a/src/main/drivers/serial_uart_stm32f7xx.c +++ b/src/main/drivers/serial_uart_stm32f7xx.c @@ -54,24 +54,19 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = { .txDMAStream = DMA2_Stream7, #endif .rxPins = { - DEFIO_TAG_E(PA10), DEFIO_TAG_E(PB7), + { DEFIO_TAG_E(PA10), GPIO_AF7_USART1 }, + { DEFIO_TAG_E(PB7), GPIO_AF7_USART1 }, #ifdef STM32F765xx - DEFIO_TAG_E(PB15), -#else - IO_TAG_NONE, + { DEFIO_TAG_E(PB15), GPIO_AF4_USART1 } #endif - IO_TAG_NONE }, .txPins = { - DEFIO_TAG_E(PA9), DEFIO_TAG_E(PB6), + { DEFIO_TAG_E(PA9), GPIO_AF7_USART1 }, + { DEFIO_TAG_E(PB6), GPIO_AF7_USART1 }, #ifdef STM32F765xx - DEFIO_TAG_E(PB14), -#else - IO_TAG_NONE, + { DEFIO_TAG_E(PB14), GPIO_AF4_USART1 } #endif - IO_TAG_NONE }, - .afs = { GPIO_AF7_USART1, GPIO_AF7_USART1, GPIO_AF4_USART1 }, #ifdef UART1_AHB1_PERIPHERALS .rcc_ahb1 = UART1_AHB1_PERIPHERALS, #endif @@ -94,9 +89,14 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = { #ifdef USE_UART2_TX_DMA .txDMAStream = DMA1_Stream6, #endif - .rxPins = { DEFIO_TAG_E(PA3), DEFIO_TAG_E(PD6), IO_TAG_NONE, IO_TAG_NONE }, - .txPins = { DEFIO_TAG_E(PA2), DEFIO_TAG_E(PD5), IO_TAG_NONE, IO_TAG_NONE }, - .afs = { GPIO_AF7_USART2, GPIO_AF7_USART2 }, + .rxPins = { + { DEFIO_TAG_E(PA3), GPIO_AF7_USART2 }, + { DEFIO_TAG_E(PD6), GPIO_AF7_USART2 } + }, + .txPins = { + { DEFIO_TAG_E(PA2), GPIO_AF7_USART2 }, + { DEFIO_TAG_E(PD5), GPIO_AF7_USART2 } + }, #ifdef UART2_AHB1_PERIPHERALS .rcc_ahb1 = UART2_AHB1_PERIPHERALS, #endif @@ -119,9 +119,16 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = { #ifdef USE_UART3_TX_DMA .txDMAStream = DMA1_Stream3, #endif - .rxPins = { DEFIO_TAG_E(PB11), DEFIO_TAG_E(PC11), DEFIO_TAG_E(PD9), IO_TAG_NONE }, - .txPins = { DEFIO_TAG_E(PB10), DEFIO_TAG_E(PC10), DEFIO_TAG_E(PD8), IO_TAG_NONE }, - .afs = { GPIO_AF7_USART3, GPIO_AF7_USART3, GPIO_AF7_USART3 }, + .rxPins = { + { DEFIO_TAG_E(PB11), GPIO_AF7_USART3 }, + { DEFIO_TAG_E(PC11), GPIO_AF7_USART3 }, + { DEFIO_TAG_E(PD9), GPIO_AF7_USART3 } + }, + .txPins = { + { DEFIO_TAG_E(PB10), GPIO_AF7_USART3 }, + { DEFIO_TAG_E(PC10), GPIO_AF7_USART3 }, + { DEFIO_TAG_E(PD8), GPIO_AF7_USART3 } + }, #ifdef UART3_AHB1_PERIPHERALS .rcc_ahb1 = UART3_AHB1_PERIPHERALS, #endif @@ -145,26 +152,21 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = { .txDMAStream = DMA1_Stream4, #endif .rxPins = { - DEFIO_TAG_E(PA1), DEFIO_TAG_E(PC11), + { DEFIO_TAG_E(PA1), GPIO_AF8_UART4 }, + { DEFIO_TAG_E(PC11), GPIO_AF8_UART4 }, #ifdef STM32F765xx - DEFIO_TAG_E(PA11), - DEFIO_TAG_E(PD0), -#else - IO_TAG_NONE, - IO_TAG_NONE + { DEFIO_TAG_E(PA11), GPIO_AF6_UART4 }, + { DEFIO_TAG_E(PD0), GPIO_AF8_UART4 } #endif }, .txPins = { - DEFIO_TAG_E(PA0), DEFIO_TAG_E(PC10), + { DEFIO_TAG_E(PA0), GPIO_AF8_UART4 }, + { DEFIO_TAG_E(PC10), GPIO_AF8_UART4 }, #ifdef STM32F765xx - DEFIO_TAG_E(PA12), - DEFIO_TAG_E(PD0), -#else - IO_TAG_NONE, - IO_TAG_NONE + { DEFIO_TAG_E(PA12), GPIO_AF6_UART4 }, + { DEFIO_TAG_E(PD1), GPIO_AF8_UART4 } #endif }, - .afs = { GPIO_AF8_UART4, GPIO_AF8_UART4, GPIO_AF6_UART4, GPIO_AF8_UART4 }, #ifdef UART4_AHB1_PERIPHERALS .rcc_ahb1 = UART4_AHB1_PERIPHERALS, #endif @@ -188,22 +190,21 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = { .txDMAStream = DMA1_Stream7, #endif .rxPins = { - DEFIO_TAG_E(PD2), + { DEFIO_TAG_E(PD2), GPIO_AF8_UART5 }, #ifdef STM32F765xx - DEFIO_TAG_E(PB5), DEFIO_TAG_E(PB8), DEFIO_TAG_E(PB12), -#else - IO_TAG_NONE, IO_TAG_NONE, IO_TAG_NONE + { DEFIO_TAG_E(PB5), GPIO_AF1_UART5 }, + { DEFIO_TAG_E(PB8), GPIO_AF7_UART5 }, + { DEFIO_TAG_E(PB12), GPIO_AF8_UART5 } #endif }, .txPins = { - DEFIO_TAG_E(PC12), + { DEFIO_TAG_E(PC12), GPIO_AF8_UART5 }, #ifdef STM32F765xx - DEFIO_TAG_E(PB6), DEFIO_TAG_E(PB9), DEFIO_TAG_E(PB13), -#else - IO_TAG_NONE, IO_TAG_NONE, IO_TAG_NONE + { DEFIO_TAG_E(PB6), GPIO_AF1_UART5 }, + { DEFIO_TAG_E(PB9), GPIO_AF7_UART5 }, + { DEFIO_TAG_E(PB13), GPIO_AF8_UART5 } #endif }, - .afs = { GPIO_AF8_UART5, GPIO_AF1_UART5, GPIO_AF7_UART5, GPIO_AF8_UART5 }, #ifdef UART5_AHB1_PERIPHERALS .rcc_ahb1 = UART5_AHB1_PERIPHERALS, #endif @@ -226,9 +227,14 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = { #ifdef USE_UART6_TX_DMA .txDMAStream = DMA2_Stream6, #endif - .rxPins = { DEFIO_TAG_E(PC7), DEFIO_TAG_E(PG9), IO_TAG_NONE }, - .txPins = { DEFIO_TAG_E(PC6), DEFIO_TAG_E(PG14), IO_TAG_NONE }, - .afs = { GPIO_AF8_USART6, GPIO_AF8_USART6 }, + .rxPins = { + { DEFIO_TAG_E(PC7), GPIO_AF8_USART6 }, + { DEFIO_TAG_E(PG9), GPIO_AF8_USART6 } + }, + .txPins = { + { DEFIO_TAG_E(PC6), GPIO_AF8_USART6 }, + { DEFIO_TAG_E(PG14), GPIO_AF8_USART6 } + }, #ifdef UART6_AHB1_PERIPHERALS .rcc_ahb1 = UART6_AHB1_PERIPHERALS, #endif @@ -252,22 +258,21 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = { .txDMAStream = DMA1_Stream1, #endif .rxPins = { - DEFIO_TAG_E(PE7), DEFIO_TAG_E(PF6), + { DEFIO_TAG_E(PE7), GPIO_AF8_UART7 }, + { DEFIO_TAG_E(PF6), GPIO_AF8_UART7 }, #ifdef STM32F765xx - DEFIO_TAG_E(PA8), DEFIO_TAG_E(PB3), -#else - IO_TAG_NONE, IO_TAG_NONE + { DEFIO_TAG_E(PA8), GPIO_AF12_UART7 }, + { DEFIO_TAG_E(PB3), GPIO_AF12_UART7 } #endif }, .txPins = { - DEFIO_TAG_E(PE8), DEFIO_TAG_E(PF7), + { DEFIO_TAG_E(PE8), GPIO_AF8_UART7 }, + { DEFIO_TAG_E(PF7), GPIO_AF8_UART7 }, #ifdef STM32F765xx - DEFIO_TAG_E(PA15), DEFIO_TAG_E(PB4), -#else - IO_TAG_NONE, IO_TAG_NONE + { DEFIO_TAG_E(PA15), GPIO_AF12_UART7 }, + { DEFIO_TAG_E(PB4), GPIO_AF12_UART7 } #endif }, - .afs = { GPIO_AF8_UART7, GPIO_AF8_UART7, GPIO_AF12_UART7, GPIO_AF12_UART7 }, #ifdef UART7_AHB1_PERIPHERALS .rcc_ahb1 = UART7_AHB1_PERIPHERALS, #endif @@ -290,9 +295,12 @@ const uartHardware_t uartHardware[UARTDEV_COUNT] = { #ifdef USE_UART8_TX_DMA .txDMAStream = DMA1_Stream0, #endif - .rxPins = { DEFIO_TAG_E(PE0), IO_TAG_NONE, IO_TAG_NONE }, - .txPins = { DEFIO_TAG_E(PE1), IO_TAG_NONE, IO_TAG_NONE }, - .afs = { GPIO_AF8_UART8, GPIO_AF8_UART8, 0 }, + .rxPins = { + { DEFIO_TAG_E(PE0), GPIO_AF8_UART8 } + }, + .txPins = { + { DEFIO_TAG_E(PE1), GPIO_AF8_UART8 } + }, #ifdef UART8_AHB1_PERIPHERALS .rcc_ahb1 = UART8_AHB1_PERIPHERALS, #endif @@ -433,20 +441,6 @@ uartPort_t *serialUART(UARTDevice_e device, uint32_t baudRate, portMode_e mode, s->Handle.Instance = hardware->reg; - size_t txPinIndex; - for (txPinIndex = 0; txPinIndex < UARTHARDWARE_MAX_PINS; ++txPinIndex) { - if (hardware->txPins[txPinIndex] == uartdev->tx) { - break; - } - } - - size_t rxPinIndex; - for (rxPinIndex = 0; rxPinIndex < UARTHARDWARE_MAX_PINS; ++rxPinIndex) { - if (hardware->rxPins[rxPinIndex] == uartdev->rx) { - break; - } - } - IO_t txIO = IOGetByTag(uartdev->tx); IO_t rxIO = IOGetByTag(uartdev->rx); @@ -458,17 +452,17 @@ uartPort_t *serialUART(UARTDevice_e device, uint32_t baudRate, portMode_e mode, ); IOInit(txIO, OWNER_SERIAL_TX, RESOURCE_INDEX(device)); - IOConfigGPIOAF(txIO, ioCfg, hardware->afs[txPinIndex]); + IOConfigGPIOAF(txIO, ioCfg, uartdev->txAF); } else { if ((mode & MODE_TX) && txIO) { IOInit(txIO, OWNER_SERIAL_TX, RESOURCE_INDEX(device)); - IOConfigGPIOAF(txIO, IOCFG_AF_PP, hardware->afs[txPinIndex]); + IOConfigGPIOAF(txIO, IOCFG_AF_PP, uartdev->txAF); } if ((mode & MODE_RX) && rxIO) { IOInit(rxIO, OWNER_SERIAL_RX, RESOURCE_INDEX(device)); - IOConfigGPIOAF(rxIO, IOCFG_AF_PP, hardware->afs[rxPinIndex]); + IOConfigGPIOAF(rxIO, IOCFG_AF_PP, uartdev->rxAF); } }