android串口上位机,匿名上位机(V7)基于串口的简单使用

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

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

匿名上位机

V7版本的选项简介,划线部分是比较基础的部分,对于智能车调试,波行分析比较好用。

08a5f7326e7a4fbb81307920b31757b5.png

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

连接设置

通过连接设置(点击)可以设置通信方式,有串口通信和USB HID通信方式。本文主要介绍串口通信。

连接设置好就可以打开连接了,下面是连接成功的状态。

6dcb05eb3b911edaf7092bfb05908356.png

基本收发界面

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

aff390fe149cd9eb8af6449cc90b3c2e.png

数据波形界面

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

388163e4e961066f9c161f6c2d10afde.png

小细节

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

920463f99640306576029ed3e1a98bd0.png

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

89a7ca7fc835ca7fc5b37b34cf2973c6.png

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

通信协议简介:

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

4e80ae14f9b8ad390b07b26b300e01b4.png

灵活格式帧

灵活格式帧,是用户能够自定义一帧数据的数据长度和数据内容,比较灵活,因此只是介绍它,这个也是发送到上位机的数据。

组成:

注意ID,是由0XF1~0XFA

5378bd6f9fd43b4e522ecae664f5c1e2.png

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;

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

{

sumcheck+=BUFF[i];

addcheck+=sumcheck;

}

BUFF[_cnt++]=sumcheck;

BUFF[_cnt++]=addcheck; for(i=0;i<_cnt usartsendbyte>

}1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

串口初始化代码

注意一下基础配置为,字长为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

}1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

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

//定时器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); }

}1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

至此,下位机配置完成。

上位机再进行简单配置,即可进行波形显示

波形显示配置

进入上位机协议通信,打开右侧,进行自定义帧数配置,与下位机接收的数据进行匹配,如图。

下面数据容量配置是与波形显示界面配置

a192fe8761b083b1dcbffc222e74d698.png

32ef064fef503dbd01bc8346c6af5f6f.png

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

下面进行简单演示

fc807d7364dabe1946d6b51ac3816866.png

右侧由数据值显示

073b8e5251c651d141ab517a8fa20662.png

A和B的波形重合到一起了(-。-)

右下方的数据频率基本与发送频率一致

307c9151643c3fa55c0c793a3b908513.png

匿名上位机还要其他功能有趣的功能

比如:波形分析

bff2563456f883db63df5b00e8ee6756.png

发送参数读取参数

7e7e236f75dc9171c5f5a5b8a2c85ec2.png

文章来源: blog.csdn.net,作者:Silent Knight,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_46185705/article/details/113359120

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值