SMART CLEO Uart step

Committer:
SMART_CLEO
Date:
Thu Sep 28 03:41:04 2017 +0000
Revision:
0:f8b276414790
SMART_CLEO

Who changed what in which revision?

UserRevisionLine numberNew contents of line
SMART_CLEO 0:f8b276414790 1 #include "mbed.h"
SMART_CLEO 0:f8b276414790 2
SMART_CLEO 0:f8b276414790 3 struct UART_buf
SMART_CLEO 0:f8b276414790 4 {
SMART_CLEO 0:f8b276414790 5 uint8_t STA;
SMART_CLEO 0:f8b276414790 6 uint8_t MODE;
SMART_CLEO 0:f8b276414790 7 uint8_t CMD;
SMART_CLEO 0:f8b276414790 8 uint8_t LEN;
SMART_CLEO 0:f8b276414790 9 uint8_t DATA[32];
SMART_CLEO 0:f8b276414790 10 uint8_t END;
SMART_CLEO 0:f8b276414790 11 };
SMART_CLEO 0:f8b276414790 12
SMART_CLEO 0:f8b276414790 13 // 1A, 1B, 2A, 2B
SMART_CLEO 0:f8b276414790 14 PinName pin_STEP[4] = {PA_5, PA_6, PA_7, PA_8};
SMART_CLEO 0:f8b276414790 15
SMART_CLEO 0:f8b276414790 16 BusOut Step(pin_STEP[0], pin_STEP[1], pin_STEP[2], pin_STEP[3]);
SMART_CLEO 0:f8b276414790 17
SMART_CLEO 0:f8b276414790 18 uint8_t Phase_2[4] = {0x03, 0x06, 0x0C, 0x09};
SMART_CLEO 0:f8b276414790 19
SMART_CLEO 0:f8b276414790 20 Serial SerialUART(PA_2, PA_3);
SMART_CLEO 0:f8b276414790 21
SMART_CLEO 0:f8b276414790 22 UART_buf RX_BUF;
SMART_CLEO 0:f8b276414790 23
SMART_CLEO 0:f8b276414790 24 enum{STOP, CW, CCW};
SMART_CLEO 0:f8b276414790 25
SMART_CLEO 0:f8b276414790 26 void SerialUARTRX_ISR(void);
SMART_CLEO 0:f8b276414790 27
SMART_CLEO 0:f8b276414790 28 uint8_t Step_flag = STOP;
SMART_CLEO 0:f8b276414790 29
SMART_CLEO 0:f8b276414790 30 int main() {
SMART_CLEO 0:f8b276414790 31
SMART_CLEO 0:f8b276414790 32 int step_count = 0;
SMART_CLEO 0:f8b276414790 33 SerialUART.baud(115200);
SMART_CLEO 0:f8b276414790 34
SMART_CLEO 0:f8b276414790 35 SerialUART.attach(&SerialUARTRX_ISR);
SMART_CLEO 0:f8b276414790 36
SMART_CLEO 0:f8b276414790 37 while(1)
SMART_CLEO 0:f8b276414790 38 {
SMART_CLEO 0:f8b276414790 39 if(Step_flag == STOP)
SMART_CLEO 0:f8b276414790 40 {
SMART_CLEO 0:f8b276414790 41 Step = 0;
SMART_CLEO 0:f8b276414790 42 }
SMART_CLEO 0:f8b276414790 43 else if(Step_flag == CW)
SMART_CLEO 0:f8b276414790 44 {
SMART_CLEO 0:f8b276414790 45 Step = Phase_2[step_count++];
SMART_CLEO 0:f8b276414790 46
SMART_CLEO 0:f8b276414790 47 if(step_count > 3)
SMART_CLEO 0:f8b276414790 48 {
SMART_CLEO 0:f8b276414790 49 step_count = 0;
SMART_CLEO 0:f8b276414790 50 }
SMART_CLEO 0:f8b276414790 51 }
SMART_CLEO 0:f8b276414790 52 else
SMART_CLEO 0:f8b276414790 53 {
SMART_CLEO 0:f8b276414790 54 Step = Phase_2[step_count--];
SMART_CLEO 0:f8b276414790 55
SMART_CLEO 0:f8b276414790 56 if(step_count < 0)
SMART_CLEO 0:f8b276414790 57 {
SMART_CLEO 0:f8b276414790 58 step_count = 3;
SMART_CLEO 0:f8b276414790 59 }
SMART_CLEO 0:f8b276414790 60 }
SMART_CLEO 0:f8b276414790 61 wait(0.01);
SMART_CLEO 0:f8b276414790 62 }
SMART_CLEO 0:f8b276414790 63 }
SMART_CLEO 0:f8b276414790 64
SMART_CLEO 0:f8b276414790 65 void SerialUARTRX_ISR(void)
SMART_CLEO 0:f8b276414790 66 {
SMART_CLEO 0:f8b276414790 67 static uint8_t RX_count = 0, RX_Len = 32, RX_Status = 0;
SMART_CLEO 0:f8b276414790 68 uint8_t rx_da = SerialUART.getc();
SMART_CLEO 0:f8b276414790 69 switch(RX_Status)
SMART_CLEO 0:f8b276414790 70 {
SMART_CLEO 0:f8b276414790 71 case 0:
SMART_CLEO 0:f8b276414790 72 if(rx_da == 0x76)
SMART_CLEO 0:f8b276414790 73 {
SMART_CLEO 0:f8b276414790 74 RX_BUF.STA = rx_da;
SMART_CLEO 0:f8b276414790 75 RX_Status++;
SMART_CLEO 0:f8b276414790 76 }
SMART_CLEO 0:f8b276414790 77 break;
SMART_CLEO 0:f8b276414790 78 case 1:
SMART_CLEO 0:f8b276414790 79 RX_BUF.MODE = rx_da;
SMART_CLEO 0:f8b276414790 80 RX_Status++;
SMART_CLEO 0:f8b276414790 81 break;
SMART_CLEO 0:f8b276414790 82 case 2:
SMART_CLEO 0:f8b276414790 83 RX_BUF.CMD = rx_da;
SMART_CLEO 0:f8b276414790 84 RX_Status++;
SMART_CLEO 0:f8b276414790 85 break;
SMART_CLEO 0:f8b276414790 86 case 3:
SMART_CLEO 0:f8b276414790 87 RX_BUF.LEN = rx_da;
SMART_CLEO 0:f8b276414790 88 RX_Len = RX_BUF.LEN;
SMART_CLEO 0:f8b276414790 89 RX_Status++;
SMART_CLEO 0:f8b276414790 90 if(RX_Len == 0)
SMART_CLEO 0:f8b276414790 91 RX_Status++;
SMART_CLEO 0:f8b276414790 92 break;
SMART_CLEO 0:f8b276414790 93 case 4:
SMART_CLEO 0:f8b276414790 94 RX_BUF.DATA[RX_count] = rx_da;
SMART_CLEO 0:f8b276414790 95 RX_count++;
SMART_CLEO 0:f8b276414790 96 if(RX_count == RX_Len)
SMART_CLEO 0:f8b276414790 97 {
SMART_CLEO 0:f8b276414790 98 RX_Status++;
SMART_CLEO 0:f8b276414790 99 RX_count = 0;
SMART_CLEO 0:f8b276414790 100 RX_Len = 32;
SMART_CLEO 0:f8b276414790 101 }
SMART_CLEO 0:f8b276414790 102 break;
SMART_CLEO 0:f8b276414790 103 case 5:
SMART_CLEO 0:f8b276414790 104 if(rx_da == 0x3E)
SMART_CLEO 0:f8b276414790 105 {
SMART_CLEO 0:f8b276414790 106 RX_BUF.END = rx_da;
SMART_CLEO 0:f8b276414790 107 RX_Status = 0;
SMART_CLEO 0:f8b276414790 108 switch(RX_BUF.MODE)
SMART_CLEO 0:f8b276414790 109 {
SMART_CLEO 0:f8b276414790 110 case 0x01:
SMART_CLEO 0:f8b276414790 111 if(RX_BUF.CMD == 0x14)
SMART_CLEO 0:f8b276414790 112 {
SMART_CLEO 0:f8b276414790 113 Step_flag = RX_BUF.DATA[0];
SMART_CLEO 0:f8b276414790 114 }
SMART_CLEO 0:f8b276414790 115 break;
SMART_CLEO 0:f8b276414790 116 }
SMART_CLEO 0:f8b276414790 117 }
SMART_CLEO 0:f8b276414790 118 break;
SMART_CLEO 0:f8b276414790 119 }
SMART_CLEO 0:f8b276414790 120 }