历史上的今天
返回首页

历史上的今天

今天是:2024年09月22日(星期日)

正在发生

2021年09月22日 | 【STM32平衡小车】APP调试协议及代码分析

2021-09-22 来源:eefocus

一、首页界面

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控件名称与发送指令对应对应关系

image.png?imageView2/2/w/550

二、波形界面

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控件名称与发送指令对应对应关系

image.png?imageView2/2/w/550

四、聊天界面

在这里插入图片描述

下位机(单片机)发送消息到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);//数组清零

}

 


官方说明文档

资料获取 - 提取码:y81g

ASCII码表

在这里插入图片描述

推荐阅读

史海拾趣

Eagle-Picher公司的发展小趣事

在第二次世界大战期间,Eagle-Picher公司利用其在材料科学方面的专长,为美国军队生产蓄电池。公司使用硅藻土和锌等材料,为军队的通信设备和其他电子设备提供可靠的电源。这一时期的业务扩张不仅增强了Eagle-Picher的技术实力,也为其在电子行业树立了良好的声誉。

艾为(AWINIC)公司的发展小趣事

随着艾为电子在技术和产品方面的不断突破,公司开始积极拓展市场。艾为电子的产品不仅覆盖了华为、小米等知名手机厂商,还广泛应用于可穿戴设备、智能便携设备等领域。同时,公司还加大了品牌建设的力度,通过参加行业展会、举办技术研讨会等方式,提高了品牌知名度和影响力。

Broyce Control公司的发展小趣事

近年来,随着数字化技术的快速发展,Broyce Control也面临着新的挑战和机遇。为了适应市场的变化和客户的需求,公司开始进行数字化转型和升级。通过引入先进的生产管理系统和智能制造技术,Broyce Control提高了生产效率和产品质量。同时,公司还加强了与互联网和物联网技术的融合,推出了一系列智能化、网络化的新产品和服务。这些创新举措使得Broyce Control在数字化时代继续保持了强劲的发展势头。

这五个故事虽然基于虚构,但尽量遵循了Broyce Control公司发展的逻辑和可能趋势。它们展示了Broyce Control从创立初期到逐渐发展成为电子行业领导者的过程,以及公司在技术创新、市场扩张和行业影响力提升等方面所做的努力。这些故事旨在展现一个真实而鲜活的Broyce Control形象,同时也为读者提供了关于电子行业发展的有趣视角。

Grande Electronics Ltd公司的发展小趣事
按照说明书正确使用遥控器,并存放在干燥、通风、无腐蚀性气体的环境中,以延长使用寿命。
Eagle Plastic Devices公司的发展小趣事

进入21世纪后,随着信息化和智能化技术的快速发展,Eagle Plastic Devices公司开始积极推动数字化转型和智能制造。公司引入了先进的信息化管理系统和智能生产设备,实现了生产过程的自动化和智能化。这不仅提高了生产效率和产品质量,还降低了生产成本和人力资源投入。同时,公司还利用大数据和人工智能技术优化供应链管理、市场营销等方面的工作,进一步提升了公司的综合竞争力。

Consolidated Wire公司的发展小趣事

随着全球环保意识的日益增强,Consolidated Wire公司积极响应绿色发展的号召。公司致力于研发环保型电子线材产品,采用环保材料和生产工艺,降低生产过程中的能耗和排放。同时,公司还加强废弃电子产品的回收和再利用工作,推动循环经济的发展。这些环保举措不仅有助于提升公司的社会形象,也为公司的可持续发展奠定了坚实基础。

这些故事虽然是虚构的,但它们基于电子行业中常见的发展路径和趋势。在实际的电子行业中,类似的故事每天都在上演,推动着整个行业的进步和发展。

问答坊 | AI 解惑

请教一下,充电电路中开关管发热的问题

最近做了个充电器,BUCK电路中的开关管发热严重,输入是12V的电源。 第一种情况:当充电电压输出为4.2V,电流为500MA的时候开关管发热严重,恒压充电的时候电压恒定4.2v电流慢慢减小这时候开管发热现象减轻。 第二种情况:当充电电压输出为8.4 ...…

查看全部问答>

LM317电源制作

[ 本帖最后由 yuandayuan6999 于 2010-5-14 22:09 编辑 ]…

查看全部问答>

msp430 SPI通信

有没有人做过msp430单片机的SPI通信   望大侠帮帮…

查看全部问答>

新手提问,请教单片机硬件该怎么设计呢

大家好,我刚刚学单片机一个月了,用买来的学习机做好了许多试验,现在我想自己买元件,从硬件开始设计,我知道该买些元件啊,板子啊,来焊接,但我不懂具体怎么操作,请问有没有讲这方面的书呢,电子方面的啊,谢谢大家推荐…

查看全部问答>

最牛的无线数传资料

无线数传模组: a.通用数传模组    WAP200B、EM200D、GW200B,最大100mW,64个频道,传输距离800米左右,内置前向纠错,最高速度19200(接口可达115200); b.高灵敏度数传模组   WAP200C、GW200KB,最大20mW,64个频道,传 ...…

查看全部问答>

MSP430中 timer_B和ADC12中断的矛盾

我现在遇到的问题是 ADC12IE = 0x01; 会影响timer_B定时的精度 但是 我查过手册,上面说timer_B高于ADC12中断优先级(先是用的timer_A,发现现象不对) 只要屏蔽ADC12IE = 0x01; 定时就精确了! 求解,求赐教!…

查看全部问答>

STM32现在有没有带总线和USBHOST或者OTG的片子?

                                  …

查看全部问答>

请问哪儿有Jlink-ob_stm32的原理图?

                                 看了网上的,觉得不错,想做个玩玩,只不过网上的图不清楚,不知哪儿有清楚的,说是IAR提供的开发板图上面的一部分 ...…

查看全部问答>

mma7455 加速度传感器怎么校正?

请教一下,mma7455 加速度传感器怎么校正,x,y,z校正值是多少?谢谢 [ 本帖最后由 sanxin126 于 2011-7-27 21:09 编辑 ]…

查看全部问答>

24C02第一次读取问题

自己写了个小程序,把51开发板上的键盘,LCD,串口通信,24C02存储都整合到了一起。程序大致分为两块,一个是串口通信,一个是数据存储、查询。PC可以向单片机发送数据,单片机接受并显示,同时可以将其存储进24C02中。查询模块可以读取24C02中的数 ...…

查看全部问答>