Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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
******************************************************************************/
