7070#define UART_NUM (8)
7171#elif defined(STM32F2xx )
7272#define UART_NUM (6)
73- #else // STM32F1xx || STM32F3xx || STM32L0xx || STM32L1xx || STM32L4xx
73+ #elif defined(STM32F1xx ) || defined(STM32F3xx ) || \
74+ defined(STM32L0xx ) || defined(STM32L1xx ) || defined(STM32L4xx )
7475#define UART_NUM (5)
76+ #else
77+ #error "Unknown Family - unknown UART_NUM"
7578#endif
79+
7680static UART_HandleTypeDef * uart_handlers [UART_NUM ] = {NULL };
7781static void (* rx_callback [UART_NUM ])(serial_t * );
7882static serial_t * rx_callback_obj [UART_NUM ];
7983static int (* tx_callback [UART_NUM ])(serial_t * );
8084static serial_t * tx_callback_obj [UART_NUM ];
8185
82- static uint8_t rx_buffer [1 ] = {0 };
83-
8486/**
8587 * @brief Function called to initialize the uart interface
8688 * @param obj : pointer to serial_t structure
@@ -457,7 +459,7 @@ uint8_t serial_tx_active(serial_t *obj)
457459 * @param obj : pointer to serial_t structure
458460 * @retval last character received
459461 */
460- int uart_getc (serial_t * obj )
462+ int uart_getc (serial_t * obj , unsigned char * c )
461463{
462464 if (obj == NULL ) {
463465 return -1 ;
@@ -467,11 +469,12 @@ int uart_getc(serial_t *obj)
467469 return -1 ; // transaction ongoing
468470 }
469471
472+ * c = (unsigned char )(obj -> recv );
470473 // Restart RX irq
471474 UART_HandleTypeDef * huart = uart_handlers [obj -> index ];
472- HAL_UART_Receive_IT (huart , rx_buffer , 1 );
475+ HAL_UART_Receive_IT (huart , & ( obj -> recv ) , 1 );
473476
474- return rx_buffer [ 0 ] ;
477+ return 0 ;
475478}
476479
477480/**
@@ -498,7 +501,7 @@ void uart_attach_rx_callback(serial_t *obj, void (*callback)(serial_t*))
498501 HAL_NVIC_SetPriority (obj -> irq , 0 , 1 );
499502 HAL_NVIC_EnableIRQ (obj -> irq );
500503
501- if (HAL_UART_Receive_IT (uart_handlers [obj -> index ], rx_buffer , 1 ) != HAL_OK ) {
504+ if (HAL_UART_Receive_IT (uart_handlers [obj -> index ], & ( obj -> recv ) , 1 ) != HAL_OK ) {
502505 return ;
503506 }
504507}
0 commit comments