han back
/
CLEO_UART_STEP
SMART CLEO Uart step
main.cpp@0:f8b276414790, 2017-09-28 (annotated)
- Committer:
- SMART_CLEO
- Date:
- Thu Sep 28 03:41:04 2017 +0000
- Revision:
- 0:f8b276414790
SMART_CLEO
Who changed what in which revision?
User | Revision | Line number | New 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 | } |