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

最新更新时间:1970-01-01来源: eefocus关键字:STM32  平衡小车 手机看文章 扫描二维码
随时随地手机看文章

一、首页界面

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

二、波形界面

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

四、聊天界面

在这里插入图片描述

下位机(单片机)发送消息到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  平衡小车 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic548611.html

上一篇:【STM32平衡小车】PC端上位机协议及代码
下一篇:【STM32平衡小车】一篇快速上手MPU6050

推荐阅读

STM32输入捕获--“PWM输入模式”(可拓展多路同时捕获)
前言博文基于STM32F103ZET6和标准固件库V3.5.0在MDK5环境下开发;本博文只讨论输入捕获的PWM输入模式,这个模式是STM32输入捕获检测脉宽和频率的一种硬件处理机制,说白了就是STM32芯片专门用来进行对PWM进行捕获的一个功能;此方法相比较于传统的PWM的捕获方法,大大减小了代码量,提高了检测效率,而实际上对于PWM信号的检测还有其他方法(下面我会介绍,就是原子教程提供的方法),并且关于繁琐的寄存器的介绍这里就不多说了,有兴趣的话可以直接去我的另外一个博客里去看: https://blog.csdn.net/wuyuzun/article/details/73135662 ;(备注:此链接里的博客里有一个配套
发表于 2021-11-26
<font color='red'>STM32</font>输入捕获--“PWM输入模式”(可拓展多路同时捕获)
STM32 程序卡死在启动文件startup_stm32fxxxx.s的SysTick_Handler中
出现的问题硬件调试的时候发现程序一直在启动文件下面箭头这行。显然是跟SysTick_Handler有关由于我使用了FreeRTOS,所以需要SysTick为系统时基单元,所以需要SysTick_Handler,但是我却没有定义此中断函数,所以导致上面的程序一直进入不了以SysTick_handler命名的中断函数;填上就好了;解决问题添加SysTick_Handler函数:
发表于 2021-11-26
<font color='red'>STM32</font> 程序卡死在启动文件startup_stm32fxxxx.s的SysTick_Handler中
STM32中断挂起和RTOS任务挂起的区别
中断挂起可以理解为:将中断设置为就绪状态,一旦符合条件,立即执行中断并进入中断函数;比如A和B的抢占优先级相同,A的响应优先级高于B,那么当产生A和B中断的事件发生时,先执行A,并同时将B挂起,一旦A执行完毕,立即执行B。RTOS的任务挂起以FreeROTS为例,因为某些原因不能立即执行的任务,可以将其挂起,这个挂起使得任务暂时无法参与任务调度。只有将任务唤醒之后才能继续参与;
发表于 2021-11-26
解决STM32 SD卡官方库移植时 获取不到SD Status寄存器值的问题
前言SD卡内部的SD Status寄存器和Card Status寄存器从名字上来看好像都是状态寄存器,但实际上所要呈现的工程是不同的,这一点要注意;本博文主要说内容是怎样正确的获取SD Status寄存器的值;如有不足之处,还请多多指教;问题SD Status寄存器表如下,我想获取其中的AU_SIZE的值([400:0]这段位域内没有信息,我这里忽略了)如下图,AU_SIZE的值本身应该在0x01~0x09之间,但是我用串口打印出来的值却是0;获取SD Status寄存器的函数代码如下:/**   * @brief SD Card Status   */typedef struct{ 
发表于 2021-11-25
解决<font color='red'>STM32</font> SD卡官方库移植时 获取不到SD Status寄存器值的问题
SD卡存储容量的计算过程
前言SD卡底层驱动代码量不小,功能稍微有点复杂,其他的功能不说了;本博文主要介绍SD卡V1.0和V2.0版本的SD卡的容量结算;在对SD卡进行FATFS文件系统(最新R0.13c版本)移植时,接口函数DRESULT disk_ioctl (BYTE pdrv, BYTE cmd, void *buff )会获取SD卡的三个重要信息作为f_fdisk和f_mkfs函数为整个SD卡分区和挂载文件系统的依据;下面的代码来自于STM32官方提供的固件库的SD卡例程,但是:例程里边有错误的地方需要修改,如果不修改有可能会影响到FatFS系统移植时分区的问题,在博文的最后有特别指出;CSD寄存器(Card-Specific Data
发表于 2021-11-25
SD卡存储容量的计算过程
STM32 HardFault_Handler 硬件错误 解决办法
在用Keil对STM32的程序进行仿真时程序有时会跑飞,停止仿真程序会停在HardFault_Handler函数里的死循环while(1)中。这说明STM32出现了硬件错误。STM32出现硬件错误可能有以下原因:(1)数组越界操作;(2)内存溢出,访问越界;(3)堆栈溢出,程序跑飞;(4)中断处理错误;遇到这种情况,可以通过以下2种方式来定位到出错代码段。方法1:1.1在硬件中断函数HardFault_Handler里的while(1)处打调试断点,程序执行到断点处时点击“STOP”停止仿真。1.2 在Keil菜单栏点击“View”——“Registers Window”,在寄存器查看窗口查找R14(LR)的值。如果R14(LR
发表于 2021-11-25
<font color='red'>STM32</font> HardFault_Handler 硬件错误 解决办法

推荐帖子

像素与CCD之间关系
对于消费级数码相机来说,特别是强调性价比的家用型数码相机,如果一味的追求高像素,则很可能损失相机本身的功能,例如像变焦、微距、甚至镜头素质,就单一的成像而言,画质的优良与镜头、CCD、数字处理芯片等多个部件都有关系,特别是CCD感光元件,并非是大家想象的那样,像素越高,画质就越清晰,相反,如果在CCD尺寸不变的情况下,像素越高,画质就越不清晰。接下来我们就从原理来给大家分几个点介绍什么是CCD感光元件,像素值多少才最合适 CCD究竟是什么?CCD传感器又叫电荷耦合器,它是一种特殊的半导体材料,
探路者 移动便携
Qt学习之路第52篇 使用拖放
拖放(DragandDrop),通常会简称为DnD,是现代软件开发中必不可少的一项技术。它提供了一种能够在应用程序内部甚至是应用程序之间进行信息交换的机制。操作系统与应用程序之间进行的剪贴板内容的交换,也可以被认为是拖放的一部分。 拖放其实是由两部分组成的:拖动和释放。拖动是将被拖放对象进行移动,释放是将被拖放对象放下。前者是一个按下鼠标按键并移动的过程,后者是一个松开鼠标按键的过程;通常这两个操作之间的鼠标按键是被一直按下的。当然,这只是一种普遍的情况,其它情况还是要看应用程序的具体实
兰博 嵌入式系统
BlueNRG手机客户端源代码Android版本使用的是什么版本的编译环境
本帖最后由bkn1860于2018-1-2219:45编辑 BlueNRG手机客户端源代码:BlueNRG-android.zip这个使用的什么版本的编译环境? 对Android编译环境不是很熟悉,希望能尽快通过这个源代码入手,谢谢。 BlueNRG手机客户端源代码Android版本使用的是什么版本的编译环境
bkn1860 意法半导体-低功耗射频
C2000 DSP中stack用量的计算
做通讯的时候,发现TMS320F280XX这款芯片有时会死机。他通讯的软件使用了TI给的库,自己做了通讯的协议层。虽然死机后有主芯片将这块通讯芯片复位,但我们仍然想解决问题。当我们发现代码没什么明显Bug后最先怀疑的是stackoverflow,将原编译环境的stack由0x300改为0x3a0后,问题果然没有出现。 TI的CCS5.1默认C2000的stack是0x300,一般是够的,可能因为我们使用库的原因吧,但没有源码只能在
灞波儿奔 微控制器 MCU
eBox问题。 请问有人用过eBox写的吗?定时器时间怎么设置呢?
.H文件如下: classTIM { public: TIM(TIM_TypeDef*TIMx); voidbegin(uint32_tfrq);//frq为中断频率,取值1-1000000 voidattach_interrupt(void(*callback)(void));//中断回调函数
半亩先生 stm32/stm8
zigbee 无线模块组网例程
本帖最后由dontium于2015-1-2313:13编辑 可靠的ZigBee组网技术在电力SCADA中的应用 发表时间:2010年10月21日内容来源:不详点击:171 相对于电力微波通信网、电力DDN数字数据和公网等远程通讯技术相比,电网数字化需要“就地”获取信息,并快速作出反应,同时需要和远程通讯技术配合。ZigBee无线自组网技术针对电力系统监测、控制的需求,在通信容量、通信时延、通信可靠性、能量损耗上正是这样一项满足电
bwm12315 模拟与混合信号
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved