@@ -230,18 +230,23 @@ void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_b
230
230
case SERIAL_2 :
231
231
case SERIAL_3 :
232
232
MBED_ASSERT ((data_bits > 6 ) && (data_bits < 10 )); // 0: 7 data bits ... 2: 9 data bits
233
- obj -> uart_config .DataBits = data_bits ;
234
- obj -> uart_config .StopBits = stop_bits ;
235
- obj -> uart_config .Parity = parity ;
233
+ obj -> uart_config .DataBits = ((data_bits == 7 ) ? UART_DATA_BITS_7 :
234
+ ((data_bits == 8 ) ? UART_DATA_BITS_8 : UART_DATA_BITS_9 ));
235
+ obj -> uart_config .StopBits = ((stop_bits == 1 ) ? UART_STOP_BITS_1 : UART_STOP_BITS_2 );
236
+ obj -> uart_config .Parity = ((parity == ParityOdd ) ? UART_ODD_PARITY :
237
+ ((parity == ParityEven ) ? UART_EVEN_PARITY : UART_NO_PARITY ));
236
238
UART_Init (obj -> UARTx ,& obj -> uart_config );
237
239
break ;
238
240
case SERIAL_4 :
239
241
case SERIAL_5 :
240
242
FUART_Disable (obj -> FUART );
241
- MBED_ASSERT ((data_bits > 4 ) && (data_bits < 9 )); // 0: 5 data bits ... 2: 8 data bits
242
- obj -> fuart_config .DataBits = data_bits ;
243
- obj -> fuart_config .StopBits = stop_bits ;
244
- obj -> fuart_config .Parity = parity ;
243
+ MBED_ASSERT ((data_bits > 6 ) && (data_bits < 9 )); // 0: 5 data bits ... 2: 8 data bits
244
+ obj -> fuart_config .DataBits = ((data_bits == 7 ) ? FUART_DATA_BITS_7 : FUART_DATA_BITS_8 );
245
+ obj -> fuart_config .StopBits = ((stop_bits == 1 ) ? FUART_STOP_BITS_1 : FUART_STOP_BITS_2 );
246
+ obj -> fuart_config .Parity = ((parity == ParityOdd ) ? FUART_ODD_PARITY :
247
+ ((parity == ParityEven ) ? FUART_EVEN_PARITY :
248
+ ((parity == ParityForced1 ) ? FUART_1_PARITY :
249
+ ((parity == ParityForced0 ) ? FUART_0_PARITY : FUART_NO_PARITY ))));
245
250
FUART_Init (obj -> FUART ,& obj -> fuart_config );
246
251
FUART_Enable (obj -> FUART );
247
252
break ;
@@ -497,11 +502,20 @@ void serial_pinout_tx(PinName tx)
497
502
// Set flow control, Just support CTS
498
503
void serial_set_flow_control (serial_t * obj , FlowControl type , PinName rxflow , PinName txflow )
499
504
{
500
- UARTName uart_cts = (UARTName )pinmap_peripheral (txflow , PinMap_UART_CTS );
501
505
UARTName uart_rts = (UARTName )pinmap_peripheral (rxflow , PinMap_UART_RTS );
506
+ UARTName uart_cts ;
507
+
508
+ // SERIAL_5 & SERIAL_3 have same CTS pin (PA7), only function register is different (4 & 2).
509
+ // pinmap_peripheral() will always return first match from the map.
510
+ // But, if SERIAL_5 is used, then pinmap_peripheral() should return SERIAL_5 (function register 2 to be set).
511
+ if (obj -> index == SERIAL_5 ) {
512
+ uart_cts = (UARTName )pinmap_peripheral (txflow , & PinMap_UART_CTS [5 ]);
513
+ } else {
514
+ uart_cts = (UARTName )pinmap_peripheral (txflow , PinMap_UART_CTS );
515
+ }
502
516
UARTName uart_name = (UARTName )pinmap_merge (uart_cts , uart_rts );
503
517
504
- switch (obj -> index ) {
518
+ switch (uart_name ) {
505
519
case SERIAL_0 :
506
520
case SERIAL_1 :
507
521
case SERIAL_2 :
@@ -529,7 +543,11 @@ void serial_set_flow_control(serial_t *obj, FlowControl type, PinName rxflow, Pi
529
543
obj -> FUART -> CR |= FUART_CTS_FLOW_CTRL ;
530
544
531
545
// Enable the pin for CTS and RTS function
532
- pinmap_pinout (txflow , PinMap_UART_CTS );
546
+ if (uart_name == SERIAL_5 ) {
547
+ pinmap_pinout (txflow , & PinMap_UART_CTS [5 ]);
548
+ } else {
549
+ pinmap_pinout (txflow , PinMap_UART_CTS );
550
+ }
533
551
} else if (type == FlowControlRTS ) {
534
552
MBED_ASSERT (uart_rts != (UARTName ) NC );
535
553
@@ -545,7 +563,11 @@ void serial_set_flow_control(serial_t *obj, FlowControl type, PinName rxflow, Pi
545
563
obj -> FUART -> CR |= FUART_CTS_FLOW_CTRL | FUART_RTS_FLOW_CTRL ;
546
564
547
565
// Enable the pin for CTS and RTS function
548
- pinmap_pinout (txflow , PinMap_UART_CTS );
566
+ if (uart_name == SERIAL_5 ) {
567
+ pinmap_pinout (txflow , & PinMap_UART_CTS [5 ]);
568
+ } else {
569
+ pinmap_pinout (txflow , PinMap_UART_CTS );
570
+ }
549
571
pinmap_pinout (rxflow , PinMap_UART_RTS );
550
572
} else {
551
573
// Disable CTS and RTS hardware flow control
0 commit comments