这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【转载】基于STM32以及CUBEMX的项目分享----from三叶

共1条 1/1 1 跳转至

【转载】基于STM32以及CUBEMX的项目分享----from三叶

工程师
2023-10-18 09:55:54     打赏

本来这期打算给大家分享PID怎么用的,但是我想到一个问题,我们说PID小车的效果怎么样,咱们不能仅仅通眼睛去看吧,因此我们需要一个上位机,这里我推荐一个上位机叫做VOFA+,我看很少有人去讲这个上位机,那今天我来讲讲吧,我也在这个论坛学习了很长时间了,现在也给这个论坛做点贡献,那么我宣布本期的分享内容就是基于STM32以及CUBEMX的VOFA+上位机曲线绘制教学,下面我们开始吧。
第一步、我们要有上位机:

在此我附上这个上位机官网的链接:百度vofa,去官网下载就可以了,当然我也会在文末给出一个安装包。

第二步、我们要配置这个上位机软件  按照串口配置进行参照就可以了,我们选用的是JUSTFLOAT这个协议,但是很多人更喜欢其他的协议,因为其他的协议不需要写特定的代码比较方便,但是JUSTFLOAT这个协议适合高频的数据发送。

第三步、相关通信协议

//这个就是将浮点数转换成4个字节的代码,具体怎么实现大家还自行研究,我也没深刻研究。

  1. /**************************************************************************

  2. *功  能: 将浮点数转换成四个单字节数值

  3. *输  入: f:浮点数 byte储存空间(4个字节)

  4. *返回值: none

  5. **************************************************************************/

  6. //VOFA通讯协议

  7. void Float_to_Byte(float f,uint8_t byte[])   //参考[url]https://blog.csdn.net/ls667/article/details/50811519[/url]博客

  8. {

  9. FloatLongType fl;

  10. fl.fdata=f;

  11. byte[0]=(unsigned char)fl.ldata;

  12. byte[1]=(unsigned char)(fl.ldata>>8);

  13. byte[2]=(unsigned char)(fl.ldata>>16);

  14. byte[3]=(unsigned char)(fl.ldata>>24);

  15. }

复制代码

  1. typedef union   //定义结构

  2. {

  3. float fdata;

  4. unsigned long ldata;

  5. }FloatLongType;

复制代码

第四步、单片机通信协议

以下是这个协议的规则,我们需要严格执行。

因此我们定义一个数组进行存放帧尾

  1. 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 帧尾这样即可

来源:网络版权归原作者所有,如有侵权,请联系删除。



共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]