Takashi Inoue
/
Nucleo_F401RE_sio
Nucleo-F401RE Serial Send & Recieve Sample.
main.cpp
- Committer:
- InoueTakashi
- Date:
- 2016-10-12
- Revision:
- 0:ff450242c93e
File content as of revision 0:ff450242c93e:
#include "mbed.h" DigitalOut myled(LED1); Timer tmr; Serial pc(USBTX,USBRX); #define RCV_MAX 32 int idx = 0; unsigned char rcv_ary[RCV_MAX+1]; //Serial recieve callback function void callback() { rcv_ary[idx++] = pc.getc(); if( idx >= RCV_MAX ) idx = RCV_MAX - 1; } //clear recieve array void clr_rcvary() { int i; for(i=0; i<=RCV_MAX; i++) { rcv_ary[i] = '\0'; } idx = 0; } //main function int main() { int d_num = 0; bool sio_data_flg = false; clr_rcvary(); pc.attach(&callback); //set callback function myled = 0; pc.baud(115200); //baudrate=115200 pc.format(8,SerialBase::None,1); //data length=8, parity=none, stopbit=1 tmr.reset(); tmr.start(); while(1) { if ( tmr.read_ms() >= 100 ) { tmr.stop(); //every 100 ms processing if( rcv_ary[0] != '\0' ) { if( rcv_ary[0]=='B' && rcv_ary[1]=='G' && rcv_ary[2]=='N' && rcv_ary[3]=='\r') { sio_data_flg = true; pc.printf("ACK\r\n"); } else if( rcv_ary[0]=='S' && rcv_ary[1]=='T' && rcv_ary[2]=='P' && rcv_ary[3]=='\r') { sio_data_flg = false; pc.printf("ACK\r\n"); } else { pc.printf("NAK\r\n"); } clr_rcvary(); } tmr.reset(); tmr.start(); } if( sio_data_flg ) { pc.printf("D%03d\r\n", d_num++); //send data if( d_num > 999 ) d_num = 0; myled = 0; wait_ms(200); myled = 1; wait_ms(800); } else { myled = 0; wait_ms(1000); myled = 1; wait_ms(1000); } } }