【串口调试助手】VOFA+ 通信协议支持框架

Github: VOFA-Protocol-Driver

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


VOFA+

在这里插入图片描述

VOFA+ 介绍

Vofa+ 是一个可扩展,高颜值的串口调试软件,除了基本的串口调试的功能,还支持TCP/IP通信、数据可视化、数据分析等高级功能,可以大大方便我们日常的开发调试和提高效率。

关于VOFA的更多信息请访问:

VOFA+ 的三种通信协议

RawData: 最基本的通信协议,接收到什么,便打印什么,不做数据的解析处理,仅用于查看字节流数据。

JustFloat: 本协议是小端浮点数组形式的字节流协议,纯十六进制浮点传输,节省带宽。此协议非常适合用在通道数量多、发送频率高的时候。

FireWater: 本协议是CSV风格的字符串流,直观简洁,编程像printf简单。但由于字符串解析消耗更多的运算资源(无论在上位机还是下位机),建议仅在通道数量不多、发送频率不高的时候使用。


VOFA+ 通信协议框架的使用

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

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

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

void Vofa_SendDataCallBack(Vofa_HandleTypedef* handle,uint8_t* data,uint16_t length)
{
	uint16_t i;
	for(i = 0;i<length;i++)
	{
		usart_data_transmit(USART1,data[i]);
		while(RESET == usart_flag_get(USART1,USART_FLAG_TBE));
	}
}

uint8_t Vofa_GetDataCallBack(Vofa_HandleTypedef* handle)
{
	return usart_data_receive(USART1);
}
2. 数据类型

Vofa_FIFOTypeDef: 用于存储接收到的数据

  • buffer : 内存空间
  • rp: 读指针
  • wp: 写指针
typedef struct
{
	uint8_t buffer[VOFA_BUFFER_SIZE];			//Data buffer
	uint8_t* rp;						//Read data buffer pointer
	uint8_t* wp;						//Write data buffer pointer
	bool overflow;						//FIFO overflow sign bit
}Vofa_FIFOTypeDef;

Vofa_ModeTypeDef: FIFO的工作模式

  • VOFA_MODE_SKIP :当FIFO溢出时不发生阻塞,覆盖数据。
  • VOFA_MODE_BLOCK_IF_FIFO_FULL: 当FIFO溢出时发生阻塞,等待数据被读取释放FIFO缓存。
typedef enum
{
	VOFA_MODE_SKIP, 				// Do not block
	VOFA_MODE_BLOCK_IF_FIFO_FULL 	// Wait until there is space in the buffer.
}Vofa_ModeTypeDef;

Vofa_HandleTypedef: VOFA+ 通信协议框架抽象模型的句柄

  • txBuffer : 传送数据时用到的缓存空间
  • rxBuffer: 读取数据时用到的FIFO缓存空间
  • mode: FIFO工作模式
typedef struct
{
	uint8_t txBuffer[VOFA_BUFFER_SIZE];
	Vofa_FIFOTypeDef rxBuffer;
	Vofa_ModeTypeDef mode;
}Vofa_HandleTypedef;
3. 宏

该框架存在两个宏,需要用户进行配置:

  • VOFA_BUFFER_SIZE:缓存大小,接收FIFO缓存大小和发送缓存大小都通过该宏配置。
  • VOFA_CMD_TAIL:命令的帧尾,例如: {0xAF,0xFA}
4. 函数
void Vofa_Init(Vofa_HandleTypedef* handle,Vofa_ModeTypeDef mode);

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

/* receive data functions */
void Vofa_ReceiveData(Vofa_HandleTypedef* handle);
uint16_t Vofa_ReadCmd(Vofa_HandleTypedef* handle,uint8_t* buffer,uint16_t bufferLen);
uint16_t Vofa_ReadLine(Vofa_HandleTypedef* handle,uint8_t* buffer,uint16_t bufferLen);
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

详见Demo/GD32F303RC

6.CMSIS Package

可下载安装本项目的Release:Freedom.VofaPlus.x.x.x.pack

在这里插入图片描述

在Keil的包管理器中勾选VOFA即可快速使用。

  • 12
    点赞
  • 145
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jelin大魔王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值