send RS485 for testing Delta Sevro

Dependencies:   mbed

Fork of RS4851121R by albatross

main.cpp

Committer:
WeberYang
Date:
2018-04-17
Branch:
RS485_DeltaSevro
Revision:
6:ec210c04bec9
Parent:
3:48b96c8c25fa
Child:
7:853fc58d8624

File content as of revision 6:ec210c04bec9:

//相互通信確認用
//modify to ASCII
#include "mbed.h"
#define BUFFER 30
#include <string> 
#include <cstdlib>

Serial rs485(PA_9,PA_10);//,115200);//(p9,p10);
Serial pc(USBTX,USBRX);
DigitalOut Receiver(D7);//(p5);

  
float cnv;
 
unsigned int CRC_Verify(unsigned char *cBuffer, unsigned int iBufLen);
void setAddress(char MotorAddress,int16_t DataAddress,int16_t Data);

#define LENG 31   //0x42 + 31 bytes equal to 32 bytes
unsigned char buffer[LENG];
//attributes - program variables
char stringOverSerialBuffer[41];    // buffer to store received string over pc
int newCommandFlag = 0;             // flag for ISR
int len;

char data[BUFFER];
char num[16];

char recChar=0;
char recArr[20];
int index=0;
int idx;
bool recFlag=false;
unsigned int CRC_Verify(unsigned char *cBuffer, unsigned int iBufLen)
{
    unsigned int i, j;
    //#define wPolynom 0xA001
    unsigned int wCrc = 0xffff;
    unsigned int wPolynom = 0xA001;
    /*---------------------------------------------------------------------------------*/
    for (i = 0; i < iBufLen; i++)
    {
        wCrc ^= cBuffer[i];
        for (j = 0; j < 8; j++)
        {
            if (wCrc &0x0001)
            {
                wCrc = (wCrc >> 1) ^ wPolynom;
            }
            else
            { 
                wCrc = wCrc >> 1;
            }
        }
    }
    return wCrc;
}
// functions
void flushSerialBuffer() { 
    while (rs485.readable()) { 
        rs485.getc(); 
    } 
}
void readData() 
{
    recChar = rs485.getc();
    recArr[index] = recChar;
    index++;
    if ((recChar == '\r') || (index>=19)) {
        
        recArr[index] = 0;
        index = 0;
        pc.printf("%s\r\n", recArr);  
        flushSerialBuffer();
        recFlag = true;
    }
}


void setAddress(char MotorAddress,int16_t DataAddress,int16_t Data)
{
    unsigned char sendData[16];
    //int DataAddress,Data;
    char DataAddressH,DataAddressL;

    int i;

    Receiver = 1;
    wait_ms(1);
    DataAddressH = ((DataAddress>>8)&0xFF);
    DataAddressL = ((DataAddress>>0)&0xFF);

    
    //sendData[0] = Header;//MotorAddress;
    sendData[0] = MotorAddress;
    sendData[1] = 0x03;
    sendData[2] = DataAddressH;
    sendData[3] = DataAddressL;
    sendData[4] = Data>>8;
    sendData[5] = (Data&0xFF);
        
    sendData[6] = sendData[0]+sendData[1]+sendData[2]+sendData[3]+sendData[4]+sendData[5];
    sendData[6] = (~sendData[6]+1);
    rs485.printf(":");
    for (i=0;i<7;i++)
    {
        rs485.printf("%02X",sendData[i]);
    }
    wait_ms(1);
    Receiver = 0;
    //RS485.attach(&onInterrupt,Serial::RxIrq);
    //===========================================
}  
int i;
int main()
{
    rs485.baud(38400);
    pc.baud(115200);

    Receiver=0;
    rs485.attach(&readData);
    while(1)
    {
        recFlag = false;
        setAddress(1,0x0214,0x0001);
        while (recFlag == false) 
        {
            wait_ms(1);
        }
    }
}