diff options
| author | hathach <[email protected]> | 2026-04-03 19:38:07 +0700 |
|---|---|---|
| committer | hathach <[email protected]> | 2026-04-03 19:38:07 +0700 |
| commit | 81efb78d1655dcab31da5e03fd7e22e91491d186 (patch) | |
| tree | 0ea8eafc8730146e3a29f3e0349bfa3d02fa635a | |
| parent | 3ed9d6517485611b040ecdc4e5d327b6e86f3dee (diff) | |
update stm32 to use better uart id
70 files changed, 481 insertions, 341 deletions
diff --git a/hw/bsp/stm32c0/boards/stm32c071nucleo/board.h b/hw/bsp/stm32c0/boards/stm32c071nucleo/board.h index 460b42a21..085d0d721 100644 --- a/hw/bsp/stm32c0/boards/stm32c071nucleo/board.h +++ b/hw/bsp/stm32c0/boards/stm32c071nucleo/board.h @@ -54,8 +54,7 @@ #define BUTTON_STATE_ACTIVE 0 // Enable UART serial communication with the ST-Link -#define UART_DEV USART2 -#define UART_CLK_EN __HAL_RCC_USART2_CLK_ENABLE +#define UART_ID 2 #define UART_GPIO_PORT GPIOA #define UART_GPIO_AF GPIO_AF1_USART2 #define UART_TX_PIN GPIO_PIN_2 diff --git a/hw/bsp/stm32c0/family.c b/hw/bsp/stm32c0/family.c index d99720a64..72af3ce7f 100644 --- a/hw/bsp/stm32c0/family.c +++ b/hw/bsp/stm32c0/family.c @@ -33,6 +33,16 @@ #include "bsp/board_api.h" #include "board.h" +#ifdef UART_ID + #if UART_ID == 1 + #define USARTn USART1 + #define UARTn_CLK_ENABLE __HAL_RCC_USART1_CLK_ENABLE + #elif UART_ID == 2 + #define USARTn USART2 + #define UARTn_CLK_ENABLE __HAL_RCC_USART2_CLK_ENABLE + #endif +#endif + //--------------------------------------------------------------------+ // Forward USB interrupt events to TinyUSB IRQ Handler //--------------------------------------------------------------------+ @@ -49,7 +59,9 @@ void USB_IRQHandler(void) { //--------------------------------------------------------------------+ // MACRO TYPEDEF CONSTANT ENUM //--------------------------------------------------------------------+ +#ifdef UART_ID UART_HandleTypeDef UartHandle; +#endif void board_init(void) { HAL_Init(); @@ -93,8 +105,8 @@ void board_init(void) { HAL_GPIO_Init(BUTTON_PORT, &gpio_init); } -#ifdef UART_DEV - UART_CLK_EN(); +#ifdef UART_ID + UARTn_CLK_ENABLE(); // UART { GPIO_InitTypeDef gpio_init = { 0 }; @@ -107,7 +119,7 @@ void board_init(void) { } UartHandle = (UART_HandleTypeDef){ - .Instance = UART_DEV, + .Instance = USARTn, .Init.BaudRate = CFG_BOARD_UART_BAUDRATE, .Init.WordLength = UART_WORDLENGTH_8B, .Init.StopBits = UART_STOPBITS_1, @@ -149,7 +161,7 @@ size_t board_get_unique_id(uint8_t id[], size_t max_len) { } int board_uart_read(uint8_t *buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID int count = 0; while (count < len) { if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) { @@ -167,7 +179,7 @@ int board_uart_read(uint8_t *buf, int len) { } int board_uart_write(void const *buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID const uint8_t *p = (const uint8_t *) buf; int count = 0; while (count < len) { diff --git a/hw/bsp/stm32f0/boards/stm32f070rbnucleo/board.h b/hw/bsp/stm32f0/boards/stm32f070rbnucleo/board.h index 82ad309a3..5239e014f 100644 --- a/hw/bsp/stm32f0/boards/stm32f070rbnucleo/board.h +++ b/hw/bsp/stm32f0/boards/stm32f070rbnucleo/board.h @@ -47,8 +47,7 @@ #define BUTTON_STATE_ACTIVE 0 // UART -#define UART_DEV USART2 -#define UART_CLK_EN __HAL_RCC_USART2_CLK_ENABLE +#define UART_ID 2 #define UART_GPIO_PORT GPIOA #define UART_GPIO_AF GPIO_AF1_USART2 #define UART_TX_PIN GPIO_PIN_2 diff --git a/hw/bsp/stm32f0/boards/stm32f072disco/board.h b/hw/bsp/stm32f0/boards/stm32f072disco/board.h index 3ca1b3641..971d9bdc0 100644 --- a/hw/bsp/stm32f0/boards/stm32f072disco/board.h +++ b/hw/bsp/stm32f0/boards/stm32f072disco/board.h @@ -47,8 +47,7 @@ #define BUTTON_STATE_ACTIVE 1 // UART -#define UART_DEV USART1 -#define UART_CLK_EN __HAL_RCC_USART1_CLK_ENABLE +#define UART_ID 1 #define UART_GPIO_PORT GPIOA #define UART_GPIO_AF GPIO_AF1_USART1 #define UART_TX_PIN GPIO_PIN_9 diff --git a/hw/bsp/stm32f0/boards/stm32f072eval/board.h b/hw/bsp/stm32f0/boards/stm32f072eval/board.h index 2828000b9..32023f8ab 100644 --- a/hw/bsp/stm32f0/boards/stm32f072eval/board.h +++ b/hw/bsp/stm32f0/boards/stm32f072eval/board.h @@ -50,8 +50,7 @@ #define BUTTON_STATE_ACTIVE 1 // UART -#define UART_DEV USART2 -#define UART_CLK_EN __HAL_RCC_USART2_CLK_ENABLE +#define UART_ID 2 #define UART_GPIO_PORT GPIOD #define UART_GPIO_AF GPIO_AF0_USART2 #define UART_TX_PIN GPIO_PIN_5 diff --git a/hw/bsp/stm32f0/family.c b/hw/bsp/stm32f0/family.c index a6ed8629f..f413163e5 100644 --- a/hw/bsp/stm32f0/family.c +++ b/hw/bsp/stm32f0/family.c @@ -33,6 +33,20 @@ #include "common/tusb_fifo.h" #include "board.h" +#ifdef UART_ID + #if UART_ID == 1 + #define USARTn USART1 + #define USARTn_IRQn USART1_IRQn + #define USARTn_IRQHandler USART1_IRQHandler + #define UARTn_CLK_ENABLE __HAL_RCC_USART1_CLK_ENABLE + #elif UART_ID == 2 + #define USARTn USART2 + #define USARTn_IRQn USART2_IRQn + #define USARTn_IRQHandler USART2_IRQHandler + #define UARTn_CLK_ENABLE __HAL_RCC_USART2_CLK_ENABLE + #endif +#endif + //--------------------------------------------------------------------+ // Forward USB interrupt events to TinyUSB IRQ Handler //--------------------------------------------------------------------+ @@ -43,9 +57,9 @@ void USB_IRQHandler(void) { //--------------------------------------------------------------------+ // MACRO TYPEDEF CONSTANT ENUM //--------------------------------------------------------------------+ -#ifdef UART_DEV +#ifdef UART_ID static UART_HandleTypeDef UartHandle = { - .Instance = UART_DEV, + .Instance = USARTn, .Init = { .BaudRate = CFG_BOARD_UART_BAUDRATE, .WordLength = UART_WORDLENGTH_8B, @@ -62,23 +76,16 @@ static uint8_t uart_rx_ff_buf[32]; static tu_fifo_t uart_rx_ff; // F0 uses new USART IP (ISR/RDR/TDR/ICR) — same as F7 -static void uart_rx_isr(void) { - uint32_t isr = UART_DEV->ISR; +void USARTn_IRQHandler(void) { + uint32_t isr = USARTn->ISR; if (isr & USART_ISR_RXNE) { - uint8_t byte = (uint8_t) UART_DEV->RDR; + uint8_t byte = (uint8_t) USARTn->RDR; tu_fifo_write(&uart_rx_ff, &byte); } if (isr & (USART_ISR_ORE | USART_ISR_FE | USART_ISR_NE | USART_ISR_PE)) { - UART_DEV->ICR = USART_ICR_ORECF | USART_ICR_FECF | USART_ICR_NCF | USART_ICR_PECF; + USARTn->ICR = USART_ICR_ORECF | USART_ICR_FECF | USART_ICR_NCF | USART_ICR_PECF; } } - -void USART1_IRQHandler(void) { - uart_rx_isr(); -} -void USART2_IRQHandler(void) { - uart_rx_isr(); -} #endif void board_init(void) { @@ -118,9 +125,9 @@ void board_init(void) { GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(BUTTON_PORT, &GPIO_InitStruct); -#ifdef UART_DEV +#ifdef UART_ID // Enable UART Clock - UART_CLK_EN(); + UARTn_CLK_ENABLE(); // Uart GPIO_InitStruct.Pin = UART_TX_PIN | UART_RX_PIN; @@ -132,10 +139,9 @@ void board_init(void) { HAL_UART_Init(&UartHandle); tu_fifo_config(&uart_rx_ff, uart_rx_ff_buf, sizeof(uart_rx_ff_buf), false); - UART_DEV->CR1 |= USART_CR1_RXNEIE; - const IRQn_Type uart_irqn = (UART_DEV == USART1) ? USART1_IRQn : USART2_IRQn; - NVIC_SetPriority(uart_irqn, (1 << __NVIC_PRIO_BITS) - 1); - NVIC_EnableIRQ(uart_irqn); + USARTn->CR1 |= USART_CR1_RXNEIE; + NVIC_SetPriority(USARTn_IRQn, (1 << __NVIC_PRIO_BITS) - 1); + NVIC_EnableIRQ(USARTn_IRQn); #endif // USB Pins @@ -177,7 +183,7 @@ size_t board_get_unique_id(uint8_t id[], size_t max_len) { } int board_uart_read(uint8_t *buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID return (int) tu_fifo_read_n(&uart_rx_ff, buf, (uint16_t) len); #else (void) buf; (void) len; @@ -186,7 +192,7 @@ int board_uart_read(uint8_t *buf, int len) { } int board_uart_write(void const *buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID const uint8_t *p = (const uint8_t *) buf; int count = 0; while (count < len) { diff --git a/hw/bsp/stm32f1/boards/stm32f103_bluepill/board.h b/hw/bsp/stm32f1/boards/stm32f103_bluepill/board.h index c8a74337f..3549c1d79 100644 --- a/hw/bsp/stm32f1/boards/stm32f103_bluepill/board.h +++ b/hw/bsp/stm32f1/boards/stm32f103_bluepill/board.h @@ -47,8 +47,7 @@ #define BUTTON_STATE_ACTIVE 1 // UART -#define UART_DEV USART1 -#define UART_CLK_EN __HAL_RCC_USART1_CLK_ENABLE +#define UART_ID 1 #define UART_GPIO_PORT GPIOA //#define UART_GPIO_AF GPIO_AF1_USART1 #define UART_TX_PIN GPIO_PIN_9 diff --git a/hw/bsp/stm32f1/family.c b/hw/bsp/stm32f1/family.c index fa2d3b268..74e0f53f2 100644 --- a/hw/bsp/stm32f1/family.c +++ b/hw/bsp/stm32f1/family.c @@ -33,6 +33,25 @@ #include "common/tusb_fifo.h" #include "board.h" +#ifdef UART_ID + #if UART_ID == 1 + #define USARTn USART1 + #define USARTn_IRQn USART1_IRQn + #define USARTn_IRQHandler USART1_IRQHandler + #define UARTn_CLK_ENABLE __HAL_RCC_USART1_CLK_ENABLE + #elif UART_ID == 2 + #define USARTn USART2 + #define USARTn_IRQn USART2_IRQn + #define USARTn_IRQHandler USART2_IRQHandler + #define UARTn_CLK_ENABLE __HAL_RCC_USART2_CLK_ENABLE + #elif UART_ID == 3 + #define USARTn USART3 + #define USARTn_IRQn USART3_IRQn + #define USARTn_IRQHandler USART3_IRQHandler + #define UARTn_CLK_ENABLE __HAL_RCC_USART3_CLK_ENABLE + #endif +#endif + //--------------------------------------------------------------------+ // Forward USB interrupt events to TinyUSB IRQ Handler //--------------------------------------------------------------------+ @@ -51,9 +70,9 @@ void USBWakeUp_IRQHandler(void) { //--------------------------------------------------------------------+ // MACRO TYPEDEF CONSTANT ENUM //--------------------------------------------------------------------+ -#ifdef UART_DEV +#ifdef UART_ID static UART_HandleTypeDef UartHandle = { - .Instance = UART_DEV, + .Instance = USARTn, .Init.BaudRate = CFG_BOARD_UART_BAUDRATE, .Init.WordLength = UART_WORDLENGTH_8B, .Init.StopBits = UART_STOPBITS_1, @@ -68,24 +87,14 @@ static uint8_t uart_rx_ff_buf[32]; static tu_fifo_t uart_rx_ff; // F1 uses old USART IP (SR/DR) -static void uart_rx_isr(void) { - uint32_t sr = UART_DEV->SR; +void USARTn_IRQHandler(void) { + uint32_t sr = USARTn->SR; if (sr & USART_SR_RXNE) { - uint8_t byte = (uint8_t) UART_DEV->DR; + uint8_t byte = (uint8_t) USARTn->DR; tu_fifo_write(&uart_rx_ff, &byte); } // Reading DR clears RXNE. OR is cleared by reading SR then DR (already done). } - -void USART1_IRQHandler(void) { - uart_rx_isr(); -} -void USART2_IRQHandler(void) { - uart_rx_isr(); -} -void USART3_IRQHandler(void) { - uart_rx_isr(); -} #endif void board_init(void) { @@ -137,9 +146,9 @@ void board_init(void) { GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(BUTTON_PORT, &GPIO_InitStruct); -#ifdef UART_DEV +#ifdef UART_ID // UART - UART_CLK_EN(); + UARTn_CLK_ENABLE(); GPIO_InitStruct.Pin = UART_TX_PIN | UART_RX_PIN; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; @@ -150,12 +159,9 @@ void board_init(void) { HAL_UART_Init(&UartHandle); tu_fifo_config(&uart_rx_ff, uart_rx_ff_buf, sizeof(uart_rx_ff_buf), false); - UART_DEV->CR1 |= USART_CR1_RXNEIE; - const IRQn_Type uart_irqn = (UART_DEV == USART1) ? USART1_IRQn - : (UART_DEV == USART2) ? USART2_IRQn - : USART3_IRQn; - NVIC_SetPriority(uart_irqn, (1 << __NVIC_PRIO_BITS) - 1); - NVIC_EnableIRQ(uart_irqn); + USARTn->CR1 |= USART_CR1_RXNEIE; + NVIC_SetPriority(USARTn_IRQn, (1 << __NVIC_PRIO_BITS) - 1); + NVIC_EnableIRQ(USARTn_IRQn); #endif #ifdef USB_CONNECT_PIN @@ -217,7 +223,7 @@ size_t board_get_unique_id(uint8_t id[], size_t max_len) { } int board_uart_read(uint8_t *buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID return (int) tu_fifo_read_n(&uart_rx_ff, buf, (uint16_t) len); #else (void) buf; (void) len; @@ -226,7 +232,7 @@ int board_uart_read(uint8_t *buf, int len) { } int board_uart_write(void const *buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID const uint8_t *p = (const uint8_t *) buf; int count = 0; while (count < len) { diff --git a/hw/bsp/stm32f2/family.c b/hw/bsp/stm32f2/family.c index 3106fc9e3..051a026c5 100644 --- a/hw/bsp/stm32f2/family.c +++ b/hw/bsp/stm32f2/family.c @@ -33,6 +33,25 @@ #include "common/tusb_fifo.h" #include "board.h" +#ifdef UART_ID + #if UART_ID == 1 + #define USARTn USART1 + #define USARTn_IRQn USART1_IRQn + #define USARTn_IRQHandler USART1_IRQHandler + #define UARTn_CLK_ENABLE __HAL_RCC_USART1_CLK_ENABLE + #elif UART_ID == 2 + #define USARTn USART2 + #define USARTn_IRQn USART2_IRQn + #define USARTn_IRQHandler USART2_IRQHandler + #define UARTn_CLK_ENABLE __HAL_RCC_USART2_CLK_ENABLE + #elif UART_ID == 3 + #define USARTn USART3 + #define USARTn_IRQn USART3_IRQn + #define USARTn_IRQHandler USART3_IRQHandler + #define UARTn_CLK_ENABLE __HAL_RCC_USART3_CLK_ENABLE + #endif +#endif + //--------------------------------------------------------------------+ // Forward USB interrupt events to TinyUSB IRQ Handler //--------------------------------------------------------------------+ @@ -43,9 +62,9 @@ void OTG_FS_IRQHandler(void) { //--------------------------------------------------------------------+ // MACRO TYPEDEF CONSTANT ENUM //--------------------------------------------------------------------+ -#ifdef UART_DEV +#ifdef UART_ID static UART_HandleTypeDef UartHandle = { - .Instance = UART_DEV, + .Instance = USARTn, .Init = { .BaudRate = CFG_BOARD_UART_BAUDRATE, .WordLength = UART_WORDLENGTH_8B, @@ -62,24 +81,14 @@ static uint8_t uart_rx_ff_buf[32]; static tu_fifo_t uart_rx_ff; // F2 uses old USART IP (SR/DR) -static void uart_rx_isr(void) { - uint32_t sr = UART_DEV->SR; +void USARTn_IRQHandler(void) { + uint32_t sr = USARTn->SR; if (sr & USART_SR_RXNE) { - uint8_t byte = (uint8_t) UART_DEV->DR; + uint8_t byte = (uint8_t) USARTn->DR; tu_fifo_write(&uart_rx_ff, &byte); } // Reading DR clears RXNE. OR is cleared by reading SR then DR (already done). } - -void USART1_IRQHandler(void) { - uart_rx_isr(); -} -void USART2_IRQHandler(void) { - uart_rx_isr(); -} -void USART3_IRQHandler(void) { - uart_rx_isr(); -} #endif //--------------------------------------------------------------------+ @@ -155,15 +164,12 @@ void board_init(void) { tud_configure(0, TUD_CFGID_DWC2, &cfg); #endif -#ifdef UART_DEV +#ifdef UART_ID HAL_UART_Init(&UartHandle); tu_fifo_config(&uart_rx_ff, uart_rx_ff_buf, sizeof(uart_rx_ff_buf), false); - UART_DEV->CR1 |= USART_CR1_RXNEIE; - const IRQn_Type uart_irqn = (UART_DEV == USART1) ? USART1_IRQn - : (UART_DEV == USART2) ? USART2_IRQn - : USART3_IRQn; - NVIC_SetPriority(uart_irqn, (1 << __NVIC_PRIO_BITS) - 1); - NVIC_EnableIRQ(uart_irqn); + USARTn->CR1 |= USART_CR1_RXNEIE; + NVIC_SetPriority(USARTn_IRQn, (1 << __NVIC_PRIO_BITS) - 1); + NVIC_EnableIRQ(USARTn_IRQn); #endif } @@ -181,7 +187,7 @@ uint32_t board_button_read(void) { } int board_uart_read(uint8_t* buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID return (int) tu_fifo_read_n(&uart_rx_ff, buf, (uint16_t) len); #else (void) buf; (void) len; @@ -190,7 +196,7 @@ int board_uart_read(uint8_t* buf, int len) { } int board_uart_write(void const* buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID const uint8_t *p = (const uint8_t *) buf; int count = 0; while (count < len) { diff --git a/hw/bsp/stm32f3/family.c b/hw/bsp/stm32f3/family.c index 8cee5f8c0..0864d0fad 100644 --- a/hw/bsp/stm32f3/family.c +++ b/hw/bsp/stm32f3/family.c @@ -33,6 +33,25 @@ #include "common/tusb_fifo.h" #include "board.h" +#ifdef UART_ID + #if UART_ID == 1 + #define USARTn USART1 + #define USARTn_IRQn USART1_IRQn + #define USARTn_IRQHandler USART1_IRQHandler + #define UARTn_CLK_ENABLE __HAL_RCC_USART1_CLK_ENABLE + #elif UART_ID == 2 + #define USARTn USART2 + #define USARTn_IRQn USART2_IRQn + #define USARTn_IRQHandler USART2_IRQHandler + #define UARTn_CLK_ENABLE __HAL_RCC_USART2_CLK_ENABLE + #elif UART_ID == 3 + #define USARTn USART3 + #define USARTn_IRQn USART3_IRQn + #define USARTn_IRQHandler USART3_IRQHandler + #define UARTn_CLK_ENABLE __HAL_RCC_USART3_CLK_ENABLE + #endif +#endif + //--------------------------------------------------------------------+ // Forward USB interrupt events to TinyUSB IRQ Handler //--------------------------------------------------------------------+ @@ -64,9 +83,9 @@ void USBWakeUp_RMP_IRQHandler(void) { //--------------------------------------------------------------------+ // MACRO TYPEDEF CONSTANT ENUM //--------------------------------------------------------------------+ -#ifdef UART_DEV +#ifdef UART_ID static UART_HandleTypeDef UartHandle = { - .Instance = UART_DEV, + .Instance = USARTn, .Init = { .BaudRate = CFG_BOARD_UART_BAUDRATE, .WordLength = UART_WORDLENGTH_8B, @@ -83,26 +102,16 @@ static uint8_t uart_rx_ff_buf[32]; static tu_fifo_t uart_rx_ff; // F3 uses new USART IP (ISR/RDR/TDR/ICR) — same as F7 -static void uart_rx_isr(void) { - uint32_t isr = UART_DEV->ISR; +void USARTn_IRQHandler(void) { + uint32_t isr = USARTn->ISR; if (isr & USART_ISR_RXNE) { - uint8_t byte = (uint8_t) UART_DEV->RDR; + uint8_t byte = (uint8_t) USARTn->RDR; tu_fifo_write(&uart_rx_ff, &byte); } if (isr & (USART_ISR_ORE | USART_ISR_FE | USART_ISR_NE | USART_ISR_PE)) { - UART_DEV->ICR = USART_ICR_ORECF | USART_ICR_FECF | USART_ICR_NCF | USART_ICR_PECF; + USARTn->ICR = USART_ICR_ORECF | USART_ICR_FECF | USART_ICR_NCF | USART_ICR_PECF; } } - -void USART1_IRQHandler(void) { - uart_rx_isr(); -} -void USART2_IRQHandler(void) { - uart_rx_isr(); -} -void USART3_IRQHandler(void) { - uart_rx_isr(); -} #endif //--------------------------------------------------------------------+ @@ -154,15 +163,12 @@ void board_init(void) { // Enable USB clock __HAL_RCC_USB_CLK_ENABLE(); -#ifdef UART_DEV +#ifdef UART_ID HAL_UART_Init(&UartHandle); tu_fifo_config(&uart_rx_ff, uart_rx_ff_buf, sizeof(uart_rx_ff_buf), false); - UART_DEV->CR1 |= USART_CR1_RXNEIE; - const IRQn_Type uart_irqn = (UART_DEV == USART1) ? USART1_IRQn - : (UART_DEV == USART2) ? USART2_IRQn - : USART3_IRQn; - NVIC_SetPriority(uart_irqn, (1 << __NVIC_PRIO_BITS) - 1); - NVIC_EnableIRQ(uart_irqn); + USARTn->CR1 |= USART_CR1_RXNEIE; + NVIC_SetPriority(USARTn_IRQn, (1 << __NVIC_PRIO_BITS) - 1); + NVIC_EnableIRQ(USARTn_IRQn); #endif } @@ -193,7 +199,7 @@ size_t board_get_unique_id(uint8_t id[], size_t max_len) { } int board_uart_read(uint8_t* buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID return (int) tu_fifo_read_n(&uart_rx_ff, buf, (uint16_t) len); #else (void) buf; (void) len; @@ -202,7 +208,7 @@ int board_uart_read(uint8_t* buf, int len) { } int board_uart_write(void const* buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID const uint8_t *p = (const uint8_t *) buf; int count = 0; while (count < len) { diff --git a/hw/bsp/stm32f4/boards/feather_stm32f405/board.h b/hw/bsp/stm32f4/boards/feather_stm32f405/board.h index 2db42b98a..fa3233b46 100644 --- a/hw/bsp/stm32f4/boards/feather_stm32f405/board.h +++ b/hw/bsp/stm32f4/boards/feather_stm32f405/board.h @@ -36,7 +36,7 @@ extern "C" { #endif -#define UART_DEV USART3 +#define UART_ID 3 #define PINID_LED 0 #define PINID_BUTTON 1 @@ -104,8 +104,6 @@ static inline void board_clock_init(void) RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5); - // Enable clocks for Uart - __HAL_RCC_USART3_CLK_ENABLE(); } static inline void board_vbus_set(uint8_t rhport, bool state) { diff --git a/hw/bsp/stm32f4/boards/pyboardv11/board.h b/hw/bsp/stm32f4/boards/pyboardv11/board.h index 319d2336a..0848fb27d 100644 --- a/hw/bsp/stm32f4/boards/pyboardv11/board.h +++ b/hw/bsp/stm32f4/boards/pyboardv11/board.h @@ -36,7 +36,7 @@ extern "C" { #endif -#define UART_DEV USART2 +#define UART_ID 2 #define PINID_LED 0 #define PINID_BUTTON 1 @@ -104,8 +104,6 @@ static inline void board_clock_init(void) RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5); - // Enable clocks for Uart - __HAL_RCC_USART2_CLK_ENABLE(); } static inline void board_vbus_set(uint8_t rhport, bool state) { diff --git a/hw/bsp/stm32f4/boards/stm32f401blackpill/board.h b/hw/bsp/stm32f4/boards/stm32f401blackpill/board.h index b69ebbeaf..931087c1a 100644 --- a/hw/bsp/stm32f4/boards/stm32f401blackpill/board.h +++ b/hw/bsp/stm32f4/boards/stm32f401blackpill/board.h @@ -37,7 +37,7 @@ #endif // Enable PA2 as the debug log UART -#define UART_DEV USART2 +#define UART_ID 2 #define PINID_LED 0 #define PINID_BUTTON 1 @@ -105,8 +105,6 @@ static inline void board_clock_init(void) RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2); - // Enable clocks for Uart - __HAL_RCC_USART2_CLK_ENABLE(); } static inline void board_vbus_set(uint8_t rhport, bool state) { diff --git a/hw/bsp/stm32f4/boards/stm32f407blackvet/board.h b/hw/bsp/stm32f4/boards/stm32f407blackvet/board.h index ebefeb988..f6d4a71d3 100644 --- a/hw/bsp/stm32f4/boards/stm32f407blackvet/board.h +++ b/hw/bsp/stm32f4/boards/stm32f407blackvet/board.h @@ -37,7 +37,7 @@ #endif // Enable PA2 as the debug log UART -#define UART_DEV USART2 +#define UART_ID 2 #define PINID_LED 0 #define PINID_BUTTON 1 @@ -104,8 +104,6 @@ static inline void board_clock_init(void) RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5); - // Enable clocks for LED, Button, Uart - __HAL_RCC_USART2_CLK_ENABLE(); } static inline void board_vbus_set(uint8_t rhport, bool state) { diff --git a/hw/bsp/stm32f4/boards/stm32f407disco/board.h b/hw/bsp/stm32f4/boards/stm32f407disco/board.h index bcfa6059a..8f9a8a18d 100644 --- a/hw/bsp/stm32f4/boards/stm32f407disco/board.h +++ b/hw/bsp/stm32f4/boards/stm32f407disco/board.h @@ -38,7 +38,7 @@ // Enable PA2 as the debug log UART // It is not routed to the ST/Link on the Discovery board. -#define UART_DEV USART2 +#define UART_ID 2 #define PINID_LED 0 #define PINID_BUTTON 1 @@ -112,8 +112,6 @@ static inline void board_clock_init(void) RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5); - // Enable clocks Uart - __HAL_RCC_USART2_CLK_ENABLE(); } static inline void board_vbus_set(uint8_t rhport, bool state) { diff --git a/hw/bsp/stm32f4/boards/stm32f411blackpill/board.h b/hw/bsp/stm32f4/boards/stm32f411blackpill/board.h index 0faf6fe11..a12f47938 100644 --- a/hw/bsp/stm32f4/boards/stm32f411blackpill/board.h +++ b/hw/bsp/stm32f4/boards/stm32f411blackpill/board.h @@ -36,7 +36,7 @@ extern "C" { #endif -#define UART_DEV USART2 +#define UART_ID 2 #define PINID_LED 0 #define PINID_BUTTON 1 @@ -104,8 +104,6 @@ static inline void board_clock_init(void) RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2); - // Enable clocks for Uart - __HAL_RCC_USART2_CLK_ENABLE(); } static inline void board_vbus_set(uint8_t rhport, bool state) { diff --git a/hw/bsp/stm32f4/boards/stm32f411disco/board.h b/hw/bsp/stm32f4/boards/stm32f411disco/board.h index 1a289dfb5..291589629 100644 --- a/hw/bsp/stm32f4/boards/stm32f411disco/board.h +++ b/hw/bsp/stm32f4/boards/stm32f411disco/board.h @@ -36,7 +36,7 @@ extern "C" { #endif -#define UART_DEV USART2 +#define UART_ID 2 #define PINID_LED 0 #define PINID_BUTTON 1 @@ -109,8 +109,6 @@ static inline void board_clock_init(void) { RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2); - // Enable clocks for UART - __HAL_RCC_USART2_CLK_ENABLE(); } static inline void board_vbus_set(uint8_t rhport, bool state) { diff --git a/hw/bsp/stm32f4/boards/stm32f412disco/board.h b/hw/bsp/stm32f4/boards/stm32f412disco/board.h index 0689dfe87..b7192b185 100644 --- a/hw/bsp/stm32f4/boards/stm32f412disco/board.h +++ b/hw/bsp/stm32f4/boards/stm32f412disco/board.h @@ -37,7 +37,7 @@ #endif // UART Enable PA2 as the debug log UART -#define UART_DEV USART2 +#define UART_ID 2 #define PINID_LED 0 #define PINID_BUTTON 1 @@ -125,8 +125,6 @@ static inline void board_clock_init(void) { RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3); - // Enable clocks for Uart - __HAL_RCC_USART2_CLK_ENABLE(); } static inline void board_vbus_set(uint8_t rhport, bool state) { diff --git a/hw/bsp/stm32f4/boards/stm32f412nucleo/board.h b/hw/bsp/stm32f4/boards/stm32f412nucleo/board.h index be58f8ae7..77616d707 100644 --- a/hw/bsp/stm32f4/boards/stm32f412nucleo/board.h +++ b/hw/bsp/stm32f4/boards/stm32f412nucleo/board.h @@ -37,7 +37,7 @@ #endif // UART Enable for STLink VCOM -#define UART_DEV USART3 +#define UART_ID 3 #define PINID_LED 0 #define PINID_BUTTON 1 @@ -126,8 +126,6 @@ static inline void board_clock_init(void) RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3); - // Enable clocks for Uart - __HAL_RCC_USART3_CLK_ENABLE(); } static inline void board_vbus_set(uint8_t rhport, bool state) { diff --git a/hw/bsp/stm32f4/boards/stm32f439nucleo/board.h b/hw/bsp/stm32f4/boards/stm32f439nucleo/board.h index b1633b395..973ab4b8a 100644 --- a/hw/bsp/stm32f4/boards/stm32f439nucleo/board.h +++ b/hw/bsp/stm32f4/boards/stm32f439nucleo/board.h @@ -38,7 +38,7 @@ // UART Enable for STLink VCOM -#define UART_DEV USART3 +#define UART_ID 3 #define PINID_LED 0 #define PINID_BUTTON 1 @@ -115,8 +115,6 @@ static inline void board_clock_init(void) RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5); - // Enable clocks Uart - __HAL_RCC_USART3_CLK_ENABLE(); } static inline void board_vbus_set(uint8_t rhport, bool state) { diff --git a/hw/bsp/stm32f4/family.c b/hw/bsp/stm32f4/family.c index b8784d03c..f4ef99150 100644 --- a/hw/bsp/stm32f4/family.c +++ b/hw/bsp/stm32f4/family.c @@ -40,6 +40,30 @@ typedef struct { #include "board.h" +#ifdef UART_ID + #if UART_ID == 1 + #define USARTn USART1 + #define USARTn_IRQn USART1_IRQn + #define USARTn_IRQHandler USART1_IRQHandler + #define UARTn_CLK_ENABLE __HAL_RCC_USART1_CLK_ENABLE + #elif UART_ID == 2 + #define USARTn USART2 + #define USARTn_IRQn USART2_IRQn + #define USARTn_IRQHandler USART2_IRQHandler + #define UARTn_CLK_ENABLE __HAL_RCC_USART2_CLK_ENABLE + #elif UART_ID == 3 + #define USARTn USART3 + #define USARTn_IRQn USART3_IRQn + #define USARTn_IRQHandler USART3_IRQHandler + #define UARTn_CLK_ENABLE __HAL_RCC_USART3_CLK_ENABLE + #elif UART_ID == 6 + #define USARTn USART6 + #define USARTn_IRQn USART6_IRQn + #define USARTn_IRQHandler USART6_IRQHandler + #define UARTn_CLK_ENABLE __HAL_RCC_USART6_CLK_ENABLE + #endif +#endif + //--------------------------------------------------------------------+ // Forward USB interrupt events to TinyUSB IRQ Handler //--------------------------------------------------------------------+ @@ -54,9 +78,9 @@ void OTG_HS_IRQHandler(void) { //--------------------------------------------------------------------+ // MACRO TYPEDEF CONSTANT ENUM //--------------------------------------------------------------------+ -#ifdef UART_DEV +#ifdef UART_ID static UART_HandleTypeDef UartHandle = { - .Instance = UART_DEV, + .Instance = USARTn, .Init = { .BaudRate = CFG_BOARD_UART_BAUDRATE, .WordLength = UART_WORDLENGTH_8B, @@ -73,24 +97,14 @@ static uint8_t uart_rx_ff_buf[32]; static tu_fifo_t uart_rx_ff; // F4 uses old USART IP (SR/DR) -static void uart_rx_isr(void) { - uint32_t sr = UART_DEV->SR; +void USARTn_IRQHandler(void) { + uint32_t sr = USARTn->SR; if (sr & USART_SR_RXNE) { - uint8_t byte = (uint8_t) UART_DEV->DR; + uint8_t byte = (uint8_t) USARTn->DR; tu_fifo_write(&uart_rx_ff, &byte); } // Reading DR clears RXNE. OR is cleared by reading SR then DR (already done). } - -void USART1_IRQHandler(void) { - uart_rx_isr(); -} -void USART2_IRQHandler(void) { - uart_rx_isr(); -} -void USART3_IRQHandler(void) { - uart_rx_isr(); -} #endif void board_init(void) { @@ -136,15 +150,13 @@ void board_init(void) { board_led_write(false); -#ifdef UART_DEV +#ifdef UART_ID + UARTn_CLK_ENABLE(); HAL_UART_Init(&UartHandle); tu_fifo_config(&uart_rx_ff, uart_rx_ff_buf, sizeof(uart_rx_ff_buf), false); - UART_DEV->CR1 |= USART_CR1_RXNEIE; - const IRQn_Type uart_irqn = (UART_DEV == USART1) ? USART1_IRQn - : (UART_DEV == USART2) ? USART2_IRQn - : USART3_IRQn; - NVIC_SetPriority(uart_irqn, (1 << __NVIC_PRIO_BITS) - 1); - NVIC_EnableIRQ(uart_irqn); + USARTn->CR1 |= USART_CR1_RXNEIE; + NVIC_SetPriority(USARTn_IRQn, (1 << __NVIC_PRIO_BITS) - 1); + NVIC_EnableIRQ(USARTn_IRQn); #endif //------------- USB FS -------------// @@ -260,7 +272,7 @@ size_t board_get_unique_id(uint8_t id[], size_t max_len) { } int board_uart_read(uint8_t *buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID return (int) tu_fifo_read_n(&uart_rx_ff, buf, (uint16_t) len); #else (void) buf; (void) len; @@ -269,7 +281,7 @@ int board_uart_read(uint8_t *buf, int len) { } int board_uart_write(void const *buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID const uint8_t *p = (const uint8_t *) buf; int count = 0; while (count < len) { diff --git a/hw/bsp/stm32f7/boards/stlinkv3mini/board.h b/hw/bsp/stm32f7/boards/stlinkv3mini/board.h index 06adb79ad..88cef9f37 100644 --- a/hw/bsp/stm32f7/boards/stlinkv3mini/board.h +++ b/hw/bsp/stm32f7/boards/stlinkv3mini/board.h @@ -36,8 +36,7 @@ extern "C" { #endif -#define UART_DEV USART6 -#define UART_CLK_EN __HAL_RCC_USART6_CLK_ENABLE +#define UART_ID 6 // VBUS Sense detection #define OTG_FS_VBUS_SENSE 1 @@ -106,7 +105,6 @@ static inline void board_clock_init(void) HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_7); - UART_CLK_EN(); } static inline void board_vbus_set(uint8_t rhport, bool state) { diff --git a/hw/bsp/stm32f7/boards/stm32f723disco/board.h b/hw/bsp/stm32f7/boards/stm32f723disco/board.h index ca9641c68..698a1a230 100644 --- a/hw/bsp/stm32f7/boards/stm32f723disco/board.h +++ b/hw/bsp/stm32f7/boards/stm32f723disco/board.h @@ -36,8 +36,7 @@ extern "C" { #endif -#define UART_DEV USART6 -#define UART_CLK_EN __HAL_RCC_USART6_CLK_ENABLE +#define UART_ID 6 // VBUS Sense detection #define OTG_FS_VBUS_SENSE 1 @@ -121,7 +120,6 @@ static inline void board_clock_init(void) { HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_7); - UART_CLK_EN(); } static inline void board_vbus_set(uint8_t rhport, bool state) { diff --git a/hw/bsp/stm32f7/boards/stm32f746disco/board.h b/hw/bsp/stm32f7/boards/stm32f746disco/board.h index f57ffb317..cf70d8959 100644 --- a/hw/bsp/stm32f7/boards/stm32f746disco/board.h +++ b/hw/bsp/stm32f7/boards/stm32f746disco/board.h @@ -36,8 +36,7 @@ extern "C" { #endif -#define UART_DEV USART1 -#define UART_CLK_EN __HAL_RCC_USART1_CLK_ENABLE +#define UART_ID 1 // VBUS Sense detection #define OTG_FS_VBUS_SENSE 1 @@ -112,7 +111,6 @@ static inline void board_clock_init(void) HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_7); - UART_CLK_EN(); } static inline void board_vbus_set(uint8_t rhport, bool state) { diff --git a/hw/bsp/stm32f7/boards/stm32f746nucleo/board.h b/hw/bsp/stm32f7/boards/stm32f746nucleo/board.h index b039f5543..2d3a96dee 100644 --- a/hw/bsp/stm32f7/boards/stm32f746nucleo/board.h +++ b/hw/bsp/stm32f7/boards/stm32f746nucleo/board.h @@ -36,8 +36,7 @@ extern "C" { #endif -#define UART_DEV USART3 -#define UART_CLK_EN __HAL_RCC_USART3_CLK_ENABLE +#define UART_ID 3 // VBUS Sense detection #define OTG_FS_VBUS_SENSE 1 @@ -111,7 +110,6 @@ static inline void board_clock_init(void) HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_7); - UART_CLK_EN(); } static inline void board_vbus_set(uint8_t rhport, bool state) { diff --git a/hw/bsp/stm32f7/boards/stm32f767nucleo/board.h b/hw/bsp/stm32f7/boards/stm32f767nucleo/board.h index b5b3841f1..bd0963649 100644 --- a/hw/bsp/stm32f7/boards/stm32f767nucleo/board.h +++ b/hw/bsp/stm32f7/boards/stm32f767nucleo/board.h @@ -36,8 +36,7 @@ extern "C" { #endif -#define UART_DEV USART3 -#define UART_CLK_EN __HAL_RCC_USART3_CLK_ENABLE +#define UART_ID 3 // VBUS Sense detection #define OTG_FS_VBUS_SENSE 1 @@ -113,7 +112,6 @@ static inline void board_clock_init(void) HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_7); - UART_CLK_EN(); } static inline void board_vbus_set(uint8_t rhport, bool state) { diff --git a/hw/bsp/stm32f7/boards/stm32f769disco/board.h b/hw/bsp/stm32f7/boards/stm32f769disco/board.h index 8ac520619..ccf43a46b 100644 --- a/hw/bsp/stm32f7/boards/stm32f769disco/board.h +++ b/hw/bsp/stm32f7/boards/stm32f769disco/board.h @@ -36,8 +36,7 @@ extern "C" { #endif -#define UART_DEV USART1 -#define UART_CLK_EN __HAL_RCC_USART1_CLK_ENABLE +#define UART_ID 1 // VBUS Sense detection #define OTG_FS_VBUS_SENSE 1 @@ -113,7 +112,6 @@ static inline void board_clock_init(void) HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_7); - UART_CLK_EN(); } static inline void board_vbus_set(uint8_t rhport, bool state) { diff --git a/hw/bsp/stm32f7/family.c b/hw/bsp/stm32f7/family.c index e29d3d5cd..078e372d8 100644 --- a/hw/bsp/stm32f7/family.c +++ b/hw/bsp/stm32f7/family.c @@ -42,12 +42,36 @@ typedef struct { #include "board.h" +#ifdef UART_ID + #if UART_ID == 1 + #define USARTn USART1 + #define USARTn_IRQn USART1_IRQn + #define USARTn_IRQHandler USART1_IRQHandler + #define UARTn_CLK_ENABLE __HAL_RCC_USART1_CLK_ENABLE + #elif UART_ID == 2 + #define USARTn USART2 + #define USARTn_IRQn USART2_IRQn + #define USARTn_IRQHandler USART2_IRQHandler + #define UARTn_CLK_ENABLE __HAL_RCC_USART2_CLK_ENABLE + #elif UART_ID == 3 + #define USARTn USART3 + #define USARTn_IRQn USART3_IRQn + #define USARTn_IRQHandler USART3_IRQHandler + #define UARTn_CLK_ENABLE __HAL_RCC_USART3_CLK_ENABLE + #elif UART_ID == 6 + #define USARTn USART6 + #define USARTn_IRQn USART6_IRQn + #define USARTn_IRQHandler USART6_IRQHandler + #define UARTn_CLK_ENABLE __HAL_RCC_USART6_CLK_ENABLE + #endif +#endif + //--------------------------------------------------------------------+ // MACRO TYPEDEF CONSTANT ENUM //--------------------------------------------------------------------+ -#ifdef UART_DEV -static UART_HandleTypeDef UartHandle = {.Instance = UART_DEV, +#ifdef UART_ID +static UART_HandleTypeDef UartHandle = {.Instance = USARTn, .Init = { .BaudRate = CFG_BOARD_UART_BAUDRATE, .WordLength = UART_WORDLENGTH_8B, @@ -62,32 +86,16 @@ static UART_HandleTypeDef UartHandle = {.Instance = UART_DEV, static uint8_t uart_rx_ff_buf[32]; static tu_fifo_t uart_rx_ff; -// Minimal UART RX ISR: direct register access, no HAL overhead -static void uart_rx_isr(void) { - uint32_t isr = UART_DEV->ISR; - // Read data if available +void USARTn_IRQHandler(void) { + uint32_t isr = USARTn->ISR; if (isr & USART_ISR_RXNE) { - uint8_t byte = (uint8_t)UART_DEV->RDR; + uint8_t byte = (uint8_t) USARTn->RDR; tu_fifo_write(&uart_rx_ff, &byte); } - // Clear error flags (OR, FE, NE, PE) via ICR if (isr & (USART_ISR_ORE | USART_ISR_FE | USART_ISR_NE | USART_ISR_PE)) { - UART_DEV->ICR = USART_ICR_ORECF | USART_ICR_FECF | USART_ICR_NCF | USART_ICR_PECF; + USARTn->ICR = USART_ICR_ORECF | USART_ICR_FECF | USART_ICR_NCF | USART_ICR_PECF; } } - -void USART1_IRQHandler(void) { - uart_rx_isr(); -} -void USART2_IRQHandler(void) { - uart_rx_isr(); -} -void USART3_IRQHandler(void) { - uart_rx_isr(); -} -void USART6_IRQHandler(void) { - uart_rx_isr(); -} #endif //--------------------------------------------------------------------+ @@ -143,18 +151,13 @@ void board_init(void) { NVIC_SetPriority(OTG_HS_IRQn, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY); #endif -#ifdef UART_DEV +#ifdef UART_ID + UARTn_CLK_ENABLE(); HAL_UART_Init(&UartHandle); tu_fifo_config(&uart_rx_ff, uart_rx_ff_buf, sizeof(uart_rx_ff_buf), false); - // Enable RXNE interrupt via direct register (not HAL_UART_Receive_IT) - UART_DEV->CR1 |= USART_CR1_RXNEIE; - const IRQn_Type uart_irqn = (UART_DEV == USART1) ? USART1_IRQn - : (UART_DEV == USART2) ? USART2_IRQn - : (UART_DEV == USART3) ? USART3_IRQn - : USART6_IRQn; - // Lowest priority: UART RX ISR only writes to tu_fifo, no FreeRTOS API calls - NVIC_SetPriority(uart_irqn, (1 << __NVIC_PRIO_BITS) - 1); - NVIC_EnableIRQ(uart_irqn); + USARTn->CR1 |= USART_CR1_RXNEIE; + NVIC_SetPriority(USARTn_IRQn, (1 << __NVIC_PRIO_BITS) - 1); + NVIC_EnableIRQ(USARTn_IRQn); #endif GPIO_InitTypeDef GPIO_InitStruct; @@ -329,7 +332,7 @@ size_t board_get_unique_id(uint8_t id[], size_t max_len) { } int board_uart_read(uint8_t *buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID return (int)tu_fifo_read_n(&uart_rx_ff, buf, (uint16_t)len); #else (void)buf; @@ -339,7 +342,7 @@ int board_uart_read(uint8_t *buf, int len) { } int board_uart_write(const void *buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID const uint8_t *p = (const uint8_t *)buf; int count = 0; while (count < len) { diff --git a/hw/bsp/stm32g0/boards/stm32g0b1nucleo/board.h b/hw/bsp/stm32g0/boards/stm32g0b1nucleo/board.h index 14d309da1..e02256034 100644 --- a/hw/bsp/stm32g0/boards/stm32g0b1nucleo/board.h +++ b/hw/bsp/stm32g0/boards/stm32g0b1nucleo/board.h @@ -52,8 +52,7 @@ #define BUTTON_STATE_ACTIVE 0 // UART Enable for STLink VCOM -#define UART_DEV USART2 -#define UART_CLK_EN __HAL_RCC_USART2_CLK_ENABLE +#define UART_ID 2 #define UART_GPIO_PORT GPIOA #define UART_GPIO_AF GPIO_AF1_USART2 #define UART_TX_PIN GPIO_PIN_2 diff --git a/hw/bsp/stm32g0/family.c b/hw/bsp/stm32g0/family.c index 6cdea3653..d0ff8bac2 100644 --- a/hw/bsp/stm32g0/family.c +++ b/hw/bsp/stm32g0/family.c @@ -33,6 +33,22 @@ #include "bsp/board_api.h" #include "board.h" +#ifdef UART_ID + #if UART_ID == 1 + #define USARTn USART1 + #define UARTn_CLK_ENABLE __HAL_RCC_USART1_CLK_ENABLE + #elif UART_ID == 2 + #define USARTn USART2 + #define UARTn_CLK_ENABLE __HAL_RCC_USART2_CLK_ENABLE + #elif UART_ID == 3 + #define USARTn USART3 + #define UARTn_CLK_ENABLE __HAL_RCC_USART3_CLK_ENABLE + #elif UART_ID == 4 + #define USARTn USART4 + #define UARTn_CLK_ENABLE __HAL_RCC_USART4_CLK_ENABLE + #endif +#endif + //--------------------------------------------------------------------+ // Forward USB interrupt events to TinyUSB IRQ Handler //--------------------------------------------------------------------+ @@ -43,7 +59,7 @@ void USB_UCPD1_2_IRQHandler(void) { //--------------------------------------------------------------------+ // MACRO TYPEDEF CONSTANT ENUM //--------------------------------------------------------------------+ -#ifdef UART_DEV +#ifdef UART_ID UART_HandleTypeDef UartHandle; #endif @@ -90,8 +106,8 @@ void board_init(void) { GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(BUTTON_PORT, &GPIO_InitStruct); -#ifdef UART_DEV - UART_CLK_EN(); +#ifdef UART_ID + UARTn_CLK_ENABLE(); // UART GPIO_InitStruct.Pin = UART_TX_PIN | UART_RX_PIN; @@ -102,7 +118,7 @@ void board_init(void) { HAL_GPIO_Init(UART_GPIO_PORT, &GPIO_InitStruct); UartHandle = (UART_HandleTypeDef){ - .Instance = UART_DEV, + .Instance = USARTn, .Init.BaudRate = CFG_BOARD_UART_BAUDRATE, .Init.WordLength = UART_WORDLENGTH_8B, .Init.StopBits = UART_STOPBITS_1, @@ -158,7 +174,7 @@ size_t board_get_unique_id(uint8_t id[], size_t max_len) { } int board_uart_read(uint8_t *buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID int count = 0; while (count < len) { if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) { @@ -176,7 +192,7 @@ int board_uart_read(uint8_t *buf, int len) { } int board_uart_write(void const *buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID const uint8_t *p = (const uint8_t *) buf; int count = 0; while (count < len) { diff --git a/hw/bsp/stm32g4/boards/b_g474e_dpow1/board.h b/hw/bsp/stm32g4/boards/b_g474e_dpow1/board.h index d569783fc..1684454fa 100644 --- a/hw/bsp/stm32g4/boards/b_g474e_dpow1/board.h +++ b/hw/bsp/stm32g4/boards/b_g474e_dpow1/board.h @@ -51,8 +51,7 @@ #define BUTTON_STATE_ACTIVE 0 // UART Enable for STLink VCOM -#define UART_DEV USART3 -#define UART_CLK_EN __HAL_RCC_USART3_CLK_ENABLE +#define UART_ID 3 #define UART_GPIO_PORT GPIOC #define UART_GPIO_AF GPIO_AF7_USART3 #define UART_TX_PIN GPIO_PIN_10 diff --git a/hw/bsp/stm32g4/boards/stm32g474nucleo/board.h b/hw/bsp/stm32g4/boards/stm32g474nucleo/board.h index cfef1c09f..10d27f1dd 100644 --- a/hw/bsp/stm32g4/boards/stm32g474nucleo/board.h +++ b/hw/bsp/stm32g4/boards/stm32g474nucleo/board.h @@ -51,8 +51,7 @@ #define BUTTON_STATE_ACTIVE 1 // UART Enable for STLink VCOM -#define UART_DEV LPUART1 -#define UART_CLK_EN __HAL_RCC_LPUART1_CLK_ENABLE +#define UART_ID 11 #define UART_GPIO_PORT GPIOA #define UART_GPIO_AF GPIO_AF12_LPUART1 #define UART_TX_PIN GPIO_PIN_2 diff --git a/hw/bsp/stm32g4/boards/stm32g491nucleo/board.h b/hw/bsp/stm32g4/boards/stm32g491nucleo/board.h index be3d44645..f4c333621 100644 --- a/hw/bsp/stm32g4/boards/stm32g491nucleo/board.h +++ b/hw/bsp/stm32g4/boards/stm32g491nucleo/board.h @@ -51,8 +51,7 @@ #define BUTTON_STATE_ACTIVE 1 // UART Enable for STLink VCOM -#define UART_DEV LPUART1 -#define UART_CLK_EN __HAL_RCC_LPUART1_CLK_ENABLE +#define UART_ID 11 #define UART_GPIO_PORT GPIOA #define UART_GPIO_AF GPIO_AF12_LPUART1 #define UART_TX_PIN GPIO_PIN_2 diff --git a/hw/bsp/stm32g4/family.c b/hw/bsp/stm32g4/family.c index b6968b8bd..98739ffd5 100644 --- a/hw/bsp/stm32g4/family.c +++ b/hw/bsp/stm32g4/family.c @@ -34,6 +34,22 @@ #include "bsp/board_api.h" #include "board.h" +#ifdef UART_ID + #if UART_ID == 1 + #define USARTn USART1 + #define UARTn_CLK_ENABLE __HAL_RCC_USART1_CLK_ENABLE + #elif UART_ID == 2 + #define USARTn USART2 + #define UARTn_CLK_ENABLE __HAL_RCC_USART2_CLK_ENABLE + #elif UART_ID == 3 + #define USARTn USART3 + #define UARTn_CLK_ENABLE __HAL_RCC_USART3_CLK_ENABLE + #elif UART_ID == 11 + #define USARTn LPUART1 + #define UARTn_CLK_ENABLE __HAL_RCC_LPUART1_CLK_ENABLE + #endif +#endif + //--------------------------------------------------------------------+ // Forward USB interrupt events to TinyUSB IRQ Handler //--------------------------------------------------------------------+ @@ -57,7 +73,7 @@ void UCPD1_IRQHandler(void) { //--------------------------------------------------------------------+ // MACRO TYPEDEF CONSTANT ENUM //--------------------------------------------------------------------+ -#ifdef UART_DEV +#ifdef UART_ID UART_HandleTypeDef UartHandle; #endif @@ -106,8 +122,8 @@ void board_init(void) { GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(BUTTON_PORT, &GPIO_InitStruct); -#ifdef UART_DEV - UART_CLK_EN(); +#ifdef UART_ID + UARTn_CLK_ENABLE(); // UART memset(&GPIO_InitStruct, 0, sizeof(GPIO_InitStruct)); @@ -119,7 +135,7 @@ void board_init(void) { HAL_GPIO_Init(UART_GPIO_PORT, &GPIO_InitStruct); UartHandle = (UART_HandleTypeDef){ - .Instance = UART_DEV, + .Instance = USARTn, .Init.BaudRate = CFG_BOARD_UART_BAUDRATE, .Init.WordLength = UART_WORDLENGTH_8B, .Init.StopBits = UART_STOPBITS_1, @@ -188,7 +204,7 @@ size_t board_get_unique_id(uint8_t id[], size_t max_len) { } int board_uart_read(uint8_t *buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID int count = 0; while (count < len) { if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) { @@ -206,7 +222,7 @@ int board_uart_read(uint8_t *buf, int len) { } int board_uart_write(void const *buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID const uint8_t *p = (const uint8_t *) buf; int count = 0; while (count < len) { diff --git a/hw/bsp/stm32h5/family.c b/hw/bsp/stm32h5/family.c index 6ee9a7e2b..234a089eb 100644 --- a/hw/bsp/stm32h5/family.c +++ b/hw/bsp/stm32h5/family.c @@ -54,6 +54,19 @@ typedef struct { #include "board.h" +#ifdef UART_ID + #if UART_ID == 1 + #define USARTn USART1 + #define UARTn_CLK_ENABLE __HAL_RCC_USART1_CLK_ENABLE + #elif UART_ID == 2 + #define USARTn USART2 + #define UARTn_CLK_ENABLE __HAL_RCC_USART2_CLK_ENABLE + #elif UART_ID == 3 + #define USARTn USART3 + #define UARTn_CLK_ENABLE __HAL_RCC_USART3_CLK_ENABLE + #endif +#endif + //--------------------------------------------------------------------+ // Forward USB interrupt events to TinyUSB IRQ Handler //--------------------------------------------------------------------+ @@ -64,9 +77,9 @@ void USB_DRD_FS_IRQHandler(void) { //--------------------------------------------------------------------+ // MACRO TYPEDEF CONSTANT ENUM //--------------------------------------------------------------------+ -#ifdef UART_DEV +#ifdef UART_ID static UART_HandleTypeDef UartHandle = { - .Instance = UART_DEV, + .Instance = USARTn, .Init = { .BaudRate = CFG_BOARD_UART_BAUDRATE, .WordLength = UART_WORDLENGTH_8B, @@ -117,8 +130,8 @@ void board_init(void) { HAL_GPIO_Init(board_pindef[i].port, &board_pindef[i].pin_init); } - #ifdef UART_DEV - UART_CLK_EN(); + #ifdef UART_ID + UARTn_CLK_ENABLE(); HAL_UART_Init(&UartHandle); HAL_UARTEx_EnableFifoMode(&UartHandle); #endif @@ -184,7 +197,7 @@ size_t board_get_unique_id(uint8_t id[], size_t max_len) { } int board_uart_read(uint8_t* buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID int count = 0; while (count < len) { if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) { @@ -202,7 +215,7 @@ int board_uart_read(uint8_t* buf, int len) { } int board_uart_write(void const* buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID const uint8_t *p = (const uint8_t *) buf; int count = 0; while (count < len) { diff --git a/hw/bsp/stm32h7/boards/daisyseed/board.h b/hw/bsp/stm32h7/boards/daisyseed/board.h index 300ecb8b2..d615dab6d 100644 --- a/hw/bsp/stm32h7/boards/daisyseed/board.h +++ b/hw/bsp/stm32h7/boards/daisyseed/board.h @@ -37,8 +37,7 @@ #endif // UART -#define UART_DEV USART3 -#define UART_CLK_EN __HAL_RCC_USART3_CLK_ENABLE +#define UART_ID 3 // VBUS Sense detection #define OTG_FS_VBUS_SENSE 1 diff --git a/hw/bsp/stm32h7/boards/stm32h723nucleo/board.h b/hw/bsp/stm32h7/boards/stm32h723nucleo/board.h index f623149bd..937ec5e9a 100644 --- a/hw/bsp/stm32h7/boards/stm32h723nucleo/board.h +++ b/hw/bsp/stm32h7/boards/stm32h723nucleo/board.h @@ -36,8 +36,7 @@ extern "C" { #endif -#define UART_DEV USART3 -#define UART_CLK_EN __HAL_RCC_USART3_CLK_ENABLE +#define UART_ID 3 // VBUS Sense detection #define OTG_FS_VBUS_SENSE 1 diff --git a/hw/bsp/stm32h7/boards/stm32h743_weact/board.h b/hw/bsp/stm32h7/boards/stm32h743_weact/board.h index e17ddb41a..1d9ced3f1 100644 --- a/hw/bsp/stm32h7/boards/stm32h743_weact/board.h +++ b/hw/bsp/stm32h7/boards/stm32h743_weact/board.h @@ -37,8 +37,7 @@ extern "C" { #endif // UART -#define UART_DEV USART3 -#define UART_CLK_EN __HAL_RCC_USART3_CLK_ENABLE +#define UART_ID 3 // VBUS Sense detection #define OTG_FS_VBUS_SENSE 0 diff --git a/hw/bsp/stm32h7/boards/stm32h743eval/board.h b/hw/bsp/stm32h7/boards/stm32h743eval/board.h index ea91976c8..cd1521911 100644 --- a/hw/bsp/stm32h7/boards/stm32h743eval/board.h +++ b/hw/bsp/stm32h7/boards/stm32h743eval/board.h @@ -39,8 +39,7 @@ #include "mfxstm32l152.h" // Need to change jumper setting J7 and J8 from RS-232 to STLink -#define UART_DEV USART1 -#define UART_CLK_EN __HAL_RCC_USART1_CLK_ENABLE +#define UART_ID 1 // VBUS Sense detection #define OTG_FS_VBUS_SENSE 1 diff --git a/hw/bsp/stm32h7/boards/stm32h743nucleo/board.h b/hw/bsp/stm32h7/boards/stm32h743nucleo/board.h index 0277d05c7..c6b209665 100644 --- a/hw/bsp/stm32h7/boards/stm32h743nucleo/board.h +++ b/hw/bsp/stm32h7/boards/stm32h743nucleo/board.h @@ -36,8 +36,7 @@ extern "C" { #endif -#define UART_DEV USART3 -#define UART_CLK_EN __HAL_RCC_USART3_CLK_ENABLE +#define UART_ID 3 // VBUS Sense detection #define OTG_FS_VBUS_SENSE 1 diff --git a/hw/bsp/stm32h7/boards/stm32h745disco/board.h b/hw/bsp/stm32h7/boards/stm32h745disco/board.h index ebdd5a17a..0536274b0 100644 --- a/hw/bsp/stm32h7/boards/stm32h745disco/board.h +++ b/hw/bsp/stm32h7/boards/stm32h745disco/board.h @@ -37,8 +37,7 @@ #endif // UART -#define UART_DEV USART3 -#define UART_CLK_EN __HAL_RCC_USART3_CLK_ENABLE +#define UART_ID 3 // VBUS Sense detection #define OTG_FS_VBUS_SENSE 1 diff --git a/hw/bsp/stm32h7/boards/stm32h747disco/board.h b/hw/bsp/stm32h7/boards/stm32h747disco/board.h index 1793338f8..204eb8bc4 100644 --- a/hw/bsp/stm32h7/boards/stm32h747disco/board.h +++ b/hw/bsp/stm32h7/boards/stm32h747disco/board.h @@ -37,8 +37,7 @@ #endif // UART -#define UART_DEV USART3 -#define UART_CLK_EN __HAL_RCC_USART3_CLK_ENABLE +#define UART_ID 3 // VBUS Sense detection #define OTG_FS_VBUS_SENSE 1 diff --git a/hw/bsp/stm32h7/boards/stm32h750_weact/board.h b/hw/bsp/stm32h7/boards/stm32h750_weact/board.h index e11a55103..dadcd6e86 100644 --- a/hw/bsp/stm32h7/boards/stm32h750_weact/board.h +++ b/hw/bsp/stm32h7/boards/stm32h750_weact/board.h @@ -37,8 +37,7 @@ #endif // UART -#define UART_DEV USART3 -#define UART_CLK_EN __HAL_RCC_USART3_CLK_ENABLE +#define UART_ID 3 // VBUS Sense detection #define OTG_FS_VBUS_SENSE 1 diff --git a/hw/bsp/stm32h7/boards/stm32h750bdk/board.h b/hw/bsp/stm32h7/boards/stm32h750bdk/board.h index ac417601b..6955592ee 100644 --- a/hw/bsp/stm32h7/boards/stm32h750bdk/board.h +++ b/hw/bsp/stm32h7/boards/stm32h750bdk/board.h @@ -37,8 +37,7 @@ #endif // UART -#define UART_DEV USART3 -#define UART_CLK_EN __HAL_RCC_USART3_CLK_ENABLE +#define UART_ID 3 // VBUS Sense detection #define OTG_FS_VBUS_SENSE 1 diff --git a/hw/bsp/stm32h7/boards/waveshare_openh743i/board.h b/hw/bsp/stm32h7/boards/waveshare_openh743i/board.h index bfaf42784..96f035919 100644 --- a/hw/bsp/stm32h7/boards/waveshare_openh743i/board.h +++ b/hw/bsp/stm32h7/boards/waveshare_openh743i/board.h @@ -76,8 +76,7 @@ #endif // Need to change jumper setting J7 and J8 from RS-232 to STLink -#define UART_DEV USART3 -#define UART_CLK_EN __HAL_RCC_USART3_CLK_ENABLE +#define UART_ID 3 // VBUS Sense detection #define OTG_FS_VBUS_SENSE 1 diff --git a/hw/bsp/stm32h7/family.c b/hw/bsp/stm32h7/family.c index c60706b99..b32f73754 100644 --- a/hw/bsp/stm32h7/family.c +++ b/hw/bsp/stm32h7/family.c @@ -44,13 +44,29 @@ typedef struct { #include "board.h" +#ifdef UART_ID + #if UART_ID == 1 + #define USARTn USART1 + #define UARTn_CLK_ENABLE __HAL_RCC_USART1_CLK_ENABLE + #elif UART_ID == 2 + #define USARTn USART2 + #define UARTn_CLK_ENABLE __HAL_RCC_USART2_CLK_ENABLE + #elif UART_ID == 3 + #define USARTn USART3 + #define UARTn_CLK_ENABLE __HAL_RCC_USART3_CLK_ENABLE + #elif UART_ID == 6 + #define USARTn USART6 + #define UARTn_CLK_ENABLE __HAL_RCC_USART6_CLK_ENABLE + #endif +#endif + //--------------------------------------------------------------------+ // MACRO TYPEDEF CONSTANT ENUM //--------------------------------------------------------------------+ -#ifdef UART_DEV +#ifdef UART_ID static UART_HandleTypeDef UartHandle = { - .Instance = UART_DEV, + .Instance = USARTn, .Init = { .BaudRate = CFG_BOARD_UART_BAUDRATE, .WordLength = UART_WORDLENGTH_8B, @@ -147,8 +163,8 @@ void board_init(void) { GPIO_InitTypeDef GPIO_InitStruct; -#ifdef UART_DEV - UART_CLK_EN(); +#ifdef UART_ID + UARTn_CLK_ENABLE(); HAL_UART_Init(&UartHandle); HAL_UARTEx_EnableFifoMode(&UartHandle); #endif @@ -276,7 +292,7 @@ size_t board_get_unique_id(uint8_t id[], size_t max_len) { } int board_uart_read(uint8_t *buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID int count = 0; // clear overrun error if any if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_ORE)) { @@ -298,7 +314,7 @@ int board_uart_read(uint8_t *buf, int len) { } int board_uart_write(void const *buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID const uint8_t *p = (const uint8_t *) buf; int count = 0; while (count < len) { diff --git a/hw/bsp/stm32h7rs/boards/stm32h7s3nucleo/board.h b/hw/bsp/stm32h7rs/boards/stm32h7s3nucleo/board.h index 4b8564709..b1446414e 100644 --- a/hw/bsp/stm32h7rs/boards/stm32h7s3nucleo/board.h +++ b/hw/bsp/stm32h7rs/boards/stm32h7s3nucleo/board.h @@ -40,8 +40,7 @@ #include "stm32h7rsxx_ll_exti.h" #include "stm32h7rsxx_ll_system.h" -#define UART_DEV USART3 -#define UART_CLK_EN __HAL_RCC_USART3_CLK_ENABLE +#define UART_ID 3 // VBUS Sense detection #define OTG_FS_VBUS_SENSE 0 diff --git a/hw/bsp/stm32h7rs/family.c b/hw/bsp/stm32h7rs/family.c index d84c9d5f8..7ae9e5532 100644 --- a/hw/bsp/stm32h7rs/family.c +++ b/hw/bsp/stm32h7rs/family.c @@ -44,13 +44,26 @@ typedef struct { #include "board.h" +#ifdef UART_ID + #if UART_ID == 1 + #define USARTn USART1 + #define UARTn_CLK_ENABLE __HAL_RCC_USART1_CLK_ENABLE + #elif UART_ID == 2 + #define USARTn USART2 + #define UARTn_CLK_ENABLE __HAL_RCC_USART2_CLK_ENABLE + #elif UART_ID == 3 + #define USARTn USART3 + #define UARTn_CLK_ENABLE __HAL_RCC_USART3_CLK_ENABLE + #endif +#endif + //--------------------------------------------------------------------+ // MACRO TYPEDEF CONSTANT ENUM //--------------------------------------------------------------------+ -#ifdef UART_DEV +#ifdef UART_ID static UART_HandleTypeDef UartHandle = { - .Instance = UART_DEV, + .Instance = USARTn, .Init = { .BaudRate = CFG_BOARD_UART_BAUDRATE, .WordLength = UART_WORDLENGTH_8B, @@ -317,8 +330,8 @@ void board_init(void) { -#ifdef UART_DEV - UART_CLK_EN(); +#ifdef UART_ID + UARTn_CLK_ENABLE(); HAL_UART_Init(&UartHandle); HAL_UARTEx_EnableFifoMode(&UartHandle); #endif @@ -445,7 +458,7 @@ size_t board_get_unique_id(uint8_t id[], size_t max_len) { } int board_uart_read(uint8_t *buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID int count = 0; while (count < len) { if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) { @@ -463,7 +476,7 @@ int board_uart_read(uint8_t *buf, int len) { } int board_uart_write(void const *buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID const uint8_t *p = (const uint8_t *) buf; int count = 0; while (count < len) { diff --git a/hw/bsp/stm32l0/boards/stm32l052dap52/board.h b/hw/bsp/stm32l0/boards/stm32l052dap52/board.h index 50bbafadb..162c62abb 100644 --- a/hw/bsp/stm32l0/boards/stm32l052dap52/board.h +++ b/hw/bsp/stm32l0/boards/stm32l052dap52/board.h @@ -47,8 +47,7 @@ #define BUTTON_STATE_ACTIVE 0 // UART -#define UART_DEV USART2 -#define UART_CLK_EN __HAL_RCC_USART2_CLK_ENABLE +#define UART_ID 2 #define UART_GPIO_PORT GPIOA #define UART_GPIO_AF GPIO_AF4_USART2 #define UART_TX_PIN GPIO_PIN_2 diff --git a/hw/bsp/stm32l0/family.c b/hw/bsp/stm32l0/family.c index 7fd076dbd..2a32ba9f5 100644 --- a/hw/bsp/stm32l0/family.c +++ b/hw/bsp/stm32l0/family.c @@ -32,6 +32,16 @@ #include "bsp/board_api.h" #include "board.h" +#ifdef UART_ID + #if UART_ID == 2 + #define USARTn USART2 + #define UARTn_CLK_ENABLE __HAL_RCC_USART2_CLK_ENABLE + #elif UART_ID == 4 + #define USARTn USART4 + #define UARTn_CLK_ENABLE __HAL_RCC_USART4_CLK_ENABLE + #endif +#endif + //--------------------------------------------------------------------+ // Forward USB interrupt events to TinyUSB IRQ Handler //--------------------------------------------------------------------+ @@ -42,7 +52,7 @@ void USB_IRQHandler(void) { //--------------------------------------------------------------------+ // MACRO TYPEDEF CONSTANT ENUM //--------------------------------------------------------------------+ -#ifdef UART_DEV +#ifdef UART_ID UART_HandleTypeDef UartHandle; #endif @@ -84,9 +94,9 @@ void board_init(void) { GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(BUTTON_PORT, &GPIO_InitStruct); -#ifdef UART_DEV +#ifdef UART_ID // Enable UART Clock - UART_CLK_EN(); + UARTn_CLK_ENABLE(); GPIO_InitStruct.Pin = UART_TX_PIN | UART_RX_PIN; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; @@ -95,7 +105,7 @@ void board_init(void) { GPIO_InitStruct.Alternate = UART_GPIO_AF; HAL_GPIO_Init(UART_GPIO_PORT, &GPIO_InitStruct); - UartHandle.Instance = UART_DEV; + UartHandle.Instance = USARTn; UartHandle.Init.BaudRate = CFG_BOARD_UART_BAUDRATE; UartHandle.Init.WordLength = UART_WORDLENGTH_8B; UartHandle.Init.StopBits = UART_STOPBITS_1; @@ -151,7 +161,7 @@ int board_uart_read(uint8_t* buf, int len) { } int board_uart_write(void const* buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID HAL_UART_Transmit(&UartHandle, (uint8_t*)(uintptr_t) buf, len, 0xffff); return len; #else diff --git a/hw/bsp/stm32l4/boards/stm32l412nucleo/board.h b/hw/bsp/stm32l4/boards/stm32l412nucleo/board.h index 980e1e321..a5250eda9 100644 --- a/hw/bsp/stm32l4/boards/stm32l412nucleo/board.h +++ b/hw/bsp/stm32l4/boards/stm32l412nucleo/board.h @@ -45,8 +45,7 @@ #define BUTTON_PIN GPIO_PIN_0 #define BUTTON_STATE_ACTIVE 1 -#define UART_DEV LPUART1 -#define UART_CLK_EN __HAL_RCC_LPUART1_CLK_ENABLE +#define UART_ID 11 #define UART_GPIO_PORT GPIOA #define UART_GPIO_AF GPIO_AF8_LPUART1 #define UART_TX_PIN GPIO_PIN_2 diff --git a/hw/bsp/stm32l4/boards/stm32l476disco/board.h b/hw/bsp/stm32l4/boards/stm32l476disco/board.h index cf84d3e66..eb0c67915 100644 --- a/hw/bsp/stm32l4/boards/stm32l476disco/board.h +++ b/hw/bsp/stm32l4/boards/stm32l476disco/board.h @@ -44,8 +44,7 @@ #define BUTTON_PIN GPIO_PIN_0 #define BUTTON_STATE_ACTIVE 1 -#define UART_DEV USART2 -#define UART_CLK_EN __HAL_RCC_USART2_CLK_ENABLE +#define UART_ID 2 #define UART_GPIO_PORT GPIOD #define UART_GPIO_AF GPIO_AF7_USART2 #define UART_TX_PIN GPIO_PIN_5 diff --git a/hw/bsp/stm32l4/boards/stm32l496nucleo/board.h b/hw/bsp/stm32l4/boards/stm32l496nucleo/board.h index 3b031e00f..d22cc969c 100644 --- a/hw/bsp/stm32l4/boards/stm32l496nucleo/board.h +++ b/hw/bsp/stm32l4/boards/stm32l496nucleo/board.h @@ -45,8 +45,7 @@ #define BUTTON_PIN GPIO_PIN_13 #define BUTTON_STATE_ACTIVE 1 -#define UART_DEV LPUART1 -#define UART_CLK_EN __HAL_RCC_LPUART1_CLK_ENABLE +#define UART_ID 11 #define UART_GPIO_PORT GPIOG #define UART_GPIO_AF GPIO_AF8_LPUART1 #define UART_TX_PIN GPIO_PIN_7 diff --git a/hw/bsp/stm32l4/boards/stm32l4p5nucleo/board.h b/hw/bsp/stm32l4/boards/stm32l4p5nucleo/board.h index 94978638e..b0823b08b 100644 --- a/hw/bsp/stm32l4/boards/stm32l4p5nucleo/board.h +++ b/hw/bsp/stm32l4/boards/stm32l4p5nucleo/board.h @@ -44,8 +44,7 @@ #define BUTTON_PIN GPIO_PIN_13 #define BUTTON_STATE_ACTIVE 1 -#define UART_DEV LPUART1 -#define UART_CLK_EN __HAL_RCC_LPUART1_CLK_ENABLE +#define UART_ID 11 #define UART_GPIO_PORT GPIOG #define UART_GPIO_AF GPIO_AF8_LPUART1 #define UART_TX_PIN GPIO_PIN_7 diff --git a/hw/bsp/stm32l4/boards/stm32l4r5nucleo/board.h b/hw/bsp/stm32l4/boards/stm32l4r5nucleo/board.h index f603ae855..306ac8c4d 100644 --- a/hw/bsp/stm32l4/boards/stm32l4r5nucleo/board.h +++ b/hw/bsp/stm32l4/boards/stm32l4r5nucleo/board.h @@ -44,8 +44,7 @@ #define BUTTON_PIN GPIO_PIN_13 #define BUTTON_STATE_ACTIVE 1 -#define UART_DEV LPUART1 -#define UART_CLK_EN __HAL_RCC_LPUART1_CLK_ENABLE +#define UART_ID 11 #define UART_GPIO_PORT GPIOG #define UART_GPIO_AF GPIO_AF8_LPUART1 #define UART_TX_PIN GPIO_PIN_7 diff --git a/hw/bsp/stm32l4/family.c b/hw/bsp/stm32l4/family.c index 1a5c59fdc..7a8acb3de 100644 --- a/hw/bsp/stm32l4/family.c +++ b/hw/bsp/stm32l4/family.c @@ -34,6 +34,16 @@ #include "bsp/board_api.h" #include "board.h" +#ifdef UART_ID + #if UART_ID == 2 + #define USARTn USART2 + #define UARTn_CLK_ENABLE __HAL_RCC_USART2_CLK_ENABLE + #elif UART_ID == 11 + #define USARTn LPUART1 + #define UARTn_CLK_ENABLE __HAL_RCC_LPUART1_CLK_ENABLE + #endif +#endif + //--------------------------------------------------------------------+ // Forward USB interrupt events to TinyUSB IRQ Handler //--------------------------------------------------------------------+ @@ -50,7 +60,9 @@ void USB_IRQHandler(void) // MACRO TYPEDEF CONSTANT ENUM //--------------------------------------------------------------------+ +#ifdef UART_ID UART_HandleTypeDef UartHandle; +#endif void board_init(void) { board_clock_init(); @@ -72,7 +84,9 @@ void board_init(void) { __HAL_RCC_GPIOG_CLK_ENABLE(); #endif __HAL_RCC_GPIOH_CLK_ENABLE(); - UART_CLK_EN(); +#ifdef UART_ID + UARTn_CLK_ENABLE(); +#endif #if CFG_TUSB_OS == OPT_OS_NONE // 1ms tick timer @@ -121,6 +135,7 @@ void board_init(void) { HAL_PWREx_EnableVddIO2(); #endif +#ifdef UART_ID // Uart GPIO_InitStruct.Pin = UART_TX_PIN | UART_RX_PIN; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; @@ -128,7 +143,7 @@ void board_init(void) { GPIO_InitStruct.Alternate = UART_GPIO_AF; HAL_GPIO_Init(UART_GPIO_PORT, &GPIO_InitStruct); - UartHandle.Instance = UART_DEV; + UartHandle.Instance = USARTn; UartHandle.Init.BaudRate = CFG_BOARD_UART_BAUDRATE; UartHandle.Init.WordLength = UART_WORDLENGTH_8B; UartHandle.Init.StopBits = UART_STOPBITS_1; @@ -141,8 +156,9 @@ void board_init(void) { UartHandle.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; HAL_UART_Init(&UartHandle); -#if defined(USART_CR1_FIFOEN) + #if defined(USART_CR1_FIFOEN) HAL_UARTEx_EnableFifoMode(&UartHandle); + #endif #endif /* Configure USB FS GPIOs */ @@ -216,7 +232,7 @@ size_t board_get_unique_id(uint8_t id[], size_t max_len) { } int board_uart_read(uint8_t *buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID int count = 0; while (count < len) { if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) { @@ -234,7 +250,7 @@ int board_uart_read(uint8_t *buf, int len) { } int board_uart_write(void const *buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID const uint8_t *p = (const uint8_t *) buf; int count = 0; while (count < len) { diff --git a/hw/bsp/stm32n6/boards/stm32n6570dk/board.h b/hw/bsp/stm32n6/boards/stm32n6570dk/board.h index 8c2ec66dc..4d162bbca 100644 --- a/hw/bsp/stm32n6/boards/stm32n6570dk/board.h +++ b/hw/bsp/stm32n6/boards/stm32n6570dk/board.h @@ -41,8 +41,7 @@ extern "C" { #include "stm32n6xx_ll_system.h" #include "tcpp0203.h" -#define UART_DEV USART1 -#define UART_CLK_EN __HAL_RCC_USART1_CLK_ENABLE +#define UART_ID 1 // VBUS Sense detection #define OTG_FS_VBUS_SENSE 0 diff --git a/hw/bsp/stm32n6/boards/stm32n657nucleo/board.h b/hw/bsp/stm32n6/boards/stm32n657nucleo/board.h index 5bdbaff3c..c26367af6 100644 --- a/hw/bsp/stm32n6/boards/stm32n657nucleo/board.h +++ b/hw/bsp/stm32n6/boards/stm32n657nucleo/board.h @@ -41,8 +41,7 @@ extern "C" { #include "stm32n6xx_ll_system.h" #include "tcpp0203.h" -#define UART_DEV USART1 -#define UART_CLK_EN __HAL_RCC_USART1_CLK_ENABLE +#define UART_ID 1 // VBUS Sense detection #define OTG_FS_VBUS_SENSE 0 diff --git a/hw/bsp/stm32n6/family.c b/hw/bsp/stm32n6/family.c index 267da746e..95578af04 100644 --- a/hw/bsp/stm32n6/family.c +++ b/hw/bsp/stm32n6/family.c @@ -58,13 +58,26 @@ typedef struct { #include "board.h" +#ifdef UART_ID + #if UART_ID == 1 + #define USARTn USART1 + #define UARTn_CLK_ENABLE __HAL_RCC_USART1_CLK_ENABLE + #elif UART_ID == 2 + #define USARTn USART2 + #define UARTn_CLK_ENABLE __HAL_RCC_USART2_CLK_ENABLE + #elif UART_ID == 3 + #define USARTn USART3 + #define UARTn_CLK_ENABLE __HAL_RCC_USART3_CLK_ENABLE + #endif +#endif + //--------------------------------------------------------------------+ // MACRO TYPEDEF CONSTANT ENUM //--------------------------------------------------------------------+ -#ifdef UART_DEV +#ifdef UART_ID static UART_HandleTypeDef UartHandle = { - .Instance = UART_DEV, + .Instance = USARTn, .Init = { .BaudRate = CFG_BOARD_UART_BAUDRATE, .WordLength = UART_WORDLENGTH_8B, @@ -154,8 +167,8 @@ void board_init(void) { -#ifdef UART_DEV - UART_CLK_EN(); +#ifdef UART_ID + UARTn_CLK_ENABLE(); HAL_UART_Init(&UartHandle); HAL_UARTEx_EnableFifoMode(&UartHandle); #endif @@ -343,7 +356,7 @@ size_t board_get_unique_id(uint8_t id[], size_t max_len) { } int board_uart_read(uint8_t *buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID int count = 0; while (count < len) { if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) { @@ -361,7 +374,7 @@ int board_uart_read(uint8_t *buf, int len) { } int board_uart_write(void const *buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID const uint8_t *p = (const uint8_t *) buf; int count = 0; while (count < len) { diff --git a/hw/bsp/stm32u0/boards/stm32u083cdk/board.h b/hw/bsp/stm32u0/boards/stm32u083cdk/board.h index 278d9b695..28f9fa285 100644 --- a/hw/bsp/stm32u0/boards/stm32u083cdk/board.h +++ b/hw/bsp/stm32u0/boards/stm32u083cdk/board.h @@ -47,8 +47,7 @@ #define BUTTON_STATE_ACTIVE 0 // Active low (pressed = 0) // UART - using USART2 on PA2/PA3 (VCP TX/RX from CubeMX) -#define UART_DEV USART2 -#define UART_CLK_EN __HAL_RCC_USART2_CLK_ENABLE +#define UART_ID 2 #define UART_GPIO_PORT GPIOA #define UART_GPIO_AF GPIO_AF7_USART2 #define UART_TX_PIN GPIO_PIN_2 diff --git a/hw/bsp/stm32u0/boards/stm32u083nucleo/board.h b/hw/bsp/stm32u0/boards/stm32u083nucleo/board.h index 23fddbef9..e2177cbc8 100644 --- a/hw/bsp/stm32u0/boards/stm32u083nucleo/board.h +++ b/hw/bsp/stm32u0/boards/stm32u083nucleo/board.h @@ -47,8 +47,7 @@ #define BUTTON_STATE_ACTIVE 0 // UART: USART2 on PA2/PA3 (VCP via ST-Link) -#define UART_DEV USART2 -#define UART_CLK_EN __HAL_RCC_USART2_CLK_ENABLE +#define UART_ID 2 #define UART_GPIO_PORT GPIOA #define UART_GPIO_AF GPIO_AF7_USART2 #define UART_TX_PIN GPIO_PIN_2 diff --git a/hw/bsp/stm32u0/family.c b/hw/bsp/stm32u0/family.c index 4acbb3437..5cf6e1eb2 100644 --- a/hw/bsp/stm32u0/family.c +++ b/hw/bsp/stm32u0/family.c @@ -35,6 +35,19 @@ TU_ATTR_UNUSED static void Error_Handler(void) { } #include "board.h" +#ifdef UART_ID + #if UART_ID == 1 + #define USARTn USART1 + #define UARTn_CLK_ENABLE __HAL_RCC_USART1_CLK_ENABLE + #elif UART_ID == 2 + #define USARTn USART2 + #define UARTn_CLK_ENABLE __HAL_RCC_USART2_CLK_ENABLE + #elif UART_ID == 3 + #define USARTn USART3 + #define UARTn_CLK_ENABLE __HAL_RCC_USART3_CLK_ENABLE + #endif +#endif + //--------------------------------------------------------------------+ // Forward USB interrupt events to TinyUSB IRQ Handler //--------------------------------------------------------------------+ @@ -45,7 +58,7 @@ void USB_DRD_FS_IRQHandler(void) { //--------------------------------------------------------------------+ // MACRO TYPEDEF CONSTANT ENUM //--------------------------------------------------------------------+ -#ifdef UART_DEV +#ifdef UART_ID UART_HandleTypeDef UartHandle; #endif @@ -96,7 +109,7 @@ void board_init(void) { GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(BUTTON_PORT, &GPIO_InitStruct); -#ifdef UART_DEV +#ifdef UART_ID // UART GPIO_InitStruct.Pin = UART_TX_PIN | UART_RX_PIN; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; @@ -105,8 +118,8 @@ void board_init(void) { GPIO_InitStruct.Alternate = UART_GPIO_AF; HAL_GPIO_Init(UART_GPIO_PORT, &GPIO_InitStruct); - UART_CLK_EN(); - UartHandle.Instance = UART_DEV; + UARTn_CLK_ENABLE(); + UartHandle.Instance = USARTn; UartHandle.Init.BaudRate = CFG_BOARD_UART_BAUDRATE; UartHandle.Init.WordLength = UART_WORDLENGTH_8B; UartHandle.Init.StopBits = UART_STOPBITS_1; @@ -154,7 +167,7 @@ uint32_t board_button_read(void) { } int board_uart_read(uint8_t* buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID int count = 0; while (count < len) { if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) { @@ -172,7 +185,7 @@ int board_uart_read(uint8_t* buf, int len) { } int board_uart_write(void const *buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID const uint8_t *p = (const uint8_t *) buf; int count = 0; while (count < len) { diff --git a/hw/bsp/stm32u5/boards/b_u585i_iot2a/board.h b/hw/bsp/stm32u5/boards/b_u585i_iot2a/board.h index c99743738..f775f3669 100644 --- a/hw/bsp/stm32u5/boards/b_u585i_iot2a/board.h +++ b/hw/bsp/stm32u5/boards/b_u585i_iot2a/board.h @@ -48,8 +48,7 @@ extern "C" #define BUTTON_STATE_ACTIVE 1 // UART Enable for STLink VCOM -#define UART_DEV USART1 -#define UART_CLK_EN __HAL_RCC_USART1_CLK_ENABLE +#define UART_ID 1 #define UART_GPIO_PORT GPIOA #define UART_GPIO_AF GPIO_AF7_USART1 #define UART_TX_PIN GPIO_PIN_9 diff --git a/hw/bsp/stm32u5/boards/stm32u545nucleo/board.h b/hw/bsp/stm32u5/boards/stm32u545nucleo/board.h index eb2b63721..80e2e4b21 100644 --- a/hw/bsp/stm32u5/boards/stm32u545nucleo/board.h +++ b/hw/bsp/stm32u5/boards/stm32u545nucleo/board.h @@ -48,8 +48,7 @@ extern "C" #define BUTTON_STATE_ACTIVE 1 // UART Enable for STLink VCOM -#define UART_DEV LPUART1 -#define UART_CLK_EN __HAL_RCC_LPUART1_CLK_ENABLE +#define UART_ID 11 #define UART_GPIO_PORT GPIOA #define UART_GPIO_AF GPIO_AF8_LPUART1 #define UART_TX_PIN GPIO_PIN_2 diff --git a/hw/bsp/stm32u5/boards/stm32u575eval/board.h b/hw/bsp/stm32u5/boards/stm32u575eval/board.h index cce3e38b3..ec941a6c5 100644 --- a/hw/bsp/stm32u5/boards/stm32u575eval/board.h +++ b/hw/bsp/stm32u5/boards/stm32u575eval/board.h @@ -49,8 +49,7 @@ extern "C" #define BUTTON_STATE_ACTIVE 1 // UART Enable for STLink VCOM -#define UART_DEV USART1 -#define UART_CLK_EN __HAL_RCC_USART1_CLK_ENABLE +#define UART_ID 1 #define UART_GPIO_PORT GPIOA #define UART_GPIO_AF GPIO_AF7_USART1 #define UART_TX_PIN GPIO_PIN_9 diff --git a/hw/bsp/stm32u5/boards/stm32u575nucleo/board.h b/hw/bsp/stm32u5/boards/stm32u575nucleo/board.h index b6b60f021..6f2f7596b 100644 --- a/hw/bsp/stm32u5/boards/stm32u575nucleo/board.h +++ b/hw/bsp/stm32u5/boards/stm32u575nucleo/board.h @@ -50,8 +50,7 @@ extern "C" #define BUTTON_STATE_ACTIVE 1 // UART Enable for STLink VCOM -#define UART_DEV LPUART1 -#define UART_CLK_EN __HAL_RCC_LPUART1_CLK_ENABLE +#define UART_ID 11 #define UART_GPIO_PORT GPIOG #define UART_GPIO_AF GPIO_AF8_LPUART1 #define UART_TX_PIN GPIO_PIN_7 diff --git a/hw/bsp/stm32u5/boards/stm32u5a5nucleo/board.h b/hw/bsp/stm32u5/boards/stm32u5a5nucleo/board.h index 15106aee6..48a9ae9fb 100644 --- a/hw/bsp/stm32u5/boards/stm32u5a5nucleo/board.h +++ b/hw/bsp/stm32u5/boards/stm32u5a5nucleo/board.h @@ -50,8 +50,7 @@ extern "C" #define BUTTON_STATE_ACTIVE 1 // UART Enable for STLink VCOM -#define UART_DEV USART1 -#define UART_CLK_EN __HAL_RCC_USART1_CLK_ENABLE +#define UART_ID 1 #define UART_GPIO_PORT GPIOA #define UART_GPIO_AF GPIO_AF7_USART1 #define UART_TX_PIN GPIO_PIN_9 diff --git a/hw/bsp/stm32u5/family.c b/hw/bsp/stm32u5/family.c index 27e84beb0..41e354351 100644 --- a/hw/bsp/stm32u5/family.c +++ b/hw/bsp/stm32u5/family.c @@ -48,6 +48,22 @@ TU_ATTR_UNUSED static void Error_Handler(void) { #include "board.h" +#ifdef UART_ID + #if UART_ID == 1 + #define USARTn USART1 + #define UARTn_CLK_ENABLE __HAL_RCC_USART1_CLK_ENABLE + #elif UART_ID == 2 + #define USARTn USART2 + #define UARTn_CLK_ENABLE __HAL_RCC_USART2_CLK_ENABLE + #elif UART_ID == 3 + #define USARTn USART3 + #define UARTn_CLK_ENABLE __HAL_RCC_USART3_CLK_ENABLE + #elif UART_ID == 11 + #define USARTn LPUART1 + #define UARTn_CLK_ENABLE __HAL_RCC_LPUART1_CLK_ENABLE + #endif +#endif + //--------------------------------------------------------------------+ // Forward USB interrupt events to TinyUSB IRQ Handler //--------------------------------------------------------------------+ @@ -70,7 +86,9 @@ void OTG_HS_IRQHandler(void) { // MACRO TYPEDEF CONSTANT ENUM //--------------------------------------------------------------------+ +#ifdef UART_ID UART_HandleTypeDef UartHandle; +#endif void board_init(void) { // Init clock, implemented in board.h @@ -89,8 +107,6 @@ void board_init(void) { __HAL_RCC_GPIOG_CLK_ENABLE(); __HAL_RCC_GPIOH_CLK_ENABLE(); - UART_CLK_EN(); - /* Enable Instruction cache */ HAL_ICACHE_Enable(); @@ -119,6 +135,7 @@ void board_init(void) { // IOSV bit MUST be set to access GPIO port G[2:15] */ HAL_PWREx_EnableVddIO2(); +#ifdef UART_ID // Uart GPIO_InitStruct.Pin = UART_TX_PIN | UART_RX_PIN; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; @@ -127,7 +144,8 @@ void board_init(void) { GPIO_InitStruct.Alternate = UART_GPIO_AF; HAL_GPIO_Init(UART_GPIO_PORT, &GPIO_InitStruct); - UartHandle.Instance = UART_DEV; + UARTn_CLK_ENABLE(); + UartHandle.Instance = USARTn; UartHandle.Init.BaudRate = CFG_BOARD_UART_BAUDRATE; UartHandle.Init.WordLength = UART_WORDLENGTH_8B; UartHandle.Init.StopBits = UART_STOPBITS_1; @@ -140,6 +158,7 @@ void board_init(void) { UartHandle.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; HAL_UART_Init(&UartHandle); HAL_UARTEx_EnableFifoMode(&UartHandle); +#endif /* Configure USB GPIOs */ /* Configure DM DP Pins */ @@ -253,7 +272,7 @@ size_t board_get_unique_id(uint8_t id[], size_t max_len) { } int board_uart_read(uint8_t *buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID int count = 0; while (count < len) { if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) { @@ -271,7 +290,7 @@ int board_uart_read(uint8_t *buf, int len) { } int board_uart_write(void const *buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID const uint8_t *p = (const uint8_t *) buf; int count = 0; while (count < len) { diff --git a/hw/bsp/stm32wb/boards/stm32wb55nucleo/board.h b/hw/bsp/stm32wb/boards/stm32wb55nucleo/board.h index 704592506..3829828e8 100644 --- a/hw/bsp/stm32wb/boards/stm32wb55nucleo/board.h +++ b/hw/bsp/stm32wb/boards/stm32wb55nucleo/board.h @@ -47,8 +47,7 @@ #define BUTTON_STATE_ACTIVE 0 // UART Enable for STLink VCOM -#define UART_DEV USART1 -#define UART_CLK_EN __HAL_RCC_USART1_CLK_ENABLE +#define UART_ID 1 #define UART_GPIO_PORT GPIOB #define UART_GPIO_AF GPIO_AF7_USART1 #define UART_TX_PIN GPIO_PIN_6 diff --git a/hw/bsp/stm32wb/family.c b/hw/bsp/stm32wb/family.c index 0fdc5ca7d..d97be2115 100644 --- a/hw/bsp/stm32wb/family.c +++ b/hw/bsp/stm32wb/family.c @@ -32,6 +32,18 @@ #include "bsp/board_api.h" #include "board.h" +#ifdef UART_ID + #if UART_ID == 1 + #define USARTn USART1 + #define UARTn_CLK_ENABLE __HAL_RCC_USART1_CLK_ENABLE + #elif UART_ID == 2 + #define USARTn USART2 + #define UARTn_CLK_ENABLE __HAL_RCC_USART2_CLK_ENABLE + #else + #error "UART_ID not supported" + #endif +#endif + //--------------------------------------------------------------------+ // Forward USB interrupt events to TinyUSB IRQ Handler //--------------------------------------------------------------------+ @@ -46,7 +58,7 @@ void USB_LP_IRQHandler(void) { //--------------------------------------------------------------------+ // MACRO TYPEDEF CONSTANT ENUM //--------------------------------------------------------------------+ -#ifdef UART_DEV +#ifdef UART_ID UART_HandleTypeDef UartHandle; #endif @@ -101,8 +113,8 @@ void board_init(void) { GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(BUTTON_PORT, &GPIO_InitStruct); -#ifdef UART_DEV - UART_CLK_EN(); +#ifdef UART_ID + UARTn_CLK_ENABLE(); // UART GPIO_InitStruct.Pin = UART_TX_PIN | UART_RX_PIN; @@ -113,7 +125,7 @@ void board_init(void) { HAL_GPIO_Init(UART_GPIO_PORT, &GPIO_InitStruct); UartHandle = (UART_HandleTypeDef) { - .Instance = UART_DEV, + .Instance = USARTn, .Init.BaudRate = CFG_BOARD_UART_BAUDRATE, .Init.WordLength = UART_WORDLENGTH_8B, .Init.StopBits = UART_STOPBITS_1, @@ -152,7 +164,7 @@ uint32_t board_button_read(void) { } int board_uart_read(uint8_t* buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID int count = 0; while (count < len) { if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) { @@ -170,7 +182,7 @@ int board_uart_read(uint8_t* buf, int len) { } int board_uart_write(void const* buf, int len) { -#ifdef UART_DEV +#ifdef UART_ID const uint8_t *p = (const uint8_t *) buf; int count = 0; while (count < len) { |
