目录
前言
通信协议选择
上位机配置实现
下位机代码实现
通信效果演示
总结
前言
前面介绍了通过VOFA上传变量并显示成波形方便调试的方法,VOFA上传的是浮点,一个浮点需要4个byte才能够表示,这对本就不是很快的串口带来说有不小负担,而且对于定点的MCU上传数据就不友好了,VOFA上传数据的方法参考下面的链接:
STM32 VOFA+串口调试助手提升电机控制调试效率(下位机代码和上位机操作演示)_stm32的串口使用什么软件调试_卡洛斯伊的博客-CSDN博客
这里介绍一下匿名助手如何显示下位机的数据波形,以后的开发中可以根据实际情况和使用习惯选择合适的工具。
通信协议选择
这里选择灵活格式帧模式,参考软件的协议介绍文档。
实际用的时候因对协议不熟悉,踩不了少坑,这里总结一下:
如下是一帧满足通信协议的数据:
帧头:0xAB 一个字节,固定的,改成其他会通信不成功,显示不了波形
源地址:一个字节,随便写,0x00也行,不影响波形显示
目标地址: 一个字节,随便写,不影响波形显示
功能码:一个字节,这里是0xF1,需要和上位机对应
数据长度:两个字节,低字节在前,如下表示传输的数据有6个
数据内容:如下6-11都是要传的数据长度,一共6个,用来表示3个int16_t的变量。具体看传输变量的数量来定
和校验和附加校验就是通过传输的内容进行计算得到的两个字节的校验
计算方法如下:
上位机配置实现
这里配置显示三相电流,分别用int16_t 来表示,如上面的协议说明,配置只需要添加数据即可。
配置好0xF1的数据后,再点小扳手,找到0xF1#0:IA-IC,再点确认就可以正常显示波形了。
如果没有波形,再点一下右下角的运行按钮
下位机代码实现
简单定义一个数组,参考通信协议,再定义一个发送函数
static uint8_t tempData[14] = {0xAB,0xFE,0x05,0xF1,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
void UART_Debug(void);
把要传输的数据放到指定位置,简单粗暴,在周期任务里面或者中断里面调用发送函数即可。
void UART_Debug(void)
{
uint16_t flen = tempData[4]+tempData[5]*256;
uint8_t sumcheck=0;
uint8_t addcheck=0;
tempData[6] =((int16_t)((fIa)*100)&0xFF);
tempData[7] =((int16_t)((fIa)*100)>>8);
tempData[8] =((int16_t)((fIb)*100)&0xFF);
tempData[9] = ((int16_t)((fIb)*100)>>8);
tempData[10] =((int16_t)((fIc)*100)&0xFF);
tempData[11] =((int16_t)((fIc)*100)>>8);
for(uint16_t i=0;i<(flen+6);i++)
{
sumcheck+=tempData[i];
addcheck+=sumcheck;
}
tempData[12]=(uint8_t)sumcheck;
tempData[13]=(uint8_t)addcheck;
uart_write(&DRV_UART3, tempData,14U);
}
通信效果演示
匿名助手显示电流波形
总结
VOFA和匿名助手各有优劣,都能支持较高的波特率,这里没有进行详细对比,但对于工程应用来说,只要满足应用需要即可。在此感谢VOFA和匿名的作者分享这些工具,极大提高工程师的开发效率。