Takashi Inoue
/
Nucleo_F401RE_sio
Nucleo-F401RE Serial Send & Recieve Sample.
main.cpp@0:ff450242c93e, 2016-10-12 (annotated)
- 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?
User | Revision | Line number | New 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 | } |