GD32接收不定长数据包

接收不定长数据

Cubemx生成代码过程忽略

首先在main函数中创建接收缓存区

并在main.h中定义

 接下来就是重写串口的中断函数中的内容,把原有内容注释掉

main中创建一个记录接收数据长度的变量和标志位

 然后再在主函数中添加一个验证代码,这样MCU收到数据后会发送到电脑上

 现在开始正式改写中断函数,改为如下代码即可

void USART1_IRQHandler(void)
{/* USER CODE BEGIN USART1_IRQn 0 *//*重写内容*//*用于保存数据寄存器的变量*/uint16_t br = 0;uint16_t temp = USART1->SR;//状态寄存器 status //第五位读数据缓存区非空if (temp & (1 << 5)){if (rxlencnt < LEN)//没有超出缓存区{rxbuf[rxlencnt] = USART1->DR&0x1ff;//存入buf中rxlencnt ++;}else{rxlencnt = 0;//重置数组memset(rxbuf, 0, LEN);}USART1->SR &= ~(1<<5);//重置标志位}if (temp & (1<<4))//检测到空闲线路,即一帧数据接收完毕{flag = 1;//标志位置1br = USART1->DR;USART1->SR &= ~(1<<4);//置0}/* USER CODE END USART1_IRQn 0 */
//  HAL_UART_IRQHandler(&huart1);/* USER CODE BEGIN USART1_IRQn 1 *//* USER CODE END USART1_IRQn 1 */
}

然后再在主函数中添加

  while (1){/* USER CODE END WHILE */if (flag == 1){flag = 0;HAL_UART_Transmit(&huart1, rxbuf, rxlencnt, rxlencnt);rxlencnt = 0;memset(rxbuf, 0, LEN);}/* USER CODE BEGIN 3 */}

即可做到发送接收不定长数据

数据帧的接收并分析(即接收数据包)

void frame_control()
{if (flag != 1) return ;flag = 0;HAL_UART_Transmit(&huart1, rxbuf, rxlencnt, rxlencnt);char *pstr1 = NULL, *pstr2 = NULL;char *str1 = "aa", *str2 = "55";/*strstr(str1, str2)-判断字符串str1中是否包含str2若str1中包含str2,返回str2的起始地址,否则返回NULL*/pstr1 = strstr((char*)rxbuf, str1);pstr2 = strstr((char*)rxbuf, str2);if ((pstr1 != NULL) && (pstr2 != NULL)){if (((*pstr1 == 'a')&&(*(pstr1+1) == 'a'))&&((*(pstr1+5) == '5')&&(*(pstr1+6) == '5'))&&((*(pstr1+2)-0x30)+(*(pstr1+3)-0x30)==(*(pstr1+4)-0x30))){uint8_t buf[] = "Error!";switch(*(pstr1+2)){case '1':if(*(pstr1+3)=='1'){HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);}else if(*(pstr1+3) == '0'){HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);}break;case '2':if(*(pstr1+3) == '1'){HAL_GPIO_WritePin(GPIOD, GPIO_PIN_7, GPIO_PIN_SET);}else if(*(pstr1+3) == '0'){HAL_GPIO_WritePin(GPIOD, GPIO_PIN_7, GPIO_PIN_RESET);}break;default:HAL_UART_Transmit(&huart1, buf, 6, 6);break;}}}rxlencnt = 0;memset(rxbuf, 0, LEN);
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cesium叠加超图二维服务、三维场景模型

前言 Cesium作为开源的库要加超图的服务则需要适配层去桥接超图与Cesium的数据格式。这个工作iClient系列已经做好&#xff0c;相比用过超图二维的道友们可以理解&#xff1a;要用Openlayer加载超图二维&#xff0c;那就用iClient for Openlayer库去加载&#xff1b;同样的要用…

el-table导出表格文件

