串口通信(8)串口中断“边接收边解析数据“的通信程序

 本文为博主 日月同辉,与我共生,csdn原创首发。希望看完后能对你有所帮助,不足之处请指正!一起交流学习,共同进步!

> 发布人:@日月同辉,与我共生_单片机-优快云博客

> 欢迎你为独创博主日月同辉,与我共生点赞❤❤❤+关注👍+收藏🌹+评论☺。

系列专栏: 优快云-单片机串口通信学习系列🎁

> 我的格言是:“尽最大努力,做最好的自己!💪

要转载,请提前告知!!!

版权声明:本文为优快云博主「日月同辉,与我共生」的原创文章,优快云独一份。

目录

一、数据帧

1.1数据类型

1.2帧尾

1.3ASCII码

二、系统设计

2.1设计要求

2.2系统原理

2.2.1接收原理&正确性判断原理

2.2.2持续时间原理

三、硬件设计

3.1串口设计

3.2LED模块设计

3.3蜂鸣器模块设计

四、软件设计

4.1串口初始化模块

4.2接收模块

4.3定时器初始化模块

4.4LED+蜂鸣器功能模块

4.5主程序模块

4.6发送数据模块

4.7清除缓冲模块

4.8uart.h

五、结果

一、数据帧

发送到数据帧可以细分成【帧头】、【地址】、【类型】、【长度】、【数据块】、【效验】、【帧尾】7种,但并不是每次发送的数据都要有这7种。

像【地址】,一般只有多机通信会用到,单机通信不需要有。多机通信时,会给每台机编一个地址,确保数据不会发送到其他的机。还有,【长度】并不是每次都要有,如果发的数据长度是固定的,一般不需要有,发送到数据长度不固定时,才需要有。

1.1数据类型

数据类型一般决定处理某个模块。比如我与用户约定好,数据类型01,处理LED,数据类型02,处理蜂鸣器,那么我的设备发送数据01给对方,则对方去处理LED,发送数据02给对方,则对方去处理蜂鸣器。

1.2帧尾

一次通信的结束,一般用一些特殊符号(比如回车等)表示,以防止帧尾前面的数据与帧尾一样,导致通信出现故障。

1.3ASCII码

ASCII码是一种字符编码方式,共有128个字符,包括英文字母、数字、标点符号和一些控制字符等。每个字符用7个二进制位表示,这些二进制位可以转换成十进制数,也可以转换成十六进制数。

字母 A 在 ASCII 码中的二进制表示为 01000001,十进制表示为 65,十六进制表示为 0x41。

数字 0 在 ASCII 码中的二进制表示为 00110000,十进制表示为 48,十六进制表示为 0x30。

控制字符包括换行符、回车符、制表符等,它们的 ASCII 码值在 0~31 和 127 中。

二、系统设计

2.1设计要求

虚拟串口com3发送数据给51单片机com1,com1发回数据给com3,同时处理好接收到的数据。

这次数据帧有帧头+类型+数据块+帧尾组成。帧头为AA 55,数据类型分为01/02,数据块分为高8位和低8位,帧尾为0x0D(回车)。

数据类型为01时,LED灯工作,数据类型为02时,蜂鸣器工作。不论01还是02,持续时间与数据块有关(高8位、低8位)。

2.2系统原理

2.2.1接收原理&正确性判断原理

上两篇文章我们用定时器实现串口通信,本质是先接收后处理数据。

回顾上两篇文章:

串口通信(6)应用定时器中断+串口中断实现接收一串数据-优快云博客

串口通信(7)判断数据帧头来接收一串数据-优快云博客

今天我们讲述如何一边接收数据一边处理数据。

定义一个数组recv_buf,用于存储接收到数据,采用switch-case语句,每接收一个【帧头】数据,立刻用if语句判断【帧头】是否正确,若不正确,则重头判断。

若帧头AA 55数据均正确(recv_buf[0]=AA,recv_buf[1]=55),则进入下一步骤。

在分支2(case 2),接收【类型】(recv_buf[2])和【数据块】(recv_buf[3]和recv_buf[4])。

接着在分支3中,如果帧尾(recv_buf[5]=0x0D)正确,则开始处理LED灯和蜂鸣器。

2.2.2持续时间原理

分别定义两个控制持续时间的变量led_data、beep_cnt。

串口接收完整一帧数据包的3种方法 本文介绍3种使用串口接受一帧完整数据包的方法,串口接收数据是字节接收的,串口每接收1字节数据,产生一个串口中断,我们在中断中将接收到的数据存放到buf中进行保存,但是数据的发送和接收都是按照帧为单位进行传输的,因此我们要在接收数据的同时判断当前接收的数据是否是完整的一帧。 一般串口完整数据帧的定义:帧头(2字节,例如AA、BB) + 数据长度(2字节) + 数据+ CRC16校验(2字节) + 帧尾(2字节) 帧头、帧尾表示一帧数据的开始和结尾,数据长度表示当前数据帧中负载数据大小,CRC16校... 阅读详情

