单片机串口——如何判定接收一帧数据的完成

这篇具有很好参考价值的文章主要介绍了单片机串口——如何判定接收一帧数据的完成。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

单片机串口接收不定长数据时,必须面对的一个问题为:怎么判断这一包数据接收完成了呢?常见的方法主要有以下两种:

1.在接收数据时启动一个定时器,在指定时间间隔内没有接收到新数据,认为数据接收完成;2.在数据中加入帧头、帧尾,通过在程序中判断是否接收到帧尾来确定数据接收完毕。这两种方法的缺点为,需要主程序来判断和处理,对主程序造成不小压力。

1)在串口接收的时候,有些通讯每一帧数据有帧头尾标识,这种情况比较好判定。但是也有些情况是,头尾没有固定的标识,也不知道一帧有多少字节,那么我们只能靠检测帧之间的间隔来判断是不是帧完成了。

例串口设置:9600波特率、8个数据位、1个停止位、无校验。

9600波特率表示,每秒传输9600个位,即每秒传输9600/(8位数据位+1位停止)=1066字节,

那么每秒传输一个字节的时间就是:1/1066=9.38*10^-4s≈0.94ms;

考虑硬件的损耗,保证数据传输的可靠性,留出余量,假设一个字节的传输时间为2ms。

例如波特率为9600,则说明每秒钟可以传输9600个二进制位,即传输一个二进制位需要的时间为1/9600秒。

那么我们就可以配置定时器,通过对时间的判断识别接收一帧未知长度的串口数据,

以定时2ms来说,当接收到一个字节的时候,我们打开定时器,开始计时,定时周期2ms。

如果过了2ms,没有新数据,那么我们认为一帧数据接收完成。

如果在2ms这个时间内,有新数据到来,那么我们认为是同一帧数据,此时定时器计数清零,重新计数。

初始化定义:一个足够大数组和一个记录字节数的变量。

3.使用单片机的串口空闲中断;
1)开启串口空闲中断;
2)在串口中断中判断是否是串口空闲中断,清除串口空闲中断的标志位。文章来源地址https://www.toymoban.com/news/detail-524708.html

到了这里,关于单片机串口——如何判定接收一帧数据的完成的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32单片机(九)USART串口----第四节:USART串口实战练习(串口发送+接收)

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月10日
    浏览(57)
  • 51单片机UART串口通信实现接收PC的字符串

            基本思路是触发串口接收中断之后,在串口中断服务函数中处理接收到的字节并将其连接成字符串存入全局变量中。 隐含的额外工作有: 1.区分是发送中断还是接收中断,两者都会进入同一个中断服务子函数; 2.判断已接收到了句末,暂停接收,并通过标志位告知

    2023年04月20日
    浏览(96)
  • GD32F4单片机实现接收超时中断+DMA实现串口的不定长接收和DMA发送

    环形缓冲区+定时器超时中断的方式 优点 环形缓冲区可以接收多帧数据 数据帧超时间隔可以设置 缺点 设备任务比较繁重时,使用中断接收可能会丢失数据。尤其是在长时间关闭中断或者串口中断优先级不高时 频繁进出中断。在使用RTOS的系统中,每收到一个数据就会进行一

    2024年02月15日
    浏览(62)
  • 【个人笔记】51单片机串口通信的字符串接收和发送,串口通信调节数码管显示时钟(串口通信,定时器,数码管)

           目的:利用PROTUES仿真软件、串口调试助手、虚拟串口,搭建单片机与PC通信仿真平台,熟悉单片机串口的配置及与PC机的通信方法;尝试制定通信协议,单片机根据通信协议解析接收到的内容,并根据接收的指令执行相应的操作。 基本功能: 1.时分秒的动态显示。

    2024年02月11日
    浏览(63)
  • APM32F072单片机进入STOP模式,并通过RTC Wakeup Timer和USART1串口接收事件唤醒

    串口初始化(注意USART1时钟源要选择HSI): 使用power_init函数初始化RTC,然后调用power_enter_stop_mode(n)函数进入STOP模式,n秒后自动唤醒,或由USART1接收唤醒:

    2024年02月13日
    浏览(51)
  • OpenMV接收stm32单片机数据

    本篇文章将会分享如何用OpenMV接收到stm32单片机传来的数据。 OpenMV stm32 p4 PA3 p5 PA2 GND GND 代码如下(示例): 代码如下(示例): 本篇文章分享了博主在准备电赛期间所写的OpenMV接收stm32单片机传来的数据OpenMV程序和stm32单片机程序,有不足之处,还请斧正! 完整工程源码

    2024年02月15日
    浏览(47)
  • 51单片机串口的应用(单片机和电脑互发数据)

    现在来详细看一下寄存器,我们直接查看单片机手册。 SCON寄存器 先来说说SCON寄存器。 前一节我们提过,我们一般使用串口用的是模式1,即8位UART,这样我们就用不到校验位。从手册中可以看到,寄存器SCON中的SM0和SM1配置成01即可。 SM2寄存器明显用不到,因为我们没有用模

    2024年02月07日
    浏览(58)
  • 利用51单片机实现与RS485通讯,接收数据

    目录 一、研究背景 二、硬件准备 三、软件准备  四、实验原理 五、单片机代码  六、Python读取串口处理数据 七、开发总结          学院给了14天的时间,一枚专业课紧的大三狗匆忙做出来。探索出一种研究阳极氧化工艺电解液中金属离子浓度在线测量和监控的设备和方式

    2024年02月07日
    浏览(45)
  • 【笔记】6位数码管显示定时器定时的时分秒,通过按键控制时间,自定义串口通信协议,根据单片机接收到的指令控制数码管显示

              目的:利用PROTUES仿真软件、串口调试助手、虚拟串口,搭建单片机与PC通信仿真平台,熟悉单片机串口的配置及与PC机的通信方法;尝试制定通信协议(含开始码、指令、数据、停止码),单片机根据通信协议解析接收到的内容,并根据接收的指令执行相应的操

    2024年02月05日
    浏览(56)
  • C51单片机串口发送数据的使用

             假如说电路板上没有CH340芯片,我们就要使用TTL转USB模块来进行电平的转换,然后将模块的RX接单片机的TX,模块的TX接单片机的RX,来进行接线连接。          在连接好连线后,我们打开计算机管理,来查看端口是否存在,如果没有,我们需要下载CH340驱动,

    2024年02月03日
    浏览(76)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包