先写一个download公共的方法 download(file) {const blob fileconst blobURL window.URL ? window.URL.createObjectURL(blob) : window.webkitURL.createObjectURL(blob)const a document.createElement(a)a.download 故障的报表.xlsxa.href blobURLdocument.body.appen…

Git与GitHub零基础教学

大家好&#xff0c;我是星恒&#xff0c;这个帖子给大家分享的是git和github的全套教程&#xff0c;包含github初始&#xff0c;git常用命令以及基本使用&#xff0c;git的ssh链接github&#xff0c;github使用token登录&#xff0c;github和idea的配合&#xff0c;一些平时常用…

Flink编程——基础环境搭建

基础环境搭建 文章目录 基础环境搭建准备环境搭建源码环境搭建克隆代码编译导入IDEA 集群环境搭建本地模式安装步骤 1&#xff1a;下载步骤 2&#xff1a;启动集群步骤 3&#xff1a;提交作业&#xff08;Job&#xff09;步骤 4&#xff1a;停止集群 总结 准备环境搭建 我们先…

我们需要练习关爱自己,让自己松弛下来,而练习的方式就是慈心,祝福自己也祝福他人

非常正确&#xff01;关爱自己是维持身心健康的关键之一。通过慈心和祝福的方式&#xff0c;我们可以培养更积极、更宽容的心态&#xff0c;提升生活质量。以下是一些建议&#xff0c;帮助你在日常生活中练习关爱自己&#xff1a; 自我体谅&#xff1a; 对待自己要像对待朋友一…

国内SAP实施公司大盘点

随着企业数字化转型的加速推进&#xff0c;SAP作为全球有名的企业软件解决方案提供商&#xff0c;受到了越来越多企业的青睐。然而&#xff0c;要充分发挥SAP软件的潜力&#xff0c;企业需要依赖专业的SAP实施公司来提供技术支持和咨询服务。在国内&#xff0c;有许多优秀的SAP…

Spring ApplicationContext

ApplicationContext 在 Spring 中代表着一个高级的 IoC 容器&#xff0c;负责实例化、配置和组装对象。ApplicationContext 接口扩展自 BeanFactory 接口&#xff0c;添加了更多的企业级功能&#xff0c;比如更容易的国际化、事件传播、资源加载等。 ApplicationContext 接口关…

web3d-three.js场景设计器-天空包围盒-TWEEN.js

THREE.JS 实现场景天空包围盒&#xff0c;为了让场景背景更具体&#xff0c;而不是呆板的纯色&#xff0c;可以给厂家添加围绕的包围盒。 这里使用球体来实现&#xff0c;球体中央则是场景给球体添加天空的渐变色加入场景 代码如下 function createSky( hemiLight) { const …

学习笔记——克里金插值

有一篇大神的文章写得非常的具体&#xff0c; https://xg1990.com/blog/archives/222 下面写下一些学习笔记&#xff1a; 1、关于克里金插值的基本原理 克里金插值来源于地理学&#xff0c;它的前提是地理学第一定律&#xff1a;所有事物都与其他事务相关&#xff0c;但是近…

应用层—HTTP详解(抓包工具、报文格式、构造http等……)

文章目录 HTTP1. 抓包工具的使用1.1 配置信息1.2 观察数据 2. 分析 https 抓包结果3. HTTP请求详解3.1 认识 URL3.1.1 URL 基本格式3.1.2 查询字符串 (query string)3.1.3 关于 URL Encode 3.2 认识 http 方法3.2.1 [经典问题] Get 和 Post 主要的区别是什么&#xff1f;&#…

Java多线程并发篇----第二十九篇

系列文章目录 文章目录 系列文章目录前言一、什么是不可变对象,它对写并发应用有什么帮助二、Java 中用到的线程调度算法是什么?三、什么是线程组,为什么在 Java 中不推荐使用?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点…

美易官方《美国股市在全球金融市场中的地位举足轻重》

美国股市在全球金融市场中的地位举足轻重&#xff0c;吸引了众多顶尖投资高手和机构竞相角逐。作为全球最大的股票市场之一&#xff0c;美国股市以其独特的魅力和优势&#xff0c;成为了全球投资者瞩目的焦点。 首先&#xff0c;美国股市的规模巨大&#xff0c;流动性充裕&…

第十五届蓝桥杯单片机组——超声波测距

文章目录 一、超声波测距原理二、利用定时器实现测距2.1 结合定时器实现过程2.2 伪代码 三、代码示例 一、超声波测距原理 超声波测距是一种常用的测量距离的方法&#xff0c;凭借其非接触性、准确度高以及对环境因素影响小的优点&#xff0c;广泛应用于各类机器人、自动驾驶车…

C++11手撕线程池 call_once 单例模式 Singleton / condition_variable 与其使用场景

一、call_once 单例模式 Singleton 大家可以先看这篇文章&#xff1a;https://zh.cppreference.com/w/cpp/thread/call_once /*std::call_oncevoid call_once( std::once_flag& flag, Callable&& f, Args&&... args ); */ #include <iostream> #i…

DT浏览器的人工智能是如何学习知识的

DT浏览器的人工智能是如何学习知识的&#xff0c;DT浏览器的人工智能通过大量的数据和算法来实现知识学习的。这是一些学习知识的方式&#xff1a; 1. 数据驱动学习&#xff1a;通过处理和分析大量的文本数据来学习语言知识和语言模式。这些数据可以来自各种来源&#xff0c;如…

解决 pnpm : 无法加载文件 C:\Program Files\nodejs\pnpm.ps1,因为在此系统上禁止运行脚本。

执行下面命令进行安装pnpm安装后 npm install -g pnpm 然后执行pnpm 报错 解决办法&#xff1a; 以管理员身份运行 Windows PowerShell &#xff0c; 在命令行输入以下命令后按回车&#xff0c; set-ExecutionPolicy RemoteSigned 再输入Y 回车即可。 再回到控制台输入p…

k8s---包管理器helm

内容预知 目录 内容预知 helm相关知识 Helm的简介与了解 helm的三个重要概念 helm的安装和使用 将软件包拖入master01上 使用 helm 安装 Chart 对chart的基本使用 查看chart信息 安装chart 对chart的基本管理 helm自定义模板 在镜像仓库中拉取chart&#xff0c;查…

大路灯和台灯哪个对眼睛好?学生备考大灯推荐

最近家长圈里开始流行这么一句话&#xff1a;鸡娃的尽头&#xff0c;是鸡眼。曾经绘画课、科学课、乐高课、思维课一样没落下&#xff0c;讲绘本、学英语也是每天的日常&#xff0c;周一到周日孩子的行程排得满满当当。可没想到有一天带着孩子去医院体检视力的时候&#xff0c;…

Javascript的基本书写方式

目录 JS 书写方式 行内JS 页面JS 外部JS JS 书写方式 在 JS 中也有三种书写方式&#xff1a; 行内JS 页面JS 外部JS 行内JS 我们在 HTML 标签上使用 JS 代码的方式就叫行内 JS&#xff0c;它一般是用于触发某种操作&#xff0c;例如点击事件。 <!DOCTYPE html> …

python 正则表达式学习(1)

正则表达式是一个特殊的字符序列&#xff0c;它能帮助你方便的检查一个字符串是否与某种模式匹配。 1. 特殊符号 1.1 符号含义 模式描述^匹配字符串的开头$匹配字符串的末尾.匹配任意字符&#xff0c;除了换行符&#xff0c;当re.DOTALL标记被指定时&#xff0c;则可以匹配包…