相关推荐

串口协议包的接收及解析处理

串口协议包的接收及解析处理 串口是单片机应用中应用最多的外设之一。很多电子硬件都会提供串口,如蓝牙模块、WIFI模块、串口屏等。如果我们想开发基于串口通信的产品或使用基于串口通信的电子硬件时,都避不开通信协议。 通信协议 通信协议听起来很抽象,实际他就是两个通信设备之间交流的纽带。例如我们两个人互相对话,这就是一个通信的过程,为什么我们可以听懂对方的话,因为我们说的都是汉语,汉语就是我们之间的通信...

ApexYuan 2万+

基于STM32F407的串口通信

串口通信 串口作为 MCU 的重要外部接口,同时也是软件开发重要的调试手段,其重要性不言而喻。现在基本上所有的 MCU 都会带有串口,STM32 自然也不例外。通过串口,我们可以实现多设备间的单双向通信。 本文主要讲解对正点原子的串口通信实验中串口中断的通信协议的理解与应用,关于串口的初始化配置等这里略过不讲。 在正式开始之前,先把涉及到的寄存器讲一下: 状态寄存器 (USART_SR) 状态寄存...

how的博客 7570

「STC8A8K64D4开发板」第2-6讲:串口通信

当数据的最高位移到移位寄存器的输出位置,紧跟其后的是第 9 位“1”,在他的左边各位全为“0”,这个状态条件,使 TX 控制单元作最后一次移位输出,然后使允许发送信号“SEND”失效,完成一帧信息的发送,并置位中断请求位 TI,即 TI=1,向主机请求中断处理。通常,我们会做一个软件缓存,在串口中断中接收数据存入到软件缓存,并定义一个变量用于记录串口接收的字节数(接收计数器),应用程序中可以通过查询接收计数器从而判断串口是否接收到数据,如接收到数据,则从缓存中取出数据进行处理。串口1接收中断请求标志位。

qq_36139768的博客 2573

STM32CubeMX串口通信接收图解说明(小白友好)

通过图文并茂的方式详解STM32CubeMX串口通信接收配置,适合初学者快速上手。掌握stm32cubemx串口通信接收的关键步骤与常见问题处理,提升嵌入式开发效率。

weixin_35815766的博客 1233

深度解析三菱PLC串口通信协议与C#串口通信的技术挑战及解决方案

本文详细探讨了C#实现三菱PLC串口通信的关键技术与解决方案。首先介绍了三菱PLC的串口协议基础,包括数据包结构和命令格式。重点分析了C#开发中常见的串口通信问题:配置参数、UI线程阻塞、数据粘包和接收不完整现象,并提供了相应的代码实现方案。文章提出通过合理设计协议规范、采用异步事件处理、实施数据缓冲与重组等方法来确保通信可靠性,同时给出了性能优化建议,如超时设置、心跳机制和校验重试策略。这些实践方案为开发者实现稳定高效的PLC串口通信提供了实用参考。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1261

STM32串口通信(USART)中断接收与数据回显实战

本文详细介绍了STM32串口通信(USART)的中断接收机制与数据回显实战。通过程序代码示例解析了中断配置、缓冲区管理和错误处理,帮助开发者实现高效可靠的数据传输,提升嵌入式系统的实时性和稳定性。

desk3的博客 1026

串口数据解析

1. 将通信接收的数据转换成需要的数据类型(float int char 等) 2. 将不同数据类型(float int char 等)的数转换成需要发送的hex数据 3. 代码可参考性大,简单方便,提取大小端的数据等可以参考函数方便的修改。 4. 用了函数模板(知识点) 5. 用了数据类型转换(知识点) 6. 函数中用自己的测试用例,可以参考。

轩宇的博客 3250

掌握PSoc4平台的串口通信:中断接收与发送实例

PSoc4是由赛普拉斯半导体公司推出的创新可编程系统级芯片(SoC),它将微控制器(MCU)与可编程的模拟和数字电路块相结合,为嵌入式系统设计者提供了极大的灵活性。PSoc4的出现,打破了传统MCU与外围电路分离设计的局限,使得开发者可以在一个芯片上实现复杂的控制与数据处理功能。通用异步收发传输器(UART)是一种广泛应用于微控制器串行通信的协议。UART 允许微控制器和外围设备通过串行线路进行数据传输。

weixin_35797963的博客 929

DSP2812串口中断通信程序详解

中断机制是计算机系统中一种重要的事件处理机制。它允许处理器在执行当前程序的过程中,响应外部或内部的异步事件,并通过中断服务程序对事件进行处理。

