steeven lee
/
NUCLEO_uart_flow_control
NUCLEO UART hardware flow control (RTS/CTS) demo
main.cpp@0:77572dc5bb31, 2015-05-09 (annotated)
- Committer:
- steeven
- Date:
- Sat May 09 16:00:37 2015 +0000
- Revision:
- 0:77572dc5bb31
init
Who changed what in which revision?
User | Revision | Line number | New 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 |