硬汉嵌入式论坛

 找回密码
 立即注册
查看: 7958|回复: 8
收起左侧

[串口助手] VOFA+ 通信协议支持框架

  [复制链接]

4

主题

22

回帖

34

积分

新手上路

大帅哥

积分
34
发表于 2021-3-26 14:50:57 | 显示全部楼层 |阅读模式
本帖最后由 Jelin 于 2021-3-26 15:01 编辑

本框架是VOFA+串口调试软件的通信协议驱动,支持三种默认的通信协议:FireWater, JustFloat 以及 RawData




image-20210326100636-kfwonpn.png

VOFA+ 介绍
Vofa+ 是一个可扩展,高颜值的串口调试软件,除了基本的串口调试的功能,还支持TCP/IP通信、数据可视化、数据分析等高级功能,可以大大方便我们日常的开发调试和提高效率。
关于VOFA的更多信息请访问:
VOFA+ 的三种通信协议
RawData: 最基本的通信协议,接收到什么,便打印什么,不做数据的解析处理,仅用于查看字节流数据。
JustFloat: 本协议是小端浮点数组形式的字节流协议,纯十六进制浮点传输,节省带宽。此协议非常适合用在通道数量多、发送频率高的时候。
FireWater: 本协议是CSV风格的字符串流,直观简洁,编程像printf简单。但由于字符串解析消耗更多的运算资源(无论在上位机还是下位机),建议仅在通道数量不多、发送频率不高的时候使用。



VOFA+ 通信协议框架的使用
该框架理论上支持任何平台,作用与硬件之上,用户需要在框架的外部初始化和配置相关通信接口。

1. 通信接口
  1. void Vofa_SendDataCallBack(Vofa_HandleTypedef* handle,uint8_t* data,uint16_t length);
  2. uint8_t Vofa_GetDataCallBack(Vofa_HandleTypedef* handle);
复制代码


上面两个函数与硬件相关,用户必须根据通信硬件重写上述接口,例如在GD32中的串口:

  1. void Vofa_SendDataCallBack(Vofa_HandleTypedef* handle,uint8_t* data,uint16_t length)
  2. {
  3.    uint16_t i;
  4.    for(i = 0;i<length;i++)
  5.    {
  6.         usart_data_transmit(USART1,data[i]);
  7.         while(RESET == usart_flag_get(USART1,USART_FLAG_TBE));
  8.    }
  9. }

  10. uint8_t Vofa_GetDataCallBack(Vofa_HandleTypedef* handle)
  11. {
  12.     return usart_data_receive(USART1);
  13. }
复制代码

2. 数据类型
Vofa_FIFOTypeDef: 用于存储接收到的数据
  • buffer : 内存空间
  • rp: 读指针
  • wp: 写指针
  1. typedef struct
  2. {
  3.     uint8_t buffer[VOFA_BUFFER_SIZE];                        //Data buffer
  4.     uint8_t* rp;                                                //Read data buffer pointer
  5.     uint8_t* wp;                                                //Write data buffer pointer
  6.     bool overflow;                                                //FIFO overflow sign bit
  7. }Vofa_FIFOTypeDef;
复制代码


Vofa_ModeTypeDef: FIFO的工作模式
  • VOFA_MODE_SKIP :当FIFO溢出时不发生阻塞,覆盖数据。
  • VOFA_MODE_BLOCK_IF_FIFO_FULL: 当FIFO溢出时发生阻塞,等待数据被读取释放FIFO缓存。

  1. typedef enum
  2. {
  3.      VOFA_MODE_SKIP,                                 // Do not block
  4.      VOFA_MODE_BLOCK_IF_FIFO_FULL         // Wait until there is space in the buffer.
  5. }Vofa_ModeTypeDef;
复制代码


Vofa_HandleTypedef: VOFA+ 通信协议框架抽象模型的句柄
  • txBuffer : 传送数据时用到的缓存空间
  • rxBuffer: 读取数据时用到的FIFO缓存空间
  • mode: FIFO工作模式

  1. typedef struct
  2. {
  3.     uint8_t txBuffer[VOFA_BUFFER_SIZE];
  4.     Vofa_FIFOTypeDef rxBuffer;
  5.     Vofa_ModeTypeDef mode;
  6. }Vofa_HandleTypedef;