weixin_35749796的博客 1101

STM32串口通信实战:基于USART的中断与DMA接收设计

波特率是指每秒传输的符号数(symbol per second),在UART/USART这类二进制串行通信中,一个符号通常代表一位(bit),因此常被等同于“比特率”(bit rate)。常见的标准波特率包括9600、19200、115200等,单位为bps(bits per second)。例如,设置为115200bps意味着每秒钟可以传输115200个二进制位。在STM32中,USART的波特率由内部时钟源经过分频后生成。具体而言,该值通过一个16位的波特率寄存器(USART_BRR)

weixin_42168902的博客 831

单片机串口通信程序实战指南

在本章中,我们讨论了串口数据处理和存储的基本策略。首先,我们了解到数据解析和编解码对于理解和处理接收到的数据的重要性,以及错误检测与纠正机制在保证数据正确性方面所扮演的角色。然后,我们探讨了数据存储的实现方法,包括内存中数据结构的设计和外部存储设备的使用与管理。通过具体的代码示例,我们展示了如何在实际开发中应用这些理论知识。在下一章中,我们将深入探讨串口通信在实际场景中的应用,包括在工业控制和智能设备中的案例分析,以及如何解决实际应用中遇到的问题和挑战。本文还有配套的精品资源,点击获取。

weixin_42315569的博客 937

MIPI D-PHYv2.5笔记(11) -- 高速时钟传输(High-Speed Clock Transmission)

在High-Speed模式中,Clock Lane提供了一个低摆幅(low-swing)、差分DDR时钟信号,此信号从Master到Slave,用于为高速数据传输提供时钟信号。时钟信号关于Forward Direction中的Data Lane上的位切换序列(toggling bit sequence)有正交相位,并且在一次burst的第一个被传输的bit的中心点有一个上升沿。

vivo01的专栏 3021

TCN+iTransformer时间序列预测实战:从风电功率预测到源码解析(附完整代码)

本文深入探讨了TCN与iTransformer融合模型在时间序列预测,特别是风电功率预测中的应用。通过解析iTransformer‘倒置’视角的创新架构与TCN强大的局部时序捕捉能力,文章提供了完整的融合方案设计、源码实现及实战调优经验,旨在构建更强大的下一代预测引擎。

weixin_29062671的博客 265

使用MLP解决OCR问题(OpenCV)(下)

分类模型:        分类模型涉及的一个比较关键的问题就是输出的10维向量是如何与具体的类别挂钩的。实际上:10维向量的每一位都代表一类,在对于训练集的表达中,如果输入数据是0,则10维向量的第一位赋值为1,其余均为0。即0对应[1,0,0,0,0,0,0,0,0,0]。MLP模型训练完成后,就需要对用户输入的数据所属类别进行判定。这时得到的输出数据基本不可能是正好的所属类为1,其他位置为0

qq_18515405的专栏 1906

电阻的基本原理、参数、应用与选型

电阻的基本原理、电阻的分类、参数,应用与选型,0欧姆电阻的介绍等。

luobeihai的博客 1万+

vscode运行.ipynb代码时提示需要安装ipykernel包的解决办法

此文目的是为了记录遇到的一些问题,也希望能帮助到和我一样遇到困难的同学。如需转载,请注明出处。在使用vscode运行.ipynb文件中提示需要安装ipykernel包的提示,在网上查询了很多方法之后也是终于解决了问题。写下这篇博客也希望能帮到大家。

qq_58018041的博客 4万+

第3.4章 机器人第三方库实战总结(四):G2O优化库从入门到实战(附SLAM实例代码)

自定义边同样是满足复杂应用需求的重要手段。自定义边时,需要明确边所连接的顶点类型以及边所表示的误差项的计算方式。假设我们要定义一条边,用于约束两个上述自定义顶点之间的相对位姿和传感器偏移量关系。我们可以这样定义边类:public:// 计算误差// 计算雅可比矩阵// 读盘和存盘函数,这里暂不实现。

行知SLAM 358

Open3D 点云变换【2025最新版】

点云平移、旋转、缩放、欧式变换的python代码实现。博客长期更新,本文最近更新时间为:2025年1月16日。

点云侠的博客 37万+

FISCO BCOS(八)——— 一键部署 WeBase

环境 版本 Java Oracle JDK 8 至 14 MySQL MySQL-5.6及以上 Python Python3.6及以上 PyMySQL 1、获取部署安装包: wget https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/releases/download/v1.5.4/webase-deploy.zip 2、解压安装包: unzip webase-deploy.zip 3、进入目录: c...

林中有神君 3607

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: 串口通信(7)判断数据帧头来接收一串数据
下一篇: 串口通信代码整合1
@日月同辉,与我共生
博客等级 码龄4年 3247粉丝 44原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值