
send RS485 for testing Delta Sevro
Fork of RS4851121R by
main.cpp
- Committer:
- WeberYang
- Date:
- 2018-04-17
- Branch:
- RS485_DeltaSevro
- Revision:
- 7:853fc58d8624
- Parent:
- 6:ec210c04bec9
File content as of revision 7:853fc58d8624:
//相互通信確認用 //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 #define APR 0x0066 //0066H means encoder abs rev 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; int a,b; char data[BUFFER]; char num[16]; int dataH,datanum; 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; } int str2int(const char* str, int star, int end) { int i; int ret = 0; for (i = star; i < end+1; i++) { ret = ret *10 + (str[i] - '0'); } return ret; } // functions void flushSerialBuffer() { while (rs485.readable()) { rs485.getc(); } } void readData() { while (rs485.readable()) { recChar = rs485.getc(); recArr[index] = recChar; index++; if ((recChar == '\r') || (index>18)) { datanum = str2int(recArr,1,2); if (datanum == 1) { dataH = str2int(recArr,7,10); pc.printf("M1 = %d\r\n",dataH); } else { pc.printf("M1 = no data\r\n"); } if (datanum == 2) { dataH = str2int(recArr,7,10); pc.printf("M2 = %d\r\n",dataH); } else { pc.printf("M2 = no data\r\n"); } 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; wait_ms(10); //give 10ms let receive complete. } int i; bool timeout=false; int WDindex = 0; int main() { rs485.baud(38400); pc.baud(115200); Receiver=0; rs485.attach(&readData); while(1) { recFlag = false; // setAddress(1,0x0214,0x0001); // setAddress(2,0x0214,0x0001); setAddress(1,APR,0x0001); setAddress(2,APR,0x0001); // while (recFlag == false || timeout == false) // { // if(WDindex<100) // { // WDindex++; // wait_ms(1); // } // else // { // WDindex = 0; // timeout = true; // } // } } }