STM32平衡小车】APP调试协议及代码分析

网友投稿 577 2022-05-28

文章目录

一、首页界面

二、波形界面

三、调试界面

四、聊天界面

五、代码

printf("{A%d:%d:%d:%d}$",a,b,c,d);

a、b、c、d分别为需要显示的状态:

a对应左边的码盘,b对应右边的码盘,通过百分比表示,可以用于速度等状态的显示,范围是0—100(%)

c主要是用于显示电量,范围也是0—100(%)

d是角度值,范围是-180°—180°。

APP控件名称与发送指令对应对应关系

printf("{B%d:%d:%d:%d:%d}$",a,b,c,d,e);

5个波形通道!

a、b、c、d、e 为需要显示的波形,发送的参数必须为整型变量,如果需要显示浮点数,放大一定的倍数之后再打印出来。

需要注意的是,每个通道发送的数据不可超过 5 个,但是可以少于 5 个。

printf("{B%d:%d:%d:%d:%d:%d:%d:%d:%d}$",a,b,c,d,e,f,g,h,i);

调试界面可以进行 9 个通道【0-8】的参数调节,点击每个通道的文字,可以编辑该通道的名称、调节范围、数值等。点击右上方的菜单按钮,可以弹出设置界面。

【实时发送参数】,使能后在推动滑块到某一位置松开手便发送相应的参数。

【发送所有参数】,上述【实时发送参数】如果不使能,则需要点击下方的,一起发送 9 个通道的数据。(注意:程序暂时没有处理这个发送所有参数)

【掉电保存参数】,主要是把调节好的参数,写入下位机的 Flash 或者 EEPROM 等,实现掉电保存。

【获取设备参数】,可以接收下位机的参数并更新到当前的调节界面。接收该指令之后,下位机需要把参数打印出来。

APP控件名称与发送指令对应对应关系

下位机(单片机)发送消息到APP,格式参考:printf("{#hello world}$");

APP发送消息到下位机(单片机)可直接发送。

/************************************************************************** 函数功能:串口3接收中断 入口参数:无 返回 值:无 **************************************************************************/ void USART3_IRQHandler(void) { if(USART3->SR&(1<<5))//接收到数据 { static u8 Flag_PID,i,j,Receive[50]; static float Data; Usart3_Receive=USART3->DR; APP_RX=Usart3_Receive; if(Usart3_Receive>=0x41&&Usart3_Receive<=0x48)//0x41-'A'...0x48-'H' Flag_Direction=Usart3_Receive-0x40; else if(Usart3_Receive<10) Flag_Direction=Usart3_Receive; else if(Usart3_Receive==0x5A)//0x5A-'Z' Flag_Direction=0; //以下是与APP调试界面通讯 if(Usart3_Receive==0x7B) Flag_PID=1; //APP参数指令起始位 - 0x7B对应的ASCII是'{' if(Usart3_Receive==0x7D) Flag_PID=2; //APP参数指令停止位 - 0x7D对应的ASCII是'}' if(Flag_PID==1) //采集数据 将APP参数指令保存到Receive数组中,包括`{`但不包括'}' { Receive[i]=Usart3_Receive; i++; } if(Flag_PID==2) //分析数据 { if (Receive[3]==0x50) PID_Send=1; //0x7D对应的ASCII是'P' else if(Receive[3]==0x57) Flash_Send=1; //0x57对应的ASCII是'W' else if(Receive[1]!=0x23) //0x23对应的ASCII是'#' 对应APP拖动滑块然后松手发送参数到下位机(单片机)的操作 { for(j=i;j>=4;j--)//假如发送指令为{0:120},该for循环的作用是取出120 { Data+=(Receive[j-1]-48)*pow(10,i-j);//注意此处的49对应0x30 } switch(Receive[1])//对应的通道 { case 0x30: Bluetooth_Velocity=Data;break; case 0x31: Velocity_KP=Data;break; case 0x32: Velocity_KI=Data;break; case 0x33: break; case 0x34: break; case 0x35: break; case 0x36: break; case 0x37: break; //预留 case 0x38: break; //预留 } } Flag_PID=0;//相关标志位清零 i=0; j=0; Data=0; memset(Receive, 0, sizeof(u8)*50);//数组清零 } } }

1

2

3

4

5

6

7

8

9

【STM32平衡小车】APP调试协议及代码分析

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

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

官方说明文档

资料获取 - 提取码:y81g

ASCII码表

TCP/IP 移动APP

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:WordPress文章目录插件LuckyWP Table of Contents设置教程
下一篇:一次关于kafka数据丢失场景的激烈讨论...
相关文章