STM32自定义协议串口接收解析指令程序

1、在使用串口接收自定义协议指令时,需要串口解析收到的是什么指令,举例通信报文为

上位机->单片机

名称

长度

备注

帧头

1Byte

0x5A 0x5A

帧长度

1Byte

数据包的长度0x00-0xFF

数据包

命令字

1Byte

功能标识

数据

可以为空

校验

1Byte

数据包所有字节按位异或

单片机->上位机

名称

长度

备注

帧头

1Byte

0xA5 0xA5

帧长度

2Byte

数据包的长度0x0000-0xFFFF

数据包

命令字

1Byte

功能标识

数据

可以为空

校验

1Byte

数据包所有字节按位异或

那么,在单片机机收到上位机的指令后需要解析命令字是什么,然后做相应的功能处理。

2、此时的串口接收解析处理函数可以采用状态机的方法来处理:

首先,在main函数中的while循环之前第一次接收数据

 HAL_UART_Receive_IT(&huart3,&ble_rec_buf,1);//接收数据

然后中断回调函数如下编写

//接收回调函数---接收数据解析
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){if(huart==&huart3){switch(usart3_state){case 0:  //如果收不到0x5a,则跳出switch,如果收到则进入case1,blue_receive_buf[0]为0x5ablue_receive_buf[0]=ble_rec_buf;if(blue_receive_buf[0]==0x5a){usart3_state=1;usart3_cnt=1;}else {usart3_state=0;}break;		case 1:   //在case1中接着接收数据0x5a  0x01(长度) 0x01(命令),分别存放在blue_receive_buf[1]、blue_receive_buf[2]、blue_receive_buf[3]blue_receive_buf[usart3_cnt]=ble_rec_buf;usart3_cnt++;if(usart3_cnt>3){usart3_state=2;}else{usart3_state=1;}break;					case 2://最后接收校验码blue_receive_buf[4],判断是否为0x01blue_receive_buf[usart3_cnt]=ble_rec_buf;if(blue_receive_buf[usart3_cnt]==0x01)//如果收到的校验码正确{switch(blue_receive_buf[2]){case 1://如果命令为0x01,则为查询历史数据blue_transmite_flag=1;break;case 2:break;case 3:break;default:break;} }break;default:break;}HAL_UART_Receive_IT(&huart3, &ble_rec_buf, 1);}}	

这种方法可以解析不同的通信指令,而不存在串口收到的数据是不定长的而无法处理的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1488719.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

C语言常见字符函数和字符串函数精讲

目录 引言 一、字符函数 1.字符分类函数 2.字符转换函数 二、字符串函数 1.gets、puts 2.strlen 3.strcpy 4.strncpy 5.strcat 6.strncat 7.strcmp 8.strncmp 9.strstr 10.strchr 11.strtok 12.strlwr 13.strupr 引言 在C语言编程中,字符函数…

Rancher 快照备份至 S3 及备份恢复

AWS S3(Simple Storage Service)是亚马逊云服务提供的一种高度可扩展、安全且经济高效的对象存储服务。它允许用户在任何位置存储和检索任意数量的数据,非常适合存储和分发静态文件、备份数据以及作为数据湖的存储层。 集群备份 一、创建S3桶 1、登录…

PyTorch学习(1)

PyTorch学习(1) CIFAR-10数据集-图像分类 数据集来源是官方提供的: torchvision.datasets.CIFAR10()共有十类物品,需要用CNN实现图像分类问题。 代码如下:(CIFAR_10_Classifier_Self_1.py) import torch import t…

【Linux】玩转操作系统,深入刨析进程状态与调度机制

目录 1. 进程排队2. 进程状态的表述2.1. 进程状态2.2 运行状态2.3. 阻塞状态2.4. 挂起状态 3. Linux下具体的进程状态3.1. 运行状态R3.2. 可中断睡眠状态S3.3. 不可中断睡眠状态D3.4. 停止状态T3.5. 死亡状态X3.6. 僵尸状态Z 4. 孤儿进程5. 优先级6. Linux的调度与切换6.1. 四个…

打破自闭症束缚:儿童康复案例揭秘

在浩瀚的康复领域中,有这样一所机构,它如同温暖的阳光,穿透自闭症的阴霾,为无数家庭带来了希望与光明。这,就是星启帆——国内规模较大的全寄宿制自闭症儿童康复机构,一个专注于中重度广泛性发育障碍儿童康…

ffmpeg更改视频的帧率

note 视频帧率调整 帧率(fps-frame per second) 例如:原来帧率为30,调整后为1 现象:原来是每秒有30张图像,调整后每秒1张图像,看着图像很慢 实现:在每秒的时间区间里,取一张图像…

MySQL之视图和索引

新建数据库 插入数据 处理表 1. 2. 3. mysql> alter table sc add unique index SC_INDEX (sno asc,cno asc); 4. mysql> create view stu_info as select student.sno,ssex,sc.cno,score from student join sc on student.snosc.sno; 5. mysql> drop index S…

JavaScript——变量与运算符、输入输出、判断、循环

文章目录 前言概述使用 js从文件引入 js 代码importjs 的作用变量计算输入格式化输出保留小数向上取整,向下取整条件判断循环总结 前言 为了监督自己的进度,把学习任务一点点都写出来,写多少就算多少,不求完美,只求完…

Adobe正通过数字体验改变世界

在当今这个数字化飞速发展的时代,Adobe公司正以其创新的技术和卓越的产品引领着创意设计领域的变革。从Adobe发布的生成式AI工具(Adobe Firefly),到Illustrator和Photoshop的新AI功能,再到广受认可的Adobe国际认证&…

架构师第二周作业

目录 1.总结Dockerfile的指令和Docker的网络模式 1.1 Dockerfile指令 1.1.1 FROM :指定基础镜像,必须放在Dockerfile文件第一个非注释行 1.1.2 LABEL : 指定镜像元数据,如:镜像作者等 1.1.3 RUN :执行shell命令 1…

Python编程入门指南:从基础到高级

Python编程入门指南:从基础到高级 一、Python编程语言简介 1. Python是什么? Python是一门广泛使用的计算机程序编程语言,由荷兰人吉多范罗苏姆(Guido van Rossum)于1991年首次发行。Python是一种解释型、交互式、面…

抖音短视频seo矩阵系统源代码搭建---基于PHP语言开发部署

随着短视频市场的爆发式增长,越来越多的企业开始寻求在短视频领域建立自己的品牌形象,增加用户粘性和获取更多流量。为此,一套高效的抖音短视频seo矩阵系统源代码显得尤为重要。本文将介绍基于PHP语言的抖音短视频seo矩阵系统源代码开发&…

数据结构(5):树和二叉树

1 树的定义 1.1 树的基本概念 分支可以称为边,结点可以用于存放数据结构。 除了根节点,其他节点只有一个前驱!!!! 互不相交也就是 只有一个前驱结点! 树应用的很广的 1.2 结点之间的关系 直接…

Infuse Pro for Mac全能视频播放器

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件,将其从左侧拖入右侧文件夹中,等待安装完毕2、应用程序显示软件图标,表示安装成功 三、运行测试安装完成!!! 效果 一、下载软件 下载软件…

什么是公司自建企业邮箱?自建企业邮箱有什么用?

什么是公司自建企业邮箱?公司自建企业邮箱有什么用途?一是品牌统一;二是安全性增强;三是定制化功能;四是控制与灵活性等等。哪些企业适合自建企业邮箱呢?本篇文章将为您一一解释。 一、什么是公司自建企业…

《Milvus Cloud向量数据库指南》——SPLADE:基于BERT的Learned稀疏向量技术深度解析

在自然语言处理(NLP)领域,随着深度学习技术的飞速发展,预训练语言模型如BERT(Bidirectional Encoder Representations from Transformers)已成为推动研究与应用进步的重要基石。BERT通过其强大的上下文感知能力,在多项NLP任务中取得了显著成效,尤其是在文本表示和语义理…

Cannot access org.springframework.context.ConfigurableApplicationContext

Cannot access org.springframework.context.ConfigurableApplicationContext SpringApplication.run曝红 解决方案: File -> Invalidate Cache and Restart 如果对你有用就点个赞!

Platform Designer 自定义IP(用于纯RTL设计)

在开始菜单找到Quartus Prime工具,点击并打开。 点击Quartus菜单File——New: 选择Verilog HDL File,点击OK: 这是新建的.v文件如下: 在新建的.v文件中键入如下Verilog代码: module mux2x1( //模块的开头…

vue element-ui日期控件传参

前端&#xff1a;Vue element-ui <el-form-item label"过期时间" :rules"[ { required: true, message: 请选择过期时间, trigger: blur }]"><el-date-picker v-model"form.expireTime" type"date" format"yyyy-MM-dd&…

计算机实验室排课查询小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;教师管理&#xff0c;实验室信息管理&#xff0c;实验室预约管理&#xff0c;取消预约管理&#xff0c;实验课程管理&#xff0c;实验报告管理&#xff0c;报修信息管理&#xff0…