summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhathach <[email protected]>2026-04-03 19:38:07 +0700
committerhathach <[email protected]>2026-04-03 19:38:07 +0700
commit81efb78d1655dcab31da5e03fd7e22e91491d186 (patch)
tree0ea8eafc8730146e3a29f3e0349bfa3d02fa635a
parent3ed9d6517485611b040ecdc4e5d327b6e86f3dee (diff)
update stm32 to use better uart id
-rw-r--r--hw/bsp/stm32c0/boards/stm32c071nucleo/board.h3
-rw-r--r--hw/bsp/stm32c0/family.c22
-rw-r--r--hw/bsp/stm32f0/boards/stm32f070rbnucleo/board.h3
-rw-r--r--hw/bsp/stm32f0/boards/stm32f072disco/board.h3
-rw-r--r--hw/bsp/stm32f0/boards/stm32f072eval/board.h3
-rw-r--r--hw/bsp/stm32f0/family.c48
-rw-r--r--hw/bsp/stm32f1/boards/stm32f103_bluepill/board.h3
-rw-r--r--hw/bsp/stm32f1/family.c56
-rw-r--r--hw/bsp/stm32f2/family.c54
-rw-r--r--hw/bsp/stm32f3/family.c56
-rw-r--r--hw/bsp/stm32f4/boards/feather_stm32f405/board.h4
-rw-r--r--hw/bsp/stm32f4/boards/pyboardv11/board.h4
-rw-r--r--hw/bsp/stm32f4/boards/stm32f401blackpill/board.h4
-rw-r--r--hw/bsp/stm32f4/boards/stm32f407blackvet/board.h4
-rw-r--r--hw/bsp/stm32f4/boards/stm32f407disco/board.h4
-rw-r--r--hw/bsp/stm32f4/boards/stm32f411blackpill/board.h4
-rw-r--r--hw/bsp/stm32f4/boards/stm32f411disco/board.h4
-rw-r--r--hw/bsp/stm32f4/boards/stm32f412disco/board.h4
-rw-r--r--hw/bsp/stm32f4/boards/stm32f412nucleo/board.h4
-rw-r--r--hw/bsp/stm32f4/boards/stm32f439nucleo/board.h4
-rw-r--r--hw/bsp/stm32f4/family.c60
-rw-r--r--hw/bsp/stm32f7/boards/stlinkv3mini/board.h4
-rw-r--r--hw/bsp/stm32f7/boards/stm32f723disco/board.h4
-rw-r--r--hw/bsp/stm32f7/boards/stm32f746disco/board.h4
-rw-r--r--hw/bsp/stm32f7/boards/stm32f746nucleo/board.h4
-rw-r--r--hw/bsp/stm32f7/boards/stm32f767nucleo/board.h4
-rw-r--r--hw/bsp/stm32f7/boards/stm32f769disco/board.h4
-rw-r--r--hw/bsp/stm32f7/family.c71
-rw-r--r--hw/bsp/stm32g0/boards/stm32g0b1nucleo/board.h3
-rw-r--r--hw/bsp/stm32g0/family.c28
-rw-r--r--hw/bsp/stm32g4/boards/b_g474e_dpow1/board.h3
-rw-r--r--hw/bsp/stm32g4/boards/stm32g474nucleo/board.h3
-rw-r--r--hw/bsp/stm32g4/boards/stm32g491nucleo/board.h3
-rw-r--r--hw/bsp/stm32g4/family.c28
-rw-r--r--hw/bsp/stm32h5/family.c25
-rw-r--r--hw/bsp/stm32h7/boards/daisyseed/board.h3
-rw-r--r--hw/bsp/stm32h7/boards/stm32h723nucleo/board.h3
-rw-r--r--hw/bsp/stm32h7/boards/stm32h743_weact/board.h3
-rw-r--r--hw/bsp/stm32h7/boards/stm32h743eval/board.h3
-rw-r--r--hw/bsp/stm32h7/boards/stm32h743nucleo/board.h3
-rw-r--r--hw/bsp/stm32h7/boards/stm32h745disco/board.h3
-rw-r--r--hw/bsp/stm32h7/boards/stm32h747disco/board.h3
-rw-r--r--hw/bsp/stm32h7/boards/stm32h750_weact/board.h3
-rw-r--r--hw/bsp/stm32h7/boards/stm32h750bdk/board.h3
-rw-r--r--hw/bsp/stm32h7/boards/waveshare_openh743i/board.h3
-rw-r--r--hw/bsp/stm32h7/family.c28
-rw-r--r--hw/bsp/stm32h7rs/boards/stm32h7s3nucleo/board.h3
-rw-r--r--hw/bsp/stm32h7rs/family.c25
-rw-r--r--hw/bsp/stm32l0/boards/stm32l052dap52/board.h3
-rw-r--r--hw/bsp/stm32l0/family.c20
-rw-r--r--hw/bsp/stm32l4/boards/stm32l412nucleo/board.h3
-rw-r--r--hw/bsp/stm32l4/boards/stm32l476disco/board.h3
-rw-r--r--hw/bsp/stm32l4/boards/stm32l496nucleo/board.h3
-rw-r--r--hw/bsp/stm32l4/boards/stm32l4p5nucleo/board.h3
-rw-r--r--hw/bsp/stm32l4/boards/stm32l4r5nucleo/board.h3
-rw-r--r--hw/bsp/stm32l4/family.c26
-rw-r--r--hw/bsp/stm32n6/boards/stm32n6570dk/board.h3
-rw-r--r--hw/bsp/stm32n6/boards/stm32n657nucleo/board.h3
-rw-r--r--hw/bsp/stm32n6/family.c25
-rw-r--r--hw/bsp/stm32u0/boards/stm32u083cdk/board.h3
-rw-r--r--hw/bsp/stm32u0/boards/stm32u083nucleo/board.h3
-rw-r--r--hw/bsp/stm32u0/family.c25
-rw-r--r--hw/bsp/stm32u5/boards/b_u585i_iot2a/board.h3
-rw-r--r--hw/bsp/stm32u5/boards/stm32u545nucleo/board.h3
-rw-r--r--hw/bsp/stm32u5/boards/stm32u575eval/board.h3
-rw-r--r--hw/bsp/stm32u5/boards/stm32u575nucleo/board.h3
-rw-r--r--hw/bsp/stm32u5/boards/stm32u5a5nucleo/board.h3
-rw-r--r--hw/bsp/stm32u5/family.c29
-rw-r--r--hw/bsp/stm32wb/boards/stm32wb55nucleo/board.h3
-rw-r--r--hw/bsp/stm32wb/family.c24
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) {