mbed library sources
Fork of mbed-src by
Diff: targets/hal/TARGET_STM/TARGET_DISCO_L053C8/serial_api.c
- Revision:
- 439:c4382fcbbaed
- Parent:
- 376:cb4d9db17537
--- a/targets/hal/TARGET_STM/TARGET_DISCO_L053C8/serial_api.c Mon Dec 15 09:15:06 2014 +0000 +++ b/targets/hal/TARGET_STM/TARGET_DISCO_L053C8/serial_api.c Mon Dec 15 09:30:07 2014 +0000 @@ -35,28 +35,7 @@ #include "cmsis.h" #include "pinmap.h" #include <string.h> - -static const PinMap PinMap_UART_TX[] = { - {PA_2, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART2)}, - {PA_9, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART1)}, - {PA_14, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART2)}, // Warning: this pin is used by SWCLK - {PB_6, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_USART1)}, - {PB_10, LPUART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_LPUART1)}, - {PC_4, LPUART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_LPUART1)}, - {PC_10, LPUART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_LPUART1)}, - {NC, NC, 0} -}; - -static const PinMap PinMap_UART_RX[] = { - {PA_3, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART2)}, - {PA_10, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART1)}, - {PA_15, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART2)}, - {PB_7, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_USART1)}, - {PB_11, LPUART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_LPUART1)}, - {PC_5, LPUART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_LPUART1)}, - {PC_11, LPUART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_LPUART1)}, - {NC, NC, 0} -}; +#include "PeripheralPins.h" #define UART_NUM (3) @@ -69,7 +48,8 @@ int stdio_uart_inited = 0; serial_t stdio_uart; -static void init_uart(serial_t *obj) { +static void init_uart(serial_t *obj) +{ UartHandle.Instance = (USART_TypeDef *)(obj->uart); // [TODO] Workaround to be removed after HAL driver is corrected @@ -94,11 +74,12 @@ // Disable the reception overrun detection UartHandle.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_RXOVERRUNDISABLE_INIT; UartHandle.AdvancedInit.OverrunDisable = UART_ADVFEATURE_OVERRUN_DISABLE; - + HAL_UART_Init(&UartHandle); } -void serial_init(serial_t *obj, PinName tx, PinName rx) { +void serial_init(serial_t *obj, PinName tx, PinName rx) +{ // Determine the UART to use (UART_1, UART_2, ...) UARTName uart_tx = (UARTName)pinmap_peripheral(tx, PinMap_UART_TX); UARTName uart_rx = (UARTName)pinmap_peripheral(rx, PinMap_UART_RX); @@ -150,7 +131,8 @@ } } -void serial_free(serial_t *obj) { +void serial_free(serial_t *obj) +{ // Reset UART and disable clock if (obj->uart == UART_1) { __USART1_FORCE_RESET(); @@ -177,12 +159,14 @@ serial_irq_ids[obj->index] = 0; } -void serial_baud(serial_t *obj, int baudrate) { +void serial_baud(serial_t *obj, int baudrate) +{ obj->baudrate = baudrate; init_uart(obj); } -void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_bits) { +void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_bits) +{ if (data_bits == 9) { obj->databits = UART_WORDLENGTH_9B; } else { @@ -216,7 +200,8 @@ * INTERRUPTS HANDLING ******************************************************************************/ -static void uart_irq(UARTName name, int id) { +static void uart_irq(UARTName name, int id) +{ UartHandle.Instance = (USART_TypeDef *)name; if (serial_irq_ids[id] != 0) { if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_TC) != RESET) { @@ -230,24 +215,29 @@ } } -static void uart1_irq(void) { +static void uart1_irq(void) +{ uart_irq(UART_1, 0); } -static void uart2_irq(void) { +static void uart2_irq(void) +{ uart_irq(UART_2, 1); } -static void lpuart1_irq(void) { +static void lpuart1_irq(void) +{ uart_irq(LPUART_1, 2); } -void serial_irq_handler(serial_t *obj, uart_irq_handler handler, uint32_t id) { +void serial_irq_handler(serial_t *obj, uart_irq_handler handler, uint32_t id) +{ irq_handler = handler; serial_irq_ids[obj->index] = id; } -void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable) { +void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable) +{ IRQn_Type irq_n = (IRQn_Type)0; uint32_t vector = 0; @@ -302,19 +292,22 @@ * READ/WRITE ******************************************************************************/ -int serial_getc(serial_t *obj) { +int serial_getc(serial_t *obj) +{ USART_TypeDef *uart = (USART_TypeDef *)(obj->uart); while (!serial_readable(obj)); return (int)(uart->RDR & (uint32_t)0xFF); } -void serial_putc(serial_t *obj, int c) { +void serial_putc(serial_t *obj, int c) +{ USART_TypeDef *uart = (USART_TypeDef *)(obj->uart); while (!serial_writable(obj)); uart->TDR = (uint32_t)(c & (uint32_t)0xFF); } -int serial_readable(serial_t *obj) { +int serial_readable(serial_t *obj) +{ int status; UartHandle.Instance = (USART_TypeDef *)(obj->uart); // Check if data is received @@ -322,7 +315,8 @@ return status; } -int serial_writable(serial_t *obj) { +int serial_writable(serial_t *obj) +{ int status; UartHandle.Instance = (USART_TypeDef *)(obj->uart); // Check if data is transmitted @@ -330,22 +324,26 @@ return status; } -void serial_clear(serial_t *obj) { +void serial_clear(serial_t *obj) +{ UartHandle.Instance = (USART_TypeDef *)(obj->uart); __HAL_UART_CLEAR_IT(&UartHandle, UART_CLEAR_TCF); __HAL_UART_SEND_REQ(&UartHandle, UART_RXDATA_FLUSH_REQUEST); } -void serial_pinout_tx(PinName tx) { +void serial_pinout_tx(PinName tx) +{ pinmap_pinout(tx, PinMap_UART_TX); } -void serial_break_set(serial_t *obj) { +void serial_break_set(serial_t *obj) +{ UartHandle.Instance = (USART_TypeDef *)(obj->uart); __HAL_UART_SEND_REQ(&UartHandle, UART_SENDBREAK_REQUEST); } -void serial_break_clear(serial_t *obj) { +void serial_break_clear(serial_t *obj) +{ } #endif