一个串口接收数据的状态机

2024-04-08 09:08

本文主要是介绍一个串口接收数据的状态机,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


关于串口接收转义字符状态机:
S1——S2——S3——S4——S5
S1空闲状态,收到第一个开始前导符,跳转到S2;
S2收到第一个开始前导符状态,收到开始第二个前导符,跳到S3;收到其他数据,跳转到S1;
S3收到第二个开始前导符状态,收到其他数据进行接收,跳转到S3;收到第一个结束前导符,跳转到S4;
S4收到第一个结束符状态,收到其他数据进行接收,跳转到S3;收到第二个结束符,跳转到S5;
S5结束状态,关闭接收,重置状态,标识接收结束。
这里设计了一个串口接收数据用的状态机。
根据数据的前导符和结束符,以及转义字符,进行数据接收。
在本状态图中,整体实现了在接收过程中,去掉数据的前导符,结束符以及转义字符。但是留下了一个可能造成状态图死机或者将前导字符接收到缓冲区的bug。
如果这里Start Char == End Char,Second Start Char != Second End Char,当进入RecvPreambleEnd后,如果接收到Start Char将导致接收错误。因为对于数据而言如果发生这样的事情,说明是新的一帧到了。
同时在实现段代码的时候同样,出现了一个隐藏的Bug,当接收到Second Char后,要进行退出前的清理操作,应该是在当前接收时间内进行。但实现时,将其放在了下一次接收到来时处理,这就发生了异步数据处理的现象。虽然表面上正常,数据有交互,实际上对于使用这段代码的接收方,只处理了一半的数据。剩下的一半数据,被接收端丢弃了。
这些前一个是设计上的缺陷,后一个是编码上的缺陷。

这篇关于一个串口接收数据的状态机的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/885152

相关文章

安卓开发板_联发科MTK开发评估套件串口调试

串口调试 如果正在进行lk(little kernel ) 或内核开发,USB 串口适配器( USB 转串口 TTL 适配器的简称)对于检查系统启动日志非常有用,特别是在没有图形桌面显示的情况下。 1.选购适配器 常用的许多 USB 转串口的适配器,按芯片来分,有以下几种: CH340PL2303CP2104FT232 一般来说,采用 CH340 芯片的适配器,性能比较稳定,价

VB和51单片机串口通信讲解(只针对VB部分)

标记:该篇文章全部搬自如下网址:http://www.crystalradio.cn/thread-321839-1-1.html,谢谢啦            里面关于中文接收的部分,大家可以好好学习下,题主也在研究中................... Commport;设置或返回串口号。 SettingS:以字符串的形式设置或返回串口通信参数。 Portopen:设置或返回串口

关于Qt在子线程中使用通讯时发生无法接收数据的情况

在多线程应用中,串口通讯或TCP通讯的场景常常涉及到持续的读写操作,如果子线程处理不当,可能会导致信号阻塞问题。本文将通过串口通讯或TCP通讯为例,详细解释如何在多线程环境中避免信号阻塞,并提供代码示例。 1. 问题背景 假设我们在一个应用程序中使用多线程处理串口或TCP通讯,通常会在子线程中实现持续的数据读取。为了确保实时处理数据,常见的做法是在子线程的 run() 方法中使用 while

java RXTXcomm 串口通信

RXTXcomm:提供了 Windows x64, x86, ia64 and Linux x86, x86_64等操作系统支持。 下载地址 http://fizzed.com/oss/rxtx-for-java 使用RXTXcomm首先要安排JRE环境,开发IED可能eclipse. 1.下载系统相应的RXTXcomm。 2.将rxtxSerial.dll、rxtxParallel.dl

STM32F4按键状态机--单击、双击、长按

STM32F4按键状态机--单击、双击、长按 一、状态机的三要素二、使用状态机原因2.1资源占用方面2.2 执行效率方面:2.3 按键抖动方面: 三、状态机实现3.1 状态机分析3.1 程序实现 百度解析的状态机概念如下 状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。有限状态机简写为FSM(

Nodejs 串口通信 : websocket , serialport

最近在学习如何实现web页面和串口间通信,网页请求使用websocket,实现的基本功能如下: 1、基本需求:硬件:有两个信号灯(TLA-505-1T),一个485继电器(开关),电压转换器,工业触屏一体机。 2、原理图:                  3工作原理: 首先一体机中采用node开发服务器,网页请求采用websocket协议,直接放代码了: var express

C# WPF燃气报警器记录读取串口工具

C# WPF燃气报警器记录读取串口工具 概要串口帧数据布局文件代码文件运行效果源码下载 概要 符合国标文件《GB+15322.2-2019.pdf》串口通信协议定义;可读取燃气报警器家用版设备历史记录信息等信息; 串口帧数据 串口通信如何确定一帧数据接收完成是个麻烦事,本文采用最后一次数据接收完成后再过多少毫秒认为一帧数据接收完成,开始解析出来。每次接收到数据更新一次re

ubuntu14下Arduino IDE无法打开串口的问题

ubuntu版本是14.04 LTS,arduino版本是1.8.1。使用arduino的串口工具时无法打开串口,串口是USB转的,用的cp2102 。 google了一下,发现可能是权限的问题,执行以下语句,即可解决: sudo chown username /dev/ttyUSB0将username改成自己的用户名就行了。

Android串口log的获取

常遇到无法开机的状况,这时由于Android还未起来,adb等均无法使用,此时有抓串口的必要。 1.命令安装 sudo apt-get updatesudo apt-get install minicom 2.安装完毕后,插入串口线,进入/dev/目录查看设备 图中红圈即插入串口后,新增的serial目录和ttyUSB0字符设备 其中serial目录中内容如下,均是指

智能家居系统(基于STM32F103C8T6标准库+FreeRTOS+Qt串口开发实现)

视频演示:基于STM32F103C8T6标准库+FreeRTOS+Qt串口开发实现的智能家居项目_哔哩哔哩_bilibili 基于STM32F103C8T6标准库+FreeRTOS+Qt串口开发实现的智能家居项目: https://pan.baidu.com/s/1f41gAfOOnlcQoKoMx3o84A?pwd=6j2g 提取码: 6j2g  注:本项目为学习完《江科大STM32教