send RS485 for testing Delta Sevro
Fork of RS4851121R by
Revision 6:ec210c04bec9, committed 2018-04-17
- Comitter:
- WeberYang
- Date:
- Tue Apr 17 03:35:44 2018 +0000
- Branch:
- RS485_DeltaSevro
- Parent:
- 3:48b96c8c25fa
- Child:
- 7:853fc58d8624
- Commit message:
- RS485 communication, using RS485 tx/rx and print through pc.printf
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Fri Apr 13 06:55:06 2018 +0000
+++ b/main.cpp Tue Apr 17 03:35:44 2018 +0000
@@ -1,25 +1,35 @@
//相互通信確認用
+//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 buf[LENG];
+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];
-int num1,num2;
+char num[16];
+
+char recChar=0;
+char recArr[20];
+int index=0;
int idx;
-bool flagrec = false;
-
+bool recFlag=false;
unsigned int CRC_Verify(unsigned char *cBuffer, unsigned int iBufLen)
{
unsigned int i, j;
@@ -44,87 +54,77 @@
}
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!");
+// 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[8];
- int16_t tmpCRC;
- //char MotorAddress;
- char Function;
+ unsigned char sendData[16];
//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;
+
+ Receiver = 1;
+ wait_ms(1);
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++)
+ //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("%c",sendData[i]);
+ rs485.printf("%02X",sendData[i]);
}
wait_ms(1);
Receiver = 0;
//RS485.attach(&onInterrupt,Serial::RxIrq);
//===========================================
}
+int i;
int main()
{
- rs485.baud(115200);
+ rs485.baud(38400);
pc.baud(115200);
Receiver=0;
- rs485.attach(pc_rx, Serial::RxIrq);
+ rs485.attach(&readData);
while(1)
{
-// pc.printf("test");
-
+ recFlag = false;
setAddress(1,0x0214,0x0001);
-
-
- wait_ms(1);
-
-
-
+ while (recFlag == false)
+ {
+ wait_ms(1);
+ }
}
}
\ No newline at end of file
