Vofa+的使用

Rawdata

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

JustFloat

本协议是小端浮点数组形式的字节流协议,纯十六进制浮点传输,节省带宽。此协议非常适合用在通道数量多、发送频率高的时候。
一般用于下位机向上位机发送数据。
使用时需要在CMSIS Driver中安装VOFA包
将JustFloat文件夹(文件夹链接见文末)移植到工程中,根据通信硬件接口修改函数(原因见下)
自定义一个vofa框架句柄(默认为变量名jSHandle),使用该句柄初始化vofa,调用Vofa_JustFloat即可发送数据到上位机,而Vofa_Printf函数可以代替printf
justfloat调用vofa.c中的发送回调函数(弱定义),此函数将justfloat和通信硬件接口绑定,因此需要重定义该函数
printf重定向 在usart.c中比较方便

#include <stdio.h>
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
  HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1 , 0xffff);
  return ch;
}

或者(以下还可以使用scanf’函数)

int fputc(int ch, FILE *f){
 uint8_t temp[1] = {ch};
 HAL_UART_Transmit(&huart2, temp, 1, 0xffff);
return ch;
}

int fgetc(FILE * f)
{
  uint8_t ch = 0;
  HAL_UART_Receive(&huart2,&ch, 1, 0xffff);
  return ch;
}

FireWater

本协议是CSV风格的字符串流,直观简洁,编程像printf简单。但由于字符串解析消耗更多的运算资源(无论在上位机还是下位机),建议仅在
通道数量不多、发送频率不高的时候使用。
一般用于上位机向下位机发送数据
将FireWater文件夹(文件夹链接见文末)移植到工程,添加头文件路径和源文件,注:静态库不能忘。在def.h中更改包含头文件
使用步骤
①串口接收中断使能

HAL_UART_Receive_IT(&huart1,&Res,1);

Res为一个uint8_t全局变量,用于暂存接收到的数据,需要自己定义
②重写接收中断回调函数

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	Write_RingBuff(&uart_ringbuff,&Res,1);
	HAL_UART_Receive_IT(&huart1, &Res, 1);
}

该步作用是将MCU的通信硬件接口和FW绑定
③在主函数里初始化并在循环里执行任务

 int main(void)
 {
 	 fw_init();
     while(1)
  	 {
    	fw_task();
	 }
 }

④注:上位机发送的指令格式为
指令名:数据1,数据2,数据3,数据4\n
数据量可在fw.c中更改(float buf[4];),不满四个时,后面依次为0
协议将接收到的4个数据存在数组中,然后在fw.c中对应的指令名函数中写用户代码

代码逻辑

HAL_UART_Receive_IT(&huart1,&Res,1);

这句表示每次接收一个字节数据,进入中断callback中,将接收到的数据根据协议压入环形队列中(uart_ringbuff中,在fw.c中定义),然后再次打开接收中断。每次执行到fw_task();都会进入该函数,判断是否接收完整的一帧,若没有接收完成,则退出该函数。直到下位机接收到\n,表示一帧结束,此时执行到fw_task();时,会进入fw.c中的对应指令名的函数中执行,将环形队列中的数据取出,送入数组,然后执行用户程序
注:串口接收中断比较特殊,每次进入中断回调函数后,需要手动再次开启 HAL_UART_Receive_IT(&huart1,&Res,1);

文件夹链接:https://pan.baidu.com/s/18XVReDEw1qgmcetdd8jQSg 提取码:9no0

  • 17
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值