NUCLEO UART hardware flow control (RTS/CTS) demo

Dependencies:   BreathLed mbed

Committer:
steeven
Date:
Sat May 09 16:00:37 2015 +0000
Revision:
0:77572dc5bb31
init

Who changed what in which revision?

UserRevisionLine numberNew contents of line
steeven 0:77572dc5bb31 1 #include "mbed.h"
steeven 0:77572dc5bb31 2 #include "BreathLed/BreathLed.h"
steeven 0:77572dc5bb31 3 #include "PeripheralPins.h"
steeven 0:77572dc5bb31 4
steeven 0:77572dc5bb31 5 using namespace steeven;
steeven 0:77572dc5bb31 6
steeven 0:77572dc5bb31 7 BreathLed led1(LED1);
steeven 0:77572dc5bb31 8
steeven 0:77572dc5bb31 9 Serial pc(USBTX, USBRX);
steeven 0:77572dc5bb31 10 Serial uart1(PA_9, PA_10);
steeven 0:77572dc5bb31 11
steeven 0:77572dc5bb31 12 /** NUCLEO_STM32F411RE uart hardware flow control with RTS/CTS
steeven 0:77572dc5bb31 13 *
steeven 0:77572dc5bb31 14 * How to test:
steeven 0:77572dc5bb31 15 * 0. Modify serial_api.c, change flow control type from NONE to:
steeven 0:77572dc5bb31 16 * UartHandle.Init.HwFlowCtl = UART_HWCONTROL_RTS_CTS;
steeven 0:77572dc5bb31 17 * 1. Continuesly send or paste large data to USB console
steeven 0:77572dc5bb31 18 * 2. Connect CTS(PA_11) pin to GND, data should sent with writable().
steeven 0:77572dc5bb31 19 * No need to connect a peer uart device.
steeven 0:77572dc5bb31 20 */
steeven 0:77572dc5bb31 21
steeven 0:77572dc5bb31 22
steeven 0:77572dc5bb31 23 int main() {
steeven 0:77572dc5bb31 24 char ch;
steeven 0:77572dc5bb31 25 int i = 0;
steeven 0:77572dc5bb31 26 int j = 0;
steeven 0:77572dc5bb31 27 led1.loop(0.5, 0.2);
steeven 0:77572dc5bb31 28 pc.baud(115200);
steeven 0:77572dc5bb31 29 PinMap rts = {PA_12, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)};
steeven 0:77572dc5bb31 30 PinMap cts = {PA_11, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)};
steeven 0:77572dc5bb31 31 pin_function(rts.pin, rts.function);
steeven 0:77572dc5bb31 32 pin_function(cts.pin, cts.function);
steeven 0:77572dc5bb31 33 pin_mode(rts.pin, PullUp); //output, uart request peer to send
steeven 0:77572dc5bb31 34 pin_mode(cts.pin, PullUp); //input, peer send 0 to allow uart send
steeven 0:77572dc5bb31 35
steeven 0:77572dc5bb31 36 uart1.baud(115200);
steeven 0:77572dc5bb31 37
steeven 0:77572dc5bb31 38 pc.printf("hello world!\n");
steeven 0:77572dc5bb31 39 while (1) {
steeven 0:77572dc5bb31 40 if (pc.readable()) {
steeven 0:77572dc5bb31 41 i++;
steeven 0:77572dc5bb31 42 ch = pc.getc();
steeven 0:77572dc5bb31 43 if (uart1.writeable()) {
steeven 0:77572dc5bb31 44 uart1.putc(ch);
steeven 0:77572dc5bb31 45 } else {
steeven 0:77572dc5bb31 46 pc.printf("%d/%d ", i,j); //if
steeven 0:77572dc5bb31 47 }
steeven 0:77572dc5bb31 48 if (i%50 == 49){
steeven 0:77572dc5bb31 49 pc.printf("\r\n%d lost: %d \r\n", i,i-j);
steeven 0:77572dc5bb31 50 }
steeven 0:77572dc5bb31 51 }
steeven 0:77572dc5bb31 52 if (uart1.readable()) {
steeven 0:77572dc5bb31 53 ch = uart1.getc();
steeven 0:77572dc5bb31 54 j++;
steeven 0:77572dc5bb31 55 }
steeven 0:77572dc5bb31 56 }
steeven 0:77572dc5bb31 57 }
steeven 0:77572dc5bb31 58