Nucleo-F401RE Serial Send & Recieve Sample.

Dependencies:   mbed

Committer:
InoueTakashi
Date:
Wed Oct 12 07:14:00 2016 +0000
Revision:
0:ff450242c93e
Nucleo-F401RE Serial Send & Recieve Sample.Ver1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
InoueTakashi 0:ff450242c93e 1 #include "mbed.h"
InoueTakashi 0:ff450242c93e 2
InoueTakashi 0:ff450242c93e 3 DigitalOut myled(LED1);
InoueTakashi 0:ff450242c93e 4 Timer tmr;
InoueTakashi 0:ff450242c93e 5 Serial pc(USBTX,USBRX);
InoueTakashi 0:ff450242c93e 6
InoueTakashi 0:ff450242c93e 7 #define RCV_MAX 32
InoueTakashi 0:ff450242c93e 8
InoueTakashi 0:ff450242c93e 9 int idx = 0;
InoueTakashi 0:ff450242c93e 10 unsigned char rcv_ary[RCV_MAX+1];
InoueTakashi 0:ff450242c93e 11
InoueTakashi 0:ff450242c93e 12 //Serial recieve callback function
InoueTakashi 0:ff450242c93e 13 void callback() {
InoueTakashi 0:ff450242c93e 14 rcv_ary[idx++] = pc.getc();
InoueTakashi 0:ff450242c93e 15 if( idx >= RCV_MAX ) idx = RCV_MAX - 1;
InoueTakashi 0:ff450242c93e 16 }
InoueTakashi 0:ff450242c93e 17
InoueTakashi 0:ff450242c93e 18 //clear recieve array
InoueTakashi 0:ff450242c93e 19 void clr_rcvary()
InoueTakashi 0:ff450242c93e 20 {
InoueTakashi 0:ff450242c93e 21 int i;
InoueTakashi 0:ff450242c93e 22 for(i=0; i<=RCV_MAX; i++) {
InoueTakashi 0:ff450242c93e 23 rcv_ary[i] = '\0';
InoueTakashi 0:ff450242c93e 24 }
InoueTakashi 0:ff450242c93e 25 idx = 0;
InoueTakashi 0:ff450242c93e 26 }
InoueTakashi 0:ff450242c93e 27
InoueTakashi 0:ff450242c93e 28 //main function
InoueTakashi 0:ff450242c93e 29 int main() {
InoueTakashi 0:ff450242c93e 30
InoueTakashi 0:ff450242c93e 31 int d_num = 0;
InoueTakashi 0:ff450242c93e 32 bool sio_data_flg = false;
InoueTakashi 0:ff450242c93e 33
InoueTakashi 0:ff450242c93e 34 clr_rcvary();
InoueTakashi 0:ff450242c93e 35
InoueTakashi 0:ff450242c93e 36 pc.attach(&callback); //set callback function
InoueTakashi 0:ff450242c93e 37
InoueTakashi 0:ff450242c93e 38 myled = 0;
InoueTakashi 0:ff450242c93e 39
InoueTakashi 0:ff450242c93e 40 pc.baud(115200); //baudrate=115200
InoueTakashi 0:ff450242c93e 41 pc.format(8,SerialBase::None,1); //data length=8, parity=none, stopbit=1
InoueTakashi 0:ff450242c93e 42
InoueTakashi 0:ff450242c93e 43
InoueTakashi 0:ff450242c93e 44 tmr.reset();
InoueTakashi 0:ff450242c93e 45 tmr.start();
InoueTakashi 0:ff450242c93e 46
InoueTakashi 0:ff450242c93e 47 while(1) {
InoueTakashi 0:ff450242c93e 48 if ( tmr.read_ms() >= 100 ) {
InoueTakashi 0:ff450242c93e 49 tmr.stop();
InoueTakashi 0:ff450242c93e 50
InoueTakashi 0:ff450242c93e 51 //every 100 ms processing
InoueTakashi 0:ff450242c93e 52 if( rcv_ary[0] != '\0' ) {
InoueTakashi 0:ff450242c93e 53 if( rcv_ary[0]=='B' && rcv_ary[1]=='G' && rcv_ary[2]=='N' && rcv_ary[3]=='\r') {
InoueTakashi 0:ff450242c93e 54 sio_data_flg = true;
InoueTakashi 0:ff450242c93e 55 pc.printf("ACK\r\n");
InoueTakashi 0:ff450242c93e 56 }
InoueTakashi 0:ff450242c93e 57 else if( rcv_ary[0]=='S' && rcv_ary[1]=='T' && rcv_ary[2]=='P' && rcv_ary[3]=='\r') {
InoueTakashi 0:ff450242c93e 58 sio_data_flg = false;
InoueTakashi 0:ff450242c93e 59 pc.printf("ACK\r\n");
InoueTakashi 0:ff450242c93e 60 }
InoueTakashi 0:ff450242c93e 61 else {
InoueTakashi 0:ff450242c93e 62 pc.printf("NAK\r\n");
InoueTakashi 0:ff450242c93e 63 }
InoueTakashi 0:ff450242c93e 64 clr_rcvary();
InoueTakashi 0:ff450242c93e 65 }
InoueTakashi 0:ff450242c93e 66
InoueTakashi 0:ff450242c93e 67 tmr.reset();
InoueTakashi 0:ff450242c93e 68 tmr.start();
InoueTakashi 0:ff450242c93e 69 }
InoueTakashi 0:ff450242c93e 70
InoueTakashi 0:ff450242c93e 71 if( sio_data_flg ) {
InoueTakashi 0:ff450242c93e 72 pc.printf("D%03d\r\n", d_num++); //send data
InoueTakashi 0:ff450242c93e 73 if( d_num > 999 ) d_num = 0;
InoueTakashi 0:ff450242c93e 74 myled = 0;
InoueTakashi 0:ff450242c93e 75 wait_ms(200);
InoueTakashi 0:ff450242c93e 76 myled = 1;
InoueTakashi 0:ff450242c93e 77 wait_ms(800);
InoueTakashi 0:ff450242c93e 78 }
InoueTakashi 0:ff450242c93e 79 else {
InoueTakashi 0:ff450242c93e 80 myled = 0;
InoueTakashi 0:ff450242c93e 81 wait_ms(1000);
InoueTakashi 0:ff450242c93e 82 myled = 1;
InoueTakashi 0:ff450242c93e 83 wait_ms(1000);
InoueTakashi 0:ff450242c93e 84 }
InoueTakashi 0:ff450242c93e 85
InoueTakashi 0:ff450242c93e 86 }
InoueTakashi 0:ff450242c93e 87 }