mbed library sources modified for open wear

Dependents:   openwear-lifelogger-example

Fork of mbed-src by mbed official

Files at this revision

API Documentation at this revision

Comitter:
mbed_official
Date:
Thu Aug 21 10:45:06 2014 +0100
Parent:
293:e8c83abeb68f
Child:
295:78f9587bb26d
Commit message:
Synchronized with git revision 0f8a06d8186efc5ba0f63d93600e113de217fb45

Full URL: https://github.com/mbedmicro/mbed/commit/0f8a06d8186efc5ba0f63d93600e113de217fb45/

[NUCLEOs] Improvement of Serial hal

Changed in this revision

targets/hal/TARGET_STM/TARGET_NUCLEO_F072RB/serial_api.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_STM/TARGET_NUCLEO_F334R8/serial_api.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_STM/TARGET_NUCLEO_L053R8/serial_api.c Show annotated file Show diff for this revision Revisions of this file
--- a/targets/hal/TARGET_STM/TARGET_NUCLEO_F072RB/serial_api.c	Thu Aug 21 08:00:07 2014 +0100
+++ b/targets/hal/TARGET_STM/TARGET_NUCLEO_F072RB/serial_api.c	Thu Aug 21 10:45:06 2014 +0100
@@ -90,6 +90,10 @@
         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);
 }
 
@@ -223,7 +227,7 @@
         }
         if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE) != RESET) {
             irq_handler(serial_irq_ids[id], RxIrq);
-            __HAL_UART_CLEAR_IT(&UartHandle, UART_FLAG_RXNE);
+            volatile uint32_t tmpval = UartHandle.Instance->RDR; // Clear RXNE bit
         }
     }
 }
@@ -293,9 +297,9 @@
         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;
         }
@@ -339,8 +343,8 @@
 
 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) {
--- a/targets/hal/TARGET_STM/TARGET_NUCLEO_F334R8/serial_api.c	Thu Aug 21 08:00:07 2014 +0100
+++ b/targets/hal/TARGET_STM/TARGET_NUCLEO_F334R8/serial_api.c	Thu Aug 21 10:45:06 2014 +0100
@@ -91,6 +91,10 @@
         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 @@
         }
         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 @@
         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 @@
 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)
--- a/targets/hal/TARGET_STM/TARGET_NUCLEO_L053R8/serial_api.c	Thu Aug 21 08:00:07 2014 +0100
+++ b/targets/hal/TARGET_STM/TARGET_NUCLEO_L053R8/serial_api.c	Thu Aug 21 10:45:06 2014 +0100
@@ -91,6 +91,10 @@
         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);
 }
 
@@ -217,7 +221,7 @@
         }
         if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE) != RESET) {
             irq_handler(serial_irq_ids[id], RxIrq);
-            __HAL_UART_SEND_REQ(&UartHandle, UART_RXDATA_FLUSH_REQUEST);
+            volatile uint32_t tmpval = UartHandle.Instance->RDR; // Clear RXNE bit
         }
     }
 }
@@ -278,9 +282,9 @@
         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;
         }
@@ -297,13 +301,13 @@
 int serial_getc(serial_t *obj) {
     USART_TypeDef *uart = (USART_TypeDef *)(obj->uart);
     while (!serial_readable(obj));
-    return (int)(uart->RDR & 0xFF);
+    return (int)(uart->RDR & (uint32_t)0xFF);
 }
 
 void serial_putc(serial_t *obj, int c) {
     USART_TypeDef *uart = (USART_TypeDef *)(obj->uart);
     while (!serial_writable(obj));
-    uart->TDR = (uint16_t)(c & 0xFF);
+    uart->TDR = (uint32_t)(c & (uint32_t)0xFF);
 }
 
 int serial_readable(serial_t *obj) {