复制代码



3. 宏
该框架存在两个宏,需要用户进行配置:
  • VOFA_BUFFER_SIZE:缓存大小,接收FIFO缓存大小和发送缓存大小都通过该宏配置。
  • VOFA_CMD_TAIL:命令的帧尾,例如: {0xAF,0xFA}

4. 函数
  1. void Vofa_Init(Vofa_HandleTypedef* handle,Vofa_ModeTypeDef mode);

  2. /* send data functions */
  3. void Vofa_SendData(Vofa_HandleTypedef* handle,uint8_t* data,uint16_t num);
  4. void Vofa_JustFloat(Vofa_HandleTypedef* handle,float* data,uint16_t num);
  5. void Vofa_Printf(Vofa_HandleTypedef* handle,const char* format,...);

  6. /* receive data functions */
  7. void Vofa_ReceiveData(Vofa_HandleTypedef* handle);
  8. uint16_t Vofa_ReadCmd(Vofa_HandleTypedef* handle,uint8_t* buffer,uint16_t bufferLen);
  9. uint16_t Vofa_ReadLine(Vofa_HandleTypedef* handle,uint8_t* buffer,uint16_t bufferLen);
  10. uint16_t Vofa_ReadData(Vofa_HandleTypedef* handle,uint8_t* buffer,uint16_t bufferLen);
复制代码

  • Vofa_Init:初始化一个Vofa通信协议框架抽象模型
  • Vofa_SendData:发送字节流到VOFA+,num是发送字节数量。
  • Vofa_JustFloat: 根据JustFloat协议发送一些浮点数到VOFA,num是浮点数的数量。
  • Vofa_Printf:类似printf函数,发送格式字符串到VOFA,可用于匹配FireWater协议。
  • Vofa_ReceiveData:接收一个字节到FIFO,典型应用在串口接收中断中。
  • Vofa_ReadCmd:从FIFO中读取一个命令,该命令的帧尾通过宏VOFA_CMD_TAIL来配置,buffer是接收命令字节的外部缓存空间,bufferLen是该缓存空间的大小,返回读取到的字节数。
  • Vofa_ReadLine:从FIFO中读取一行字符串,其他参数同上。
  • Vofa_ReadData: 从FIFO中读取数据,如果FIFO数据长度小于bufferLen,则读取全部的数据。

5. Demo

6.CMSIS Package
可下载安装本项目的Release:Freedom.VofaPlus.x.x.x.pack
在Keil的包管理器中勾选VOFA即可快速使用。
image-20210326111354-0y4h178.png


VOFA_Potocol_Driver.zip (5.12 KB, 下载次数: 56)




回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106746
QQ
发表于 2021-3-26 15:34:49 | 显示全部楼层
谢谢楼主分享。
回复

使用道具 举报

3

主题

110

回帖

119

积分

初级会员

积分
119
发表于 2021-3-27 11:26:01 | 显示全部楼层
前几天在B站看到了,没想到这么快就有人搞来玩了。
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2021-3-27 13:21:31 | 显示全部楼层
顶,可以随时使用就很方便了,自己之前也有写,但是一直都没整理,这个看起来很不错
回复

使用道具 举报

73

主题

1193

回帖

1412

积分

至尊会员

积分
1412
发表于 2021-3-27 14:52:31 | 显示全部楼层
谢谢分享~~~老朋友
回复

使用道具 举报

0

主题

7

回帖

7

积分

新手上路

积分
7
发表于 2021-5-13 20:45:15 | 显示全部楼层
这个软件很强,感谢分享
回复

使用道具 举报

13

主题

192

回帖

231

积分

高级会员

积分
231
发表于 2021-5-14 09:14:46 | 显示全部楼层
软件是挺强的,但是稳定性还是不行。我用了几天,现在已经收不到串口数据了,不知道为啥。。
回复

使用道具 举报

73

主题

1193

回帖

1412

积分

至尊会员

积分
1412
发表于 2021-5-14 12:14:06 | 显示全部楼层
外撒这么厉害,直接有插件
回复

使用道具 举报

0

主题

16

回帖

16

积分

新手上路

积分
16
发表于 2022-6-7 10:03:22 | 显示全部楼层
收费贵不贵
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-3 17:06 , Processed in 0.200537 second(s), 31 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表