3333#include "common/tusb_fifo.h"
3434#include "board.h"
3535
36+ #ifdef UART_ID
37+ #if UART_ID == 1
38+ #define USARTn USART1
39+ #define USARTn_IRQn USART1_IRQn
40+ #define USARTn_IRQHandler USART1_IRQHandler
41+ #define UARTn_CLK_ENABLE __HAL_RCC_USART1_CLK_ENABLE
42+ #elif UART_ID == 2
43+ #define USARTn USART2
44+ #define USARTn_IRQn USART2_IRQn
45+ #define USARTn_IRQHandler USART2_IRQHandler
46+ #define UARTn_CLK_ENABLE __HAL_RCC_USART2_CLK_ENABLE
47+ #elif UART_ID == 3
48+ #define USARTn USART3
49+ #define USARTn_IRQn USART3_IRQn
50+ #define USARTn_IRQHandler USART3_IRQHandler
51+ #define UARTn_CLK_ENABLE __HAL_RCC_USART3_CLK_ENABLE
52+ #endif
53+ #endif
54+
3655//--------------------------------------------------------------------+
3756// Forward USB interrupt events to TinyUSB IRQ Handler
3857//--------------------------------------------------------------------+
@@ -51,9 +70,9 @@ void USBWakeUp_IRQHandler(void) {
5170//--------------------------------------------------------------------+
5271// MACRO TYPEDEF CONSTANT ENUM
5372//--------------------------------------------------------------------+
54- #ifdef UART_DEV
73+ #ifdef UART_ID
5574static UART_HandleTypeDef UartHandle = {
56- .Instance = UART_DEV ,
75+ .Instance = USARTn ,
5776 .Init .BaudRate = CFG_BOARD_UART_BAUDRATE ,
5877 .Init .WordLength = UART_WORDLENGTH_8B ,
5978 .Init .StopBits = UART_STOPBITS_1 ,
@@ -68,24 +87,14 @@ static uint8_t uart_rx_ff_buf[32];
6887static tu_fifo_t uart_rx_ff ;
6988
7089// F1 uses old USART IP (SR/DR)
71- static void uart_rx_isr (void ) {
72- uint32_t sr = UART_DEV -> SR ;
90+ void USARTn_IRQHandler (void ) {
91+ uint32_t sr = USARTn -> SR ;
7392 if (sr & USART_SR_RXNE ) {
74- uint8_t byte = (uint8_t ) UART_DEV -> DR ;
93+ uint8_t byte = (uint8_t ) USARTn -> DR ;
7594 tu_fifo_write (& uart_rx_ff , & byte );
7695 }
7796 // Reading DR clears RXNE. OR is cleared by reading SR then DR (already done).
7897}
79-
80- void USART1_IRQHandler (void ) {
81- uart_rx_isr ();
82- }
83- void USART2_IRQHandler (void ) {
84- uart_rx_isr ();
85- }
86- void USART3_IRQHandler (void ) {
87- uart_rx_isr ();
88- }
8998#endif
9099
91100void board_init (void ) {
@@ -137,9 +146,9 @@ void board_init(void) {
137146 GPIO_InitStruct .Speed = GPIO_SPEED_FREQ_HIGH ;
138147 HAL_GPIO_Init (BUTTON_PORT , & GPIO_InitStruct );
139148
140- #ifdef UART_DEV
149+ #ifdef UART_ID
141150 // UART
142- UART_CLK_EN ();
151+ UARTn_CLK_ENABLE ();
143152
144153 GPIO_InitStruct .Pin = UART_TX_PIN | UART_RX_PIN ;
145154 GPIO_InitStruct .Mode = GPIO_MODE_AF_PP ;
@@ -150,12 +159,9 @@ void board_init(void) {
150159
151160 HAL_UART_Init (& UartHandle );
152161 tu_fifo_config (& uart_rx_ff , uart_rx_ff_buf , sizeof (uart_rx_ff_buf ), false);
153- UART_DEV -> CR1 |= USART_CR1_RXNEIE ;
154- const IRQn_Type uart_irqn = (UART_DEV == USART1 ) ? USART1_IRQn
155- : (UART_DEV == USART2 ) ? USART2_IRQn
156- : USART3_IRQn ;
157- NVIC_SetPriority (uart_irqn , (1 << __NVIC_PRIO_BITS ) - 1 );
158- NVIC_EnableIRQ (uart_irqn );
162+ USARTn -> CR1 |= USART_CR1_RXNEIE ;
163+ NVIC_SetPriority (USARTn_IRQn , (1 << __NVIC_PRIO_BITS ) - 1 );
164+ NVIC_EnableIRQ (USARTn_IRQn );
159165#endif
160166
161167#ifdef USB_CONNECT_PIN
@@ -217,7 +223,7 @@ size_t board_get_unique_id(uint8_t id[], size_t max_len) {
217223}
218224
219225int board_uart_read (uint8_t * buf , int len ) {
220- #ifdef UART_DEV
226+ #ifdef UART_ID
221227 return (int ) tu_fifo_read_n (& uart_rx_ff , buf , (uint16_t ) len );
222228#else
223229 (void ) buf ; (void ) len ;
@@ -226,7 +232,7 @@ int board_uart_read(uint8_t *buf, int len) {
226232}
227233
228234int board_uart_write (void const * buf , int len ) {
229- #ifdef UART_DEV
235+ #ifdef UART_ID
230236 const uint8_t * p = (const uint8_t * ) buf ;
231237 int count = 0 ;
232238 while (count < len ) {
0 commit comments