mbed library sources. Supersedes mbed-src.
Fork of mbed-dev by
Revision 112:df58eca2f41d, committed 2016-04-17
- Comitter:
- mbed_official
- Date:
- Sun Apr 17 17:45:10 2016 +0100
- Parent:
- 111:86e691153a57
- Child:
- 113:b3775bf36a83
- Commit message:
- Synchronized with git revision 92a345200dc74ae7d0db944a94f028baaa129d7c
Full URL: https://github.com/mbedmicro/mbed/commit/92a345200dc74ae7d0db944a94f028baaa129d7c/
Changed in this revision
--- a/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_MCU_K64F/TARGET_FRDM/PeripheralPins.c Fri Apr 15 11:00:11 2016 +0100
+++ b/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_MCU_K64F/TARGET_FRDM/PeripheralPins.c Sun Apr 17 17:45:10 2016 +0100
@@ -108,7 +108,7 @@
{PTC3 , UART_1, 3},
{PTC14, UART_4, 3},
{PTD2 , UART_2, 3},
- {PTC6 , UART_0, 3},
+ {PTD6 , UART_0, 3},
{NC , NC , 0}
};
--- a/targets/hal/TARGET_STM/TARGET_STM32L4/PeripheralPins.h Fri Apr 15 11:00:11 2016 +0100 +++ b/targets/hal/TARGET_STM/TARGET_STM32L4/PeripheralPins.h Sun Apr 17 17:45:10 2016 +0100 @@ -55,6 +55,8 @@ extern const PinMap PinMap_UART_TX[]; extern const PinMap PinMap_UART_RX[]; +extern const PinMap PinMap_UART_RTS[]; +extern const PinMap PinMap_UART_CTS[]; //*** SPI ***
--- a/targets/hal/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/PeripheralPins.c Fri Apr 15 11:00:11 2016 +0100
+++ b/targets/hal/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/PeripheralPins.c Sun Apr 17 17:45:10 2016 +0100
@@ -184,6 +184,28 @@
{NC, NC, 0}
};
+const PinMap PinMap_UART_RTS[] = {
+ {PA_1, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
+ {PA_12, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
+// {PA_15, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)},
+// {PB_14, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, // MEMs
+// {PC_8, UART_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_UART5)},
+// {PD_4, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
+// {PD_12, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_UART3)}, // LED D4
+ {NC, NC, 0}
+};
+
+const PinMap PinMap_UART_CTS[] = {
+ {PA_0, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
+ {PA_11, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
+// {PB_0, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)},
+// {PB_13, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
+// {PC_9, UART_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_UART5)},
+// {PD_3, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
+// {PD_11, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_UART3)}, // LED D4
+ {NC, NC, 0}
+};
+
//*** SPI ***
const PinMap PinMap_SPI_MOSI[] = {
--- a/targets/hal/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device.h Fri Apr 15 11:00:11 2016 +0100 +++ b/targets/hal/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device.h Sun Apr 17 17:45:10 2016 +0100 @@ -40,6 +40,7 @@ #define DEVICE_ANALOGOUT 1 #define DEVICE_SERIAL 1 +#define DEVICE_SERIAL_FC 1 #define DEVICE_I2C 1 #define DEVICE_I2CSLAVE 1
--- a/targets/hal/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/objects.h Fri Apr 15 11:00:11 2016 +0100
+++ b/targets/hal/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/objects.h Sun Apr 17 17:45:10 2016 +0100
@@ -75,6 +75,11 @@
uint32_t parity;
PinName pin_tx;
PinName pin_rx;
+#if DEVICE_SERIAL_FC
+ uint32_t hw_flow_ctl;
+ PinName pin_rts;
+ PinName pin_cts;
+#endif
};
struct spi_s {
--- a/targets/hal/TARGET_STM/TARGET_STM32L4/serial_api.c Fri Apr 15 11:00:11 2016 +0100
+++ b/targets/hal/TARGET_STM/TARGET_STM32L4/serial_api.c Sun Apr 17 17:45:10 2016 +0100
@@ -49,6 +49,12 @@
int stdio_uart_inited = 0;
serial_t stdio_uart;
+#if DEVICE_SERIAL_ASYNCH
+#define SERIAL_OBJ(X) (obj->serial.X)
+#else
+#define SERIAL_OBJ(X) (obj->X)
+#endif
+
static void init_uart(serial_t *obj)
{
UartHandle.Instance = (USART_TypeDef *)(obj->uart);
@@ -57,7 +63,11 @@
UartHandle.Init.WordLength = obj->databits;
UartHandle.Init.StopBits = obj->stopbits;
UartHandle.Init.Parity = obj->parity;
+#if DEVICE_SERIAL_FC
+ UartHandle.Init.HwFlowCtl = SERIAL_OBJ(hw_flow_ctl);
+#else
UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
+#endif
UartHandle.Init.OverSampling = UART_OVERSAMPLING_16;
UartHandle.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_ENABLE;
@@ -231,6 +241,62 @@
init_uart(obj);
}
+#if DEVICE_SERIAL_FC
+/** Set HW Control Flow
+ * @param obj The serial object
+ * @param type The Control Flow type (FlowControlNone, FlowControlRTS, FlowControlCTS, FlowControlRTSCTS)
+ * @param rxflow Pin for the rxflow
+ * @param txflow Pin for the txflow
+ */
+void serial_set_flow_control(serial_t *obj, FlowControl type, PinName rxflow, PinName txflow)
+{
+
+ // Determine the UART to use (UART_1, UART_2, ...)
+ UARTName uart_rts = (UARTName)pinmap_peripheral(rxflow, PinMap_UART_RTS);
+ UARTName uart_cts = (UARTName)pinmap_peripheral(txflow, PinMap_UART_CTS);
+
+ // Get the peripheral name (UART_1, UART_2, ...) from the pin and assign it to the object
+ SERIAL_OBJ(uart) = (UARTName)pinmap_merge(uart_cts, uart_rts);
+
+ MBED_ASSERT(SERIAL_OBJ(uart) != (UARTName)NC);
+ UartHandle.Instance = (USART_TypeDef *)(SERIAL_OBJ(uart));
+
+ if(type == FlowControlNone) {
+ // Disable hardware flow control
+ SERIAL_OBJ(hw_flow_ctl) = UART_HWCONTROL_NONE;
+ }
+ if (type == FlowControlRTS) {
+ // Enable RTS
+ MBED_ASSERT(uart_rts != (UARTName)NC);
+ SERIAL_OBJ(hw_flow_ctl) = UART_HWCONTROL_RTS;
+ SERIAL_OBJ(pin_rts) = rxflow;
+ // Enable the pin for RTS function
+ pinmap_pinout(rxflow, PinMap_UART_RTS);
+ }
+ if (type == FlowControlCTS) {
+ // Enable CTS
+ MBED_ASSERT(uart_cts != (UARTName)NC);
+ SERIAL_OBJ(hw_flow_ctl) = UART_HWCONTROL_CTS;
+ SERIAL_OBJ(pin_cts) = txflow;
+ // Enable the pin for CTS function
+ pinmap_pinout(txflow, PinMap_UART_CTS);
+ }
+ if (type == FlowControlRTSCTS) {
+ // Enable CTS & RTS
+ MBED_ASSERT(uart_rts != (UARTName)NC);
+ MBED_ASSERT(uart_cts != (UARTName)NC);
+ SERIAL_OBJ(hw_flow_ctl) = UART_HWCONTROL_RTS_CTS;
+ SERIAL_OBJ(pin_rts) = rxflow;
+ SERIAL_OBJ(pin_cts) = txflow;
+ // Enable the pin for CTS function
+ pinmap_pinout(txflow, PinMap_UART_CTS);
+ // Enable the pin for RTS function
+ pinmap_pinout(rxflow, PinMap_UART_RTS);
+ }
+ init_uart(obj);
+}
+#endif
+
/******************************************************************************
* INTERRUPTS HANDLING
******************************************************************************/
Helmut Tschemernjak
