本来这期打算给大家分享PID怎么用的,但是我想到一个问题,我们说PID小车的效果怎么样,咱们不能仅仅通眼睛去看吧,因此我们需要一个上位机,这里我推荐一个上位机叫做VOFA+,我看很少有人去讲这个上位机,那今天我来讲讲吧,我也在这个论坛学习了很长时间了,现在也给这个论坛做点贡献,那么我宣布本期的分享内容就是基于STM32以及CUBEMX的VOFA+上位机曲线绘制教学,下面我们开始吧。
第一步、我们要有上位机:
在此我附上这个上位机官网的链接:百度vofa,去官网下载就可以了,当然我也会在文末给出一个安装包。
第二步、我们要配置这个上位机软件 按照串口配置进行参照就可以了,我们选用的是JUSTFLOAT这个协议,但是很多人更喜欢其他的协议,因为其他的协议不需要写特定的代码比较方便,但是JUSTFLOAT这个协议适合高频的数据发送。
第三步、相关通信协议
//这个就是将浮点数转换成4个字节的代码,具体怎么实现大家还自行研究,我也没深刻研究。
/**************************************************************************
*功 能: 将浮点数转换成四个单字节数值
*输 入: f:浮点数 byte储存空间(4个字节)
*返回值: none
**************************************************************************/
//VOFA通讯协议
void Float_to_Byte(float f,uint8_t byte[]) //参考[url]https://blog.csdn.net/ls667/article/details/50811519[/url]博客
{
FloatLongType fl;
fl.fdata=f;
byte[0]=(unsigned char)fl.ldata;
byte[1]=(unsigned char)(fl.ldata>>8);
byte[2]=(unsigned char)(fl.ldata>>16);
byte[3]=(unsigned char)(fl.ldata>>24);
}
typedef union //定义结构
{
float fdata;
unsigned long ldata;
}FloatLongType;
第四步、单片机通信协议
以下是这个协议的规则,我们需要严格执行。
因此我们定义一个数组进行存放帧尾 uint8_t Send_tail[4]={0x00, 0x00, 0x80, 0x7f};//帧尾
复制代码
JustrFloat以小端的0x7f80000,也就是{ 0x00, 0x00, 0x80, 0x7f }作为帧结束标志,所以遇到{ 0x00, 0x00, 0x80, 0x7f }才会开启一帧的解析,判断它是采样数据帧、图片前导帧还是其他数据;没有开启数据解析,就不会打印文本;
图片前导帧加上后续图片数据,被并称为图片数据包,图片数据会缩略打印;
点击字节接收区设置按钮,可以设置是否单独隐藏样数据帧、图片数据包,也可以设置隐藏包括其他数据在内的所有数据;
字节接收区请勾选十六进制,以十六进制方式打印字符,否则只能打印乱码;
如果你发送的数据一直没有{ 0x00, 0x00, 0x80, 0x7f },那么JustFloat无法解析消耗缓冲区内的数据,会造成缓冲区爆满,软件卡死;
那么我们绘制曲线的方法是什么思路呢?
--->data1 data2 .... datan 帧尾 data1 data2 .... datan 帧尾 data1 data2 .... datan 帧尾 data1 data2 .... datan 帧尾这样即可
来源:网络版权归原作者所有,如有侵权,请联系删除。