UART SERIAL BUFFER CLEAR / FLUSH(). There is no direct function to clear UART buffer in Mbed, Trick require to handle this situation. Simple way is mentioned in this program to clear Rx buffer of UART. Jaydeep shah - radhey04ec@gmail.com

Revision:
0:3355c5b6d8fd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Jul 24 10:37:58 2020 +0000
@@ -0,0 +1,128 @@
+//UART FLUSH()
+
+// This program is further improvement of circular buffer concepts
+/* Note : In Serial class library /or RawSerial class library there is no flush() command.
+Sometimes buffer clearing process require when you want to compare receiving data with pre-stored value
+or when doing some string related operation, because if you not clear UART buffer you will get old stored data.
+*/
+
+/*Note : simple way to clear Buffer : Read it , & reset all UART process related counter.*/
+
+//PROGRAM SUBJECT : UART BUFFER CLEAR / FLUSH()
+//Date : 24 July 2020 Version 1.0
+//JAYDEEP SHAH -- radhey04ec@gmail.com
+
+// I am sending one by one characters to slave and slave provide response according it , Ex : 'T' = Test Mode
+
+#include "mbed.h"
+#define BUFFER_SIZE 90   //SIZE OF BUFFER   ---DEPENDS ON YOUR DATA SIZE  --This is circular buffer
+
+char rxBuffer[BUFFER_SIZE];  //CREATE CIRCULAR BUFFER  -- TO STORE RECEIVE DATA
+
+unsigned int bufferReadingIndex=0;  //CREATE POINTER TO READ DATA FROM UART AND STORE INTO ARRAY
+
+unsigned int i=0; //counter to read data from buffer Array
+
+// 0 - Rx - PA_0   : Board Tx ___ Arduino Connector socket >>> First_pin _Orange  -- If FTDI CABLE USE
+// 1 - Tx - PA_1   : Board Rx ____ Arduino connector socket  >>> Second_pin _red  -- If FTDI CABLE USE
+
+//If you use only Serial calss , there is chance of damage OS because of MUTEX GUARD
+
+//use RawSerial class
+RawSerial UT(PA_0,PA_1);  //UART PIN DECLARATION
+RawSerial pc(USBTX,USBRX);  //HOST PC TERMINAL  - 9600 BAUD WITH 8-N-1 STTING
+
+//NOTE : UT OBJ FOR SLAVE BOARD & pc OBJ FOR TERMINAL
+
+//DEFINE Rx Interrupt function --DECLARATION
+void RxInterrupt(void);
+
+//Function that read response data
+void response(void);
+
+//FLUSH() UART
+
+void FLUSH(void); //Function declaration only
+
+int main()
+{
+UT.baud(57600);  //BAUD RATE SETTING
+UT.format(8,Serial::None,1);   //FORMAT OF UART COMMUNICATION
+
+//INTERRUPT ATTACHMENT WHEN RECEIVE DATA
+UT.attach(&RxInterrupt,Serial::RxIrq);
+
+pc.printf("\n TESTING TURN ON : \n");
+wait(1);
+
+UT.putc('T');  //ENTER IN TEST MODE  -- SLAVE BOARD ENTER INTO TEST MODE
+wait(0.5);
+response();  //Read Response from Slave 
+FLUSH(); // BEFORE SENDING /RECEIVING NEW DATA
+
+ThisThread::sleep_for(1000);
+
+UT.putc('d');   // RED LED OF SLAVE BOARD ON
+wait(1);
+response(); //Read Response from Slave
+FLUSH(); // BEFORE SENDING /RECEIVING NEW DATA
+ThisThread::sleep_for(5000);
+
+
+UT.putc('b');  // RED LED OF SLAVE BOARD OFF
+wait(1);
+response();  //Read Response from slave
+FLUSH(); // BEFORE SENDING /RECEIVING NEW DATA
+ThisThread::sleep_for(1000);
+
+UT.putc('Q');  //QUIT FROM TEST MODE -- NORMAL MODE SELECT
+wait(1);
+response();//Read response from Slave
+FLUSH(); // BEFORE SENDING /RECEIVING NEW DATA
+ThisThread::sleep_for(3000);
+
+while(1)
+{
+}
+
+}
+
+
+void RxInterrupt()      //if Rx buffer have data --- Interrupt call
+{
+    if(UT.readable())  //IF data available
+    {
+        rxBuffer[bufferReadingIndex++] = UT.getc();   // read and store into Buffer
+        if(bufferReadingIndex >= BUFFER_SIZE)  // If limit cross
+        {
+            bufferReadingIndex =0; // RESET CONTER
+        }
+    }
+}
+
+void response()  //FUNCTION TO READ DATA
+{
+    char rxByte;
+
+    while(i != bufferReadingIndex)  //READ WHILE COMPLETE DATA NOT RECEIVED
+    {
+        rxByte = rxBuffer[i];  //READ DATA ONE BY ONE CHARACTER
+        pc.putc(rxByte); // SEND ON TERMINAL
+        i++;  //COUNTER INCREMENT
+        
+        if(i >= BUFFER_SIZE) //IF LIMIT CROSS
+        {
+            i = 0;   //RESET COUNTER
+        }
+    }
+}
+
+void FLUSH()            //FLUSH FUNCTIONS
+{
+    RxInterrupt(); // This is because read data if something available in UART buffer
+    
+    //Counters which are related with UART reading process make it zero again
+    i = 0U;
+    bufferReadingIndex = 0U;   
+    
+}
\ No newline at end of file