一、首页界面
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);//数组清零
}
}
}
官方说明文档
资料获取 - 提取码:y81g
ASCII码表
上一篇:【STM32平衡小车】PC端上位机协议及代码
下一篇:【STM32平衡小车】一篇快速上手MPU6050
推荐阅读
史海拾趣
为了拓展市场份额,Aavid Niagra公司开始实施全球化战略布局。公司先后在多个国家和地区设立了生产基地和研发中心,以便更好地服务当地客户。同时,公司还积极参与国际电子行业的交流与合作,不断提升自身的国际影响力。全球化战略的实施为公司带来了更多的发展机遇,也使其在全球电子散热市场上占据了重要地位。
作为一家有远见的企业,CONEC不仅关注自身的经济效益,还积极履行社会责任。公司致力于推动电子行业的可持续发展,通过采用环保材料、优化生产工艺等方式降低生产过程中的环境影响。同时,CONEC还积极参与社会公益事业,支持教育、环保等领域的发展。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。
请注意,以上故事仅为基于公开信息的推测和构建,可能并不完全准确反映CONEC公司的实际发展历程。如果您需要更详细和准确的信息,建议查阅CONEC公司的官方资料或相关新闻报道。
进入21世纪后,Dover Corporation开始实施多元化发展战略。除了电梯业务外,公司逐渐将业务扩展到其他领域,如工程产品、燃料解决方案、成像和身份识别等。这一战略的实施使Dover能够更好地应对市场变化,实现业务的持续增长。
近年来,电子行业经历了多次技术变革和市场调整。面对这些挑战,Aplus Integrated Circuits公司积极调整战略,加大研发投入,推动产品创新。公司成功开发出多款适应市场需求的新型集成电路产品,不仅满足了客户的多样化需求,还为公司带来了可观的收益。
兵字公司的创始人李元兵,在经历了多年的研究所工作后,怀揣着对电子元器件领域的深厚情感与独到见解,决定投身创业。他深知,在电子行业这个日新月异的领域,唯有掌握核心技术,才能在激烈的市场竞争中立足。于是,兵字公司从成立之初,就致力于电源变压器和触发变压器的研发与生产,凭借过硬的技术实力和优质的产品质量,迅速在市场中站稳了脚跟。
Elite Semiconductor Products Inc(以下简称Elite)自创立之初,就坚持以技术创新为核心竞争力。公司创始人是一位经验丰富的半导体工程师,他深知在电子行业,技术的领先意味着市场的领先。因此,Elite投入大量资源进行研发,不断推出具有领先性能的半导体产品。其中,一款高性能的芯片产品因其卓越的功耗控制和计算能力,在行业内引起了广泛关注。这款产品不仅帮助Elite打开了市场,也为公司后续的技术创新奠定了坚实的基础。
(一)了解半导体材料的导电特点,熟悉半导体元器件(晶体二极管、晶体三极管和场效应管)的外部特性与主要性能特点。 (二)晶体三极管和场效应管构成的单级放大电路(共发或共源、共基、共集、差放)的工作点近似计算与设置,小信号概念,以 ...… 查看全部问答∨ |
在这里玩的,很大一部分应该是像我这样的80年代生人。网络语言曰:80后。 这一拨人被打上了很多标签,用Google搜索的自动联想功能可以看到,往往和教育、就业、房价等社会敏感的问题联系起来……这是为什么呢? http://www.labournet.c ...… 查看全部问答∨ |
看到别人在 WinCE 4.2 中开启了 File Server ,于是我也想试试看。 1、为操作系统加载了 File Server 组件; 2、配置了注册表项; 运行操作系统后,发现 smbserver.dll 文件已经在 \\Windows 文件夹中了,但是在 PC 机中还是无法用 \\\\Windows ...… 查看全部问答∨ |
|
我是新人,想请教一个问题,如果推出一款产品一般的项目步骤是怎么样的? 是不是一开始要制作样机,然后测试样机,再批量化生产?有关细节就是: 1、电子元器件怎么样合理的采购 2、PCB打样一般找什么样的厂家 3、样机完成测试后,产 ...… 查看全部问答∨ |