Arduino_STM32/examples/Maple/StressSerialUSB/StressSerialUSB.ino

147 lines
4.6 KiB
C++

/*
Serial Stress Test
Connect via Serial2 (header pins D0 and D1 on the Maple) for the back channel;
otherwise just connect with Serial and press BUT to cycle through (hold
it for at least a second).
The output will be pretty cryptic; see inline comments for more info.
Note that the ONOFF test will result in a hard disconnect which crashes some
serial port monitors and will require reopening that port after 5-10 seconds.
Created 20 July 2010
By Bryan Newbold for LeafLabs
This code is released with no strings attached.
*/
#define LED_PIN 13
#define BUT_PIN 38
uint32 state = 0;
#define QUICKPRINT 0
#define BIGSTUFF 1
#define NUMBERS 2
#define SIMPLE 3
#define ONOFF 4
void setup()
{
Serial.begin(115200); // Ignored by Maple. But needed by boards using hardware serial via a USB to Serial adaptor
// Set up the LED to blink
pinMode(LED_PIN, OUTPUT);
// Set up the Button
pinMode(BUT_PIN, INPUT_PULLUP);
// Setup the back channel
Serial2.begin(9600);
Serial2.println("Hello world! This is the debug channel.");
}
int toggle = 0;
void loop() {
toggle ^= 1;
digitalWrite(LED_PIN, toggle);
delay(300);
// If the button is pressed go to the next state
if(digitalRead(BUT_PIN)) {
while(digitalRead(BUT_PIN)) {};
state++;
}
switch(state) {
// sends more than a buffer worth of characters indefinately.
// this pattern makes it easy to see dropped bytes.
case QUICKPRINT:
for(int i = 0; i<40; i++) {
Serial.print('.');
Serial.print('|');
}
Serial2.println(Serial.pending(),DEC);
Serial.println();
break;
// Send large/log stuff
case BIGSTUFF:
Serial.println("01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
Serial.println((uint32)123456789,DEC);
Serial.println(3.1415926535);
Serial2.println(Serial.pending(),DEC);
break;
// Try a bunch of different types and formats
case NUMBERS:
Serial.println("Numbers! -----------------------------");
Serial2.println("Numbers! -----------------------------");
Serial.println('1');
Serial2.println('1');
Serial.println(1,DEC);
Serial2.println(1,DEC);
Serial.println(-1,DEC);
Serial2.println(-1,DEC);
Serial.println(3.14159265);
Serial2.println(3.14159265);
Serial.println(3.14159265,9);
Serial2.println(3.14159265,9);
Serial.println(123456789,DEC);
Serial2.println(123456789,DEC);
Serial.println(-123456789,DEC);
Serial2.println(-123456789,DEC);
Serial.println(65535,HEX);
Serial2.println(65535,HEX);
Serial.println(65535,OCT);
Serial2.println(65535,OCT);
Serial.println(65535,BIN);
Serial2.println(65535,BIN);
break;
// Very basic prints
case SIMPLE:
Serial2.println("Trying write('a')");
Serial.write('a');
Serial2.println("Trying write(\"b\")");
Serial.write("b");
Serial2.println("Trying print('c')");
Serial.print('c');
Serial2.println("Trying print(\"d\")");
Serial.print("d");
Serial2.println("Trying print(\"efg\")");
Serial.print("efg");
Serial2.println("Trying println(\"hij\\n\\r\")");
Serial.print("hij\n\r");
Serial.write(' ');
Serial.println();
Serial2.println("Trying println(123456789,DEC)");
Serial.println(123456789,DEC);
Serial2.println("Trying println(3.141592)");
Serial.println(3.141592);
Serial2.println("Trying println(\"DONE\")");
Serial.println("DONE");
break;
// Disables the USB peripheral, then brings it back up a
// few seconds later
case ONOFF:
Serial2.println("Shutting down...");
Serial.println("Shutting down...");
Serial.end();
Serial2.println("Waiting 4seconds...");
delay(4000);
Serial2.println("Starting up...");
Serial.begin();
Serial.println("Hello World!");
Serial2.println("Waiting 4seconds...");
delay(4000);
state++;
break;
default:
state = 0;
}
}