1.简介
vofa+是一款能很强上位机功,具有常规串口助手显示串口收发数据的作用,还可以进行一些串口数据可视化操作。
2.协议简介
其中有三种常见串口协议FireWater,JustFloat,RawData。
2.1FireWater协议
FireWater是一种非常简单的与vofa+上位机的通讯协议。
简介见下图。
参考C语言发送代码如下:
printf("%d,%d,%d,%d\r\n",data1,data2,data3);//将data1,data2,data3换成相应想要看到的数据即可
一般单片机向串口发送数据就要在后面加上\r\n,因为有些上位机或者平台只认为\r\n才是换行,单纯的\n不一定会让数据换行,所以为了多平台共用,尽量使用\r\n。
/*
在微软的MS-DOS和Windows中,使用“回车CR('r')”和“换行LF('n')”两个字符作为换行符;
Windows系统里面,每行结尾是 回车+换行(CR+LF),即“rn”;
Unix系统里,每行结尾只有 换行CR,即“n”;
Mac系统里,每行结尾是 回车CR 即'r';
所以我们平时编写文件的回车符应该确切来说叫做回车换行符;
*/
该种通信协议在数据量比较大时,发送数据较多时,会产生错位,接收失败,所以在数据量较大,或者发送频率较高时,不建议使用。
2.2JustFloat
该协议简介见下图:
参考c语言发送代码如下:
/*-------------------------------------------------------------------------------------------------------------------
@brief 利用Vofa发数据
@param data1,data2,data3,data4,data5,data6,要发的数据放进入参即可
@return null
Sample Vofa_data(Err,Steer_Angle,set_speed_right,right_wheel,set_speed_left,left_wheel);
@note 如果不够用,继续往后加入参即可,继续加参数参考原则见下注释
-------------------------------------------------------------------------------------------------------------------*/
void Vofa_data(int data1,int data2,int data3,int data4,int data5,int data6)
{
int data[6];
float tempFloat[6]; //定义的临时变量
uint8 tempData[28]; //定义的传输Buffer,一个int占4个字节,如果传6个,4*6=24,后面还有四个校验位,24+4=28
data[0] = data1;
data[1] = data2;
data[2] = data3;
data[3] = data4;
data[4] = data5;
data[5] = data6;
tempFloat[0] = (float)data[0]; //转成浮点数
tempFloat[1] = (float)data[1];
tempFloat[2] = (float)data[2];
tempFloat[3] = (float)data[3];
tempFloat[4] = (float)data[4];
tempFloat[5] = (float)data[5];
memcpy(tempData, (uint8 *)tempFloat, sizeof(tempFloat)); //通过拷贝把数据重新整理
tempData[24] = 0x00;//写入结尾数据
tempData[25] = 0x00;
tempData[26] = 0x80;
tempData[27] = 0x7f;
uart_putbuff(UART_0, tempData, 28);//通过串口传输数据,前面开多大的数组,后面占多大长度
}
需要注意的是,uart_putbuff(UART_0, tempData, 28);这个函数不同平台函数有所不同,需要根据平台修改,其他内容,根据自己所发送的数据决定。
实测图如下,在调节PID等控制算法时,即使数据量大,速度快仍然保持了较高的准确性。
比较推荐使用。
2.3RawData
仅作为常规串口,没有什么特殊的功能。
发送代码和第一种一样。
printf("%d,%d,%d,%d\r\n",data1,data2,data3);//将data1,data2,data3换成相应想要看到的数据即可
就作为普通串口查看发送的数据而已。
3.总结
作为一款上位机,vofa+功能强大,本文简单讲解了三种传输协议,在低速少量数据情况时,可以使用FireWater协议,在高速大量数据情况建议使用JustFloat协议,相关协议C语言参考代码在文中有所提及。