1. 下位机程序
1.1 协议文档分析
匿名科创在V7版本的协议文档上给出了很详细的范例,所以下位机程序非常好写,笔者是第一次写匿名上位机的下位机程序。以STM32发送一个无符号16位的数据为例讲解下位机程序的书写。
1.1.1 官方协议文档
1.1.1.1 查找方法
- 打开上位机,把鼠标慢慢移动到左侧的边框处,等待一会会弹出左侧菜单栏
- 点击弹出的菜单栏中的帮助信息子菜单
- 点击通信协议
- 自动使用pdf阅读器打开文件名为ANO_XIEYI.pdf的文档(如果电脑没有显示pdf阅读器,不知道是否能显示)
1.1.1.2 下位机协议分析
1.1.1.2.1 协议总框架
下位机协议由7部分组成,如下图所示,帧头(0xAA)、目标地址、功能码、数据长度、数据内容、和校验、附加校验。
各个部分详细解释:
- 帧头: 每个数据包都得有帧头,其功能在于鉴别数据包的开始。
- 目标地址:因为匿名通信协议是用于匿名科创的所有产品的通信,所以把数据不止发送给上位机,还有可能发送给其他的设备。所以需要该字段用于鉴别把数据发送给哪个设备。具体的地址在文档有介绍
- 功能码:表征该数据帧的功能,每个数据帧的功能有很多,用功能码作为数据的别称。
常见功能码有如下:
功能码 | 数据名称 |
---|---|
0x00 | 数据校验帧 |
0x01 | 惯性传感器数据 |
0x02 | 罗盘、气压、温度传感器数据 |
0x03 | 飞控姿态:欧拉角格式 |
0x04 | 飞控姿态:四元数格式 |
0x05 | 高度数据 |
0x06 | 飞控运行模式 |
… 等等数据
- 数据长度: 以字节作为单位,表示有效数据的长度(不包含帧头、目标地址、功能码、数据长度、和校验、附加校验)
- 数据内容:采用小端模式,低字节在前,高字节在后,一个单元为一个字节。
- 和校验:从帧头0xAA字节开始,一直到DATA区结束,对每一字节进行累加操作,只取低8位
- 附加校验:计算和校验时,每进行一字节的加法运算,同时进行一次SUM CHECK的累加操作,只取低8位。
校验程序示例:
U8 sumcheck = 0;
U8 addcheck = 0;
For(u8 i=0; I < (data_buf[3]+4); i++)
{
sumcheck += data_buf[i]; //从帧头开始,对每一字节进行求和,直到DATA区结束
addcheck += sumcheck; //每一字节的求和操作,进行一次sumcheck的累加
}
//如果计算出的sumcheck和addcheck和接收到的check数据相等,代表校验通过,反之数据有误
if(sumcheck == data_buf[data_buf[3]+4] && addcheck == data_buf[data_buf[3]+5])
return true; //校验通过
else
return false; //校验失败
1.1.1.2.2 用户自定义数据协议分析
文档页面: 6~7
1.1.1.2.2.1 示例介绍
灵活格式帧,我们也可以叫做用户自定义帧,也就是用户可以自己定义数据内容格式的数据帧。可能从名字无法很好的理解灵活格式帧有什么用,那么我们举一个简单的例子。
加入我在调试一个自己写的滤波算法,传感器原始数据A,为int16 格式,使用滤波算法对A进行滤波后,得到滤波后数据B,B也是int16 格式。滤波后数据经过控制算法,输出一个控制量C,C是int32 格式。那我需要对滤波算法和控制算法进行调试,肯定是需要得到ABC三个数据的波形,根据波形进行数据分析。 那么如何将数据ABC发送至上位机进行显示呢,就要用到灵活格式帧了。灵活格式帧共10帧,帧ID 从0xF1到0xFA,每一帧最多可以携带10个数据,每一个数据可以分别设置为U8、S16、U16、S32的格式。如果您需要显示float型数据,可以根据数据范围以及精度要求,乘以1000或者100变成S32型整数进行传输。
1.1.1.2.2.2 上位机配置
-
点击左侧菜单栏中的协议通信,出现下图软件区域
-
点击右侧的边框
弹出了数据配置窗口
-
选中F1右侧的选择框,然后点击F1左侧的加号框
-
按照下图配置前三个数据的类型,这个类型是示例中的三个数据类型
-
我们配置数据容器。数据容器设置,什么是数据容器呢,就是刚才F1数据帧进行解析后,会解析出最多30个数据,那么用哪个数据进行波形显示,或者excel保存哪个数据呢,这就要数据容器了。匿名上位机设置有10个数据容器,对应本区域1到10选项卡。我们可以把数据容器想象成10个卡车,只有卡车能将数据传输到用户,那么这10辆卡车将哪个数据传输给用户呢,就是这数据容器配置区域进行配置了。
具体配置如下图:
到此,上位机的配置完成,只需要单片机按照如下协议格式将数据发送至上位机,即可观察到对应的数据值
开始刷新,并可绘制对应数据波形。
1.1.1.2.2.3 下位机数据格式
数据按照下图的格式:
DATA区域内容:
举例说明DATA区域格式,例如上文,需要发送ABC三个数据,AB为int16 型,C为int32 型,那么ABC三个数据共2+2+4=8字节,那么LEN字节为8,帧ID 为0xF1,DATA区域依次放入ABC三个数据,然后计算SC、AC,完成后将本帧发送至上位机即可。
1.1.1.2.2.4 代码实现
驱动代码:
ANO_DataProtocol.c
#include "usart.h"
#include "ANO_DataProtocol.h"
#include "stm32f10x.h"
#define BYTE0(dwTemp) (*(char *)(&dwTemp)) //取出int型变量的低字节
#define BYTE1(dwTemp) (*((char *)(&dwTemp) + 1)) // 取存储在此变量下一内存字节的内容,高字节
#define BYTE2(dwTemp) (*((char *)(&dwTemp) + 2))
#define BYTE3(dwTemp) (*((char *)(&dwTemp) + 3))
void AnoTc_SendUserTest(s16 A, s16 B, s32 C)
{
// AA 05 AF F1 02 E4 01 36
unsigned char _cnt = 0;
unsigned char i;
unsigned char sumcheck = 0;
unsigned char addcheck = 0;
Data_to_Send[_cnt++] = 0xAA;
Data_to_Send[_cnt++] = 0xFF;
Data_to_Send[_cnt++] = 0xF1;
Data_to_Send[_cnt++] = 8;
Data_to_Send[_cnt++] = BYTE0(A);
Data_to_Send[_cnt++] = BYTE1(A);
Data_to_Send[_cnt++] = BYTE0(B);
Data_to_Send[_cnt++] = BYTE1(B);
Data_to_Send[_cnt++] = BYTE0(C);
Data_to_Send[_cnt++] = BYTE1(C);
Data_to_Send[_cnt++] = BYTE2(C);
Data_to_Send[_cnt++] = BYTE3(C);
for(i = 0; i < _cnt; i++)
{
sumcheck += Data_to_Send[i];
addcheck += sumcheck;
}
//if(sumcheck == Data_to_Send[Data_to_Send[3]+4] && addcheck == Data_to_Send[Data_to_Send[3]+5])
Data_to_Send[_cnt++]=sumcheck;
Data_to_Send[_cnt++]=addcheck;
USART_SendCharArr(USART1, Data_to_Send,_cnt);
}
ANO_DataProtocol.h
#ifndef __ANO_DATA_PROTOCOL_H__
#define __ANO_DATA_PROTOCOL_H__
#include "sys.h"
void AnoTc_SendUserTest(s16 A, s16 B, s32 C);
#endif
main.c
#include "stm32f10x.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "ANO_DataProtocol.h"
int main()
{
u16 i = 0;
u32 ECG1,ECG2,ECG3;
SystemInit();//系统时钟等初始化
delay_init(); //延时初始化
NVIC_Configuration();//设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(115200);//串口初始化为9600//延时初始化
while(1)
{
for(i = 0; i < 400; i++)
{
AnoTc_SendUserTest(i, i+100, i+200);
delay_ms(100);
}
for(i = 400; i > 200; i--)
{
AnoTc_SendUserTest(i, i+100, i+200);
delay_ms(100);
}
}
}
2. 上位机波形
生成了奇怪的三角波
3. 资源下载
匿名上位机波形显示demo及协议文档: https://download.csdn.net/download/FourLeafCloverLLLS/34433481