匿名上位机(V7)简单使用

本文简介:本文主要介绍匿名上位机V7版本的一些基本的功能使用,以及基于匿名上位机协议写下位机代码。使用的下位机为STM32F103C8T6

匿名上位机

V7版本的选项简介,划线部分是比较基础的部分,对于智能车调试,波行分析比较好用。
在这里插入图片描述

基本的功能是基本收发,类似串口精灵或者XCOM。

连接设置

通过连接设置(点击)可以设置通信方式,有串口通信和USB HID通信方式。本文主要介绍串口通信。
连接设置好就可以打开连接了,下面是连接成功的状态。

在这里插入图片描述

基本收发界面

你发送的数据下面会有发送计数,可以通过基本收发这里面判断上位机与下位机的连接情况

在这里插入图片描述

数据波形界面

可以通过设置那里选择用户的自定义波形,有10个容器可以选择,也就是可以同时显示10个波形,在左边打上勾就可以显示波行了

在这里插入图片描述

小细节

通过观察,发现软件界面左侧或者右侧会有虚线,把鼠标移动过去即可打开隐藏的选项。

在这里插入图片描述

帮助信息那里会有比较详细的使用资料和视频,具体使用可以查看帮助信息

在这里插入图片描述

通过上面介绍,我们了解到了怎么连接上位机与下位机,如何使用波形显示界面,下面将通过分析通信协议,写下位机代码。(具体协议请自行查看帮助信息的通信协议)

通信协议简介:
通过匿名协议的方式,确定一帧数据的构成,一帧数据的不同位置,功能不同,至于后面的校验和附加校验也不需要怎么理解,直接套用即可。需要注意的数据内容采取的是小端模式


在这里插入图片描述

灵活格式帧

灵活格式帧,是用户能够自定义一帧数据的数据长度和数据内容,比较灵活,因此只是介绍它,这个也是发送到上位机的数据。
组成:
注意ID,是由0XF1~0XFA

在这里插入图片描述

C代码分析发送一帧数据代码

/**********为了匿名四轴上位机的协议定义的变量****************************/
//cup为小端模式存储,也就是在存储的时候,低位被存在0字节,高位在1字节
#define BYTE0(dwTemp)       (*(char *)(&dwTemp))	 //取出int型变量的低字节
#define BYTE1(dwTemp)       (*((char *)(&dwTemp) + 1))	 //	取存储在此变量下一内存字节的内容,高字节
#define BYTE2(dwTemp)       (*((char *)(&dwTemp) + 2))
#define BYTE3(dwTemp)       (*((char *)(&dwTemp) + 3))


u8 BUFF[30];

void sent_data(u16 A,u16 B,u8 C)
{
	int i;
	u8 sumcheck = 0;
	u8 addcheck = 0;
	u8 _cnt=0;
	BUFF[_cnt++]=0xAA;//帧头
	BUFF[_cnt++]=0xFF;//目标地址
	BUFF[_cnt++]=0XF1;//功能码
	BUFF[_cnt++]=0x05;//数据长度
	BUFF[_cnt++]=BYTE0(A);//数据内容,小段模式,低位在前
	BUFF[_cnt++]=BYTE1(A);//需要将字节进行拆分,调用上面的宏定义即可。
	BUFF[_cnt++]=BYTE0(B);
	BUFF[_cnt++]=BYTE1(B);	
	BUFF[_cnt++]=C;
	//SC和AC的校验直接抄最上面上面简介的即可
	for(i=0;i<BUFF[3]+4;i++) 
	{
		sumcheck+=BUFF[i];
		addcheck+=sumcheck;
	}
	BUFF[_cnt++]=sumcheck;	
	BUFF[_cnt++]=addcheck;	
	
	for(i=0;i<_cnt;i++) UsartSendByte(USART1,BUFF[i]);//串口逐个发送数据
}

串口初始化代码注意一下基础配置为,字长为8位数据格式,一个停止位无奇偶校验位,

void usart1_init(u32 bound)
{
	//GPIO端口设置
	GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	 
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);	//使能USART1,GPIOA时钟

	//USART1_TX   GPIOA.9
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//复用推挽输出
	GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9

	//USART1_RX	  GPIOA.10初始化
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
	GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10  

	//Usart1 NVIC 配置
	NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//抢占优先级0
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;		//子优先级2
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能
	NVIC_Init(&NVIC_InitStructure);	//根据指定的参数初始化VIC寄存器

	//USART 初始化设置

	USART_InitStructure.USART_BaudRate = bound;//串口波特率
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
	USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
	USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//收发模式

	USART_Init(USART1, &USART_InitStructure); //初始化串口1
	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断
	USART_Cmd(USART1, ENABLE);                    //使能串口1 
}

配置完上述,在定时器上调用发送数据函数即可

//定时器3中断服务程序
//10Khz的计数频率,计数到50为5ms 
void TIM3_IRQHandler(void)   //TIM3中断
{
	static u16 A=0,B=2;
	static u8 C;
	if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否
		{
		TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx更新中断标志
			C=A+B;
			A++;B++;
			sent_data(A,B,C);		
		}
}

至此,下位机配置完成。
上位机再进行简单配置,即可进行波形显示

波形显示配置

进入上位机协议通信,打开右侧,进行自定义帧数配置,与下位机接收的数据进行匹配,如图。
下面数据容量配置是与波形显示界面配置

在这里插入图片描述

在这里插入图片描述

到此配置完成,烧录代码,打开上位机连接即可,通过查看下放的错码率可以知道自己的下位机代码是否写错了

下面进行简单演示

在这里插入图片描述

右侧由数据值显示

在这里插入图片描述

A和B的波形重合到一起了(-。-)
右下方的数据频率基本与发送频率一致

在这里插入图片描述

匿名上位机还要其他功能有趣的功能比如:波形分析

在这里插入图片描述

发送参数读取参数

在这里插入图片描述