Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
10 years, 3 months ago.
Serial readable() function not seeing other bytes
I am working on a simple program and done something I have done a lot of in the past, but it does not seem to be working.
Basically I am communicating with a simple serial device were I send it "0xDF" and it returns "0xDF" plus two data bytes containing the information I want to parse.
If you look at the below image you can see the "while" loop I use to collect "char" values and put them in an char array. I have tried it with a for loop as well with the same result. I also show that I am able to read the first value but when trying then next pass readable() returns 0 and it does not look for the other values. At the button is snapshot of my logic analyzer output showing 3 bytes being sent.
I am using a version of the mbed library from earlier in the year with the LPC812 MCU, which is the only thing I can think of that is odd.
1 Answer
10 years, 3 months ago.
readable() probably returns 0 the second time because you are calling it before the second byte has finished arriving. There is nothing to read at that point.
Either wait for a period before trying to read the data or use a loop like the one below.
Timer timeout; timeout.reset(); timeout.start(); char counter = 0; while ((counter < 3) && (timeout.read() < 2)) { // give the data up to 2 seconds to arrive. if (serialADC.readable()) { valueCharArray[counter] = serialADC.getc(); counter++; } }
I guess I just figured that the bytes were coming in at almost the exact same time that if I saw the first byte all should be in the buffer.
posted by 30 May 2014Each character is normally 10 bits (8 data, 1 start and 1 stop). At 115200 baud (the fastest rate that everything supports, most mbed boards will go a lot faster if needed) that works out as just under 87us per character or around 4,000 cpu clock cycles for the slower mbed parts.
Serial ports are slow.
posted by 30 May 2014