From 5655a569412ef5849555c27fbbc71befd0b0b573 Mon Sep 17 00:00:00 2001 From: bcostm Date: Thu, 21 Aug 2014 09:58:05 +0200 Subject: [PATCH] [NUCLEO_F334R8] Improvement of Serial hal --- .../TARGET_STM/TARGET_NUCLEO_F334R8/serial_api.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/libraries/mbed/targets/hal/TARGET_STM/TARGET_NUCLEO_F334R8/serial_api.c b/libraries/mbed/targets/hal/TARGET_STM/TARGET_NUCLEO_F334R8/serial_api.c index 4e2fd44ae6..5539aa5ccc 100644 --- a/libraries/mbed/targets/hal/TARGET_STM/TARGET_NUCLEO_F334R8/serial_api.c +++ b/libraries/mbed/targets/hal/TARGET_STM/TARGET_NUCLEO_F334R8/serial_api.c @@ -91,6 +91,10 @@ static void init_uart(serial_t *obj) UartHandle.Init.Mode = UART_MODE_TX_RX; } + // Disable the reception overrun detection + UartHandle.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_RXOVERRUNDISABLE_INIT; + UartHandle.AdvancedInit.OverrunDisable = UART_ADVFEATURE_OVERRUN_DISABLE; + HAL_UART_Init(&UartHandle); } @@ -219,9 +223,7 @@ static void uart_irq(UARTName name, int id) } if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE) != RESET) { irq_handler(serial_irq_ids[id], RxIrq); - // [TODO] Check which line works the best - __HAL_UART_SEND_REQ(&UartHandle, UART_RXDATA_FLUSH_REQUEST); - //__HAL_UART_CLEAR_IT(&UartHandle, UART_FLAG_RXNE); + volatile uint32_t tmpval = UartHandle.Instance->RDR; // Clear RXNE bit } } } @@ -287,9 +289,9 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable) if (irq == RxIrq) { __HAL_UART_DISABLE_IT(&UartHandle, UART_IT_RXNE); // Check if TxIrq is disabled too - if ((UartHandle.Instance->CR1 & USART_CR1_TXEIE) == 0) all_disabled = 1; + if ((UartHandle.Instance->CR1 & USART_CR1_TCIE) == 0) all_disabled = 1; } else { // TxIrq - __HAL_UART_DISABLE_IT(&UartHandle, UART_IT_TXE); + __HAL_UART_DISABLE_IT(&UartHandle, UART_IT_TC); // Check if RxIrq is disabled too if ((UartHandle.Instance->CR1 & USART_CR1_RXNEIE) == 0) all_disabled = 1; } @@ -346,8 +348,8 @@ int serial_writable(serial_t *obj) void serial_clear(serial_t *obj) { UartHandle.Instance = (USART_TypeDef *)(obj->uart); - __HAL_UART_CLEAR_IT(&UartHandle, UART_FLAG_TXE); - __HAL_UART_CLEAR_IT(&UartHandle, UART_FLAG_RXNE); + __HAL_UART_CLEAR_IT(&UartHandle, UART_FLAG_TC); + __HAL_UART_SEND_REQ(&UartHandle, UART_RXDATA_FLUSH_REQUEST); } void serial_pinout_tx(PinName tx)