
send RS485 for testing Delta Sevro
Fork of RS4851121R by
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); } }