send RS485 for testing Delta Sevro

Dependencies:   mbed

Fork of RS4851121R by albatross

main.cpp

Committer:
WeberYang
Date:
2018-04-13
Branch:
RS485_DeltaSevro
Revision:
3:48b96c8c25fa
Parent:
2:bbb217e1219e
Child:
6:ec210c04bec9

File content as of revision 3:48b96c8c25fa:

//相互通信確認用
#include "mbed.h"
#define BUFFER 30

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

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 buf[LENG];
//attributes - program variables
char stringOverSerialBuffer[41];    // buffer to store received string over pc
int newCommandFlag = 0;             // flag for ISR

char data[BUFFER];
int num1,num2;
int idx;
bool flagrec = 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;
}
void pc_rx(){
    //pc.putc(rs485.getc());
    int index = 0;   
    
    Receiver = 0;
//    while(rs485.readable() || (rx != '\n')) {
//    while(flagrec) {
            num1 = rs485.readable();
        for(idx= 0; rs485.readable(); idx++)
        {
            data[idx]= rs485.getc();
            
            }
            
        data[++idx]= '\0';
        for(idx= 0; data[idx] != '\0'; idx++)
            pc.putc(data[idx]);
            flagrec = true;     
//    }
//        pc.printf("finish!");

}
void setAddress(char MotorAddress,int16_t DataAddress,int16_t Data)
{
    unsigned char sendData[8];
    int16_t tmpCRC;
    //char MotorAddress;
    char Function;
    //int DataAddress,Data;
    char DataAddressH,DataAddressL;
    char dataH,dataL;
    int i;
    sendData[6] = 0xff;
    sendData[7] = 0xff;
    
    //MotorAddress = address;
    Function = 0x06;
    //DataAddress = data;
    //Data = 0x0001;
    DataAddressH = ((DataAddress>>8)&0xFF);
    DataAddressL = ((DataAddress>>0)&0xFF);
    dataH = ((Data>>8)&0xFF);
    dataL = ((Data>>0)&0xFF);
    
    sendData[0] = 0x01;//MotorAddress;
    sendData[1] = 0x03;//Function;
    sendData[2] = 0x02;//DataAddressH;
    sendData[3] = 0;//DataAddressL;
    sendData[4] = 0;//dataH;
    sendData[5] = 2;//dataL;
    tmpCRC = CRC_Verify(sendData, 6);
    sendData[6] = (tmpCRC & 0xFF);
    sendData[7] = (tmpCRC>>8);
    Receiver = 1;
    wait_ms(1);
    for (i=0;i<8;i++)
    {
        rs485.printf("%c",sendData[i]);
    }
    wait_ms(1);
    Receiver = 0;
    //RS485.attach(&onInterrupt,Serial::RxIrq);
    //===========================================
}  
int main()
{
    rs485.baud(115200);
    pc.baud(115200);

    Receiver=0;
    rs485.attach(pc_rx, Serial::RxIrq);
    while(1)
    {
//        pc.printf("test");
        
        setAddress(1,0x0214,0x0001);
        
        
        wait_ms(1);            
        
        
        
    }
}