首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

关于串口接收处理数据

一,处理思路(定时器模拟空闲中断)   判断串口接收到一条完整的数据以后置位一个标志位,主循环判断此标志位处理数据.   ...如何判断接收到一条完整的数据:     无论做的什么串口通信,数据总是一条一条的发送,发送完一条再发送另一条,发送每一条数据之间存在时间间隔,串口接收数据的时候控制一个     变量在定时器里面累加,...同时串口中断接收数据的时候对这个变量清零!...如果串口一直接收数据这个变量永远累加不到期望的数值,如果串口接收     数据以后不再接收数据,变量会累加到期望的数值,然后就是判断接收到一条完整的数据....=0 说明串口接收数据  然后 Usart1IdleCnt++ 如果串口一直接收数据 Usart1IdleCnt将不能累加到 Usart1IdleTime (本程序设置的10)  Ms 串口接收完一串数据以后

3.4K31
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Linux开发】串口接收不定长数据接收中断+超时判断方案

    然而,在串口通信中,我们通常不知道对方会发送多少数据,也不清楚数据何时发送完毕。简而言之,问题在于:我们如何确保接收到一帧完整的数据?判断一个完整帧就需要知道,帧什么时候开始,又在什么时候结束。...判断完整帧方式 串口传输的数据长度不一,如果接收不完整,将直接影响到后续的业务处理。...接收中断与超时判断: 当串口接收数据时,会触发接收中断。...空闲中断法: 当串口在一段时间内没有接收到新数据时,会触发空闲中断。 空闲中断实际上与接收中断的超时判断原理相似,但空闲中断是硬件自带的功能,而接收中断的超时判断则需要我们自己实现。...判断接收中断需要使用 UIS_RX_FIFO,即uart 中断状态表中的第 2 位。 代码实现 串口初始化 定义接收数据变量和信号量,并定义接收的回调函数。

    1K10

    串口通信—串口发送和接收代码讲解

    我们不仅仅可以将数据发送到串口调试助手,我们还可以在串口调试助手发送数据给控制器,控制器程序根据接收到的数据进行下一步工作。   ...  使能USART;   在USART 接收中断服务函数实现数据接收和发送。   ...我们在代码清单 21-3 使能了USART 接收中断,当USART 有接收数据就会执行USART_IRQHandler 函数。...首先我们需要调用USART_Config 函数完成USART 初始化配置,包括GPIO 配置,USART 配置,接收中断使能等等信息。   接下来就可以调用字符发送函数把数据发送给串口调试助手了。...我们在串口调试助手发送区域输入任意字符,点击发送按钮,马上在串口调试助手接收区即可看到相同的字符。

    5.3K30

    Simulink 串口接收详解1

    接收uint8数据 1.1. 接收端设置 2. 接收double数据 2.1. 接收端设置 2.2. 发送端设置 3.模块讲解 3.1. 模块 Serial Receive 3.2....接收更加复杂的情况 4.程序下载 ---- 1. 接收uint8数据 ? 用串口调试助手给 Matlab 发送两个字节a和A,用ASCII码展示就是97和65。 1.1....接收更加复杂的情况 由本文1和2两个小节可以看到,该串口接收只能解析单一的数据(要么是uint8数据类型,要么是doule数据类型)。但是实际我们的发送包会很复杂,有可能是多种类型的数据集合。...进阶教程:[Matlab]Simulink串口接收详解2用S-Function解析数据包 typedef struct { uint8 head;//1 double x;//8...St_Data data; }Un_sendData; 4.程序下载 程序下载的所有地址集中在,下一个博客Simulink串口接收详解2用S-Function解析数据包:https:

    2.4K10

    关于串口数据的发送和接收(调试必备)

    前言 对于串口数据发送和接收,大多是都是利用串口中断来进行的,但是这样对于编程方面有一定要求,并且程序也不太好写,比如说,如果让你随意接收一段数据,然后利用串口将它发送出来,第一个需要考虑的问题就是接收数据的长度...串口接收和发送机理 首先我们要知道的是串口的工作机理,串口是通过数据帧的发送,这里我就不多去牵扯那些基础的知识,假定我们使用的如下设置,波特率为9600,8位数据。其它的什么奇偶校验都不用。...————————————-续更2020/2/18 串口数据接收的程序设计 在学习串口数据接收之前,首先我们总结一下之前的printf的发送程序。...1、需要包含STDIO.h库文件 2、需要配置串口波特率等基本设置,并且只是输出的话就将ES置为0 3、在使用printf之前一定要将TI置为1 好了,现在来学习串口数据接收串口数据接收一定会需要串口中断...,因为串口数据的发送可以根据意愿去调用,可以不用中断,但是串口数据接收就非常需要串口中断了,因为你不知道什么时候数据发送过来,如果用查询法的话,每次都要去轮训,并且在没有操作系统的时候,轮训带来的时间延迟是接收数据所不能接受的

    4.9K20

    2018最新mfc作为上位机接收硬件端USB或串口数据显示成图片 解决串口接收数据丢字节丢包问题

    本文用的是VS2013MFC写串口数据接收: 第一步:首先建立一个MFC工程,成功后会跳出一个对话框,直接在对话框上点击右键-》点击插入ACTIVAE控件-》选择MicrosoftCommunications...,1个停止位 m_ctrlComm.put_InputMode(1); //1:表示以二进制方式检取数据 m_ctrlComm.put_RThreshold(1); //参数1表示每当串口接收缓冲区中有多于或等于...先预读缓冲区以清除残留数据 } 好这是打开串口的函数 ,既然打开的串口那么硬件就要给我们发数据了 ,而mFC也要有接收的能力 所以这时候我们要添加一个 串口数据的响应函数: ?...  所以我们一次性接收够了我们就跳出来  要是一直接收肯定会炸的  不信可以自己试试哈哈哈哈哈哈 还有这里有时候会出现一个问题,就是  串口传输数据的时候回丢包     有时候单步调试的时候却不会丢包...丢字节   STM32   单片机51都有可能出现这种情况  (串口调试助手收发大量数据时是怎样处理的,新手求教,写了一个串口调试助手,接收数据会丢帧,串口通讯,丢包严重是什么问题,为什么串口单步调试正常

    3K30

    单片机多字节串口接收(转)

    串口接收程序是基于串口中断的,单片机的串口每次接收到一字节数据产生一次中断,然后再读取某个寄存器就可以得到串口接收数据了。然而在实际应用当中,基本上不会有单字节接收的情况。...这就要求我们的单片机能够在连续接收到的串口数据序列中识别出符合自己板卡对应的通信协议,来进行控制操作,不符合则不进行任何操作。简而言之就是,单片机要在一串数据中找到符合一定规律的几个字节的数据。   ...(通信协议姑且按照简单的aa 55 一个字节数据   一个字节校验,代码是基于51单片机的)。接收成功则在中断程序中把串口接收成功标志位置1。   ...我考虑到每次数据都是连续发送的(至少我们用labwindows做的上位机程序是这样的),成功接收到了一帧数据是要有一定时间回复的,也就是说如果接收到一半,但是很长时间没接收数据,把计数值count清零就...  bit retFlag=0;//为1代表串口接收到了一帧数据   串口初始化函数,晶振22.1184   ```c   void init_uart()   {   SCON = 0x50; //

    1.9K50

    STM32—无需中断来实现使用DMA接收串口数据

    本节目标: 通过DMA,无需中断,接收不定时长的串口数据 描述: 当在串口数据传输下,CPU会产生多次中断来接收串口数据,这样会大大地降低CPU效率,同时又需要CPU去做其它更重要的事情,我们应该如何来优化...比如四轴飞行器,当在不停地获取姿态控制方向时,又要去接收串口数据....答:使用DMA,无需CPU中断便能实现接收串口数据 1.DMA介绍 DMA,全称为: Direct Memory Access,即直接存储器访问, DMA 传输方式无需 CPU 直接 控制传输,通过硬件为...2在main()中调用串口配置函数,初始化串口后,然后使能UART1_RX的DMA接收 2.1在main()函数中,使用以下函数来调用配置函数: uart_init(115200); //串口初始化为...开始接收一段数据 { delay_ms(10); //延时10ms,让DMA继续接收后面数据的同时,也能跑跑其它进程 printf("1:%s\r\n",USART_RX_BUF); //打印 memset

    3.7K50

    Simulink串口接收详解2用S-Function解析数据

    文件说明及下载 4.1 文件说明 4.2 文件下载 ---- 1.概述 在上一个博文 [Matlab] Simulink 串口接收详解1 中,讲了一下Serial Precive模块的简单用法,但是有时候我们接收数据是具有复杂定义的数据包...Data Type Conversion模块设置 还是一次接收一个16字节的uint8数组,实际代表了2个double的数据。...* time + d2) 接收效果如下图所示: ?...文件说明及下载 4.1 文件说明 QtSerialSend 文件夹: Qt写的串口发送程序; recCom.mdl:Matlab串口接收程序; recCom_Union.mdl:Matlab串口接收程序...,用S-Function进行解析; DataType.h : 定义发送和接收数据类型,被unPackData_Q.c调用; unPackData_Q.c:用C语言写的S-Function函数,编译后变成

    2.4K10

    【GD32L233C-START】4、串口不定长数据接收

    1、硬件连接 本文使用串口0,对应的引脚为PA9和PA10。 2、GPIO复用功能 可以看出,复用功能为AF7。...3、实现思路 利用串口接收相邻两个字符的时间来判断一串数据是否接收完成,如果超过设定的时间,还没有接收到下一个字符,则认为一串数据接收完成。...如果使用115200波特率,数据长度为8bit,停止位为1bit,那么接收一个字节大约需要,(1/115200)9=0.78ms。...那么就可以利用,接收完一个字符后,如果0.78ms之内没有下一个数据,那么就可以认为一串数据接收完成,考虑到单片机接收数据保存,这里设定超时时间为5ms。...4、核心代码 主要是利用串口接收中断和应用层超时。

    1.4K30

    MULE 无法接收TCP报文问题分析

    xx机器缓存字段接收区分发到应用服务端口之间的状态情况。...主机组无法自证所谓的: 所在的机器缓存字段接收区分发到应用服务端口之间的状态 前一天是梳理好开发的描述, 主机和网络组也做了些测试分析, 今天首先要做的就是询问他们的测试分析情况....APM监控, 我这边有2套: 开源APM - pinpoint 商业APM - Dynatrace AppMon 先装pinpoint, 装完pinpoint agent重启后, 发现拿不到请求数据....拿不到数据2个原因: mule 这个组件比较特殊, 没有对应的插件; 报文直接走的4层TCP协议, pinpoint无法抓到4层TCP. 所以最后还是安装Dynatrace了监控....一直在socketRead读取数据. (也是通过监控看到的) 所以,之前的事实: 换另一个mule(6040) app, 应用可以立马收到 并不是事实. 2. 肯定不是网络和主机的问题.

    1.4K30

    【STM32笔记】串口空闲中断接收不定长数据(DMA方式)

    在使用STM32的串口接收数据的时候,我们常常会使用接收中断的方式来接收数据,常用的是RXNE。这里分享另一种接收数据的方式——IDLE中断(PS:本文的例子运行在STM32F103ZET6上)。...IDLE就是串口收到一帧数据后,发生的中断。什么是一帧数据呢?比如说给单片机一次发来1个字节,或者一次发来8个字节,这些一次发来的数据,就称为一帧数据,也可以叫做一包数据。...当接收到1个字节,就会产生RXNE中断,当接收到一帧数据,就会产生IDLE中断。比如给单片机一次性发送了8个字节,就会产生8次RXNE中断,1次IDLE中断。 三、IDLE中断如何配置?...这是状态寄存器,当串口接收数据时,bit5就会自动变成1,当接收完一帧数据后,bit4就会变成1. 需要注意的是,在中断函数里面,需要把对应的位清0,否则会影响下一次数据接收。 ?...四、USART+DMA+IDLE接收不定长数据例程 1、USART初始化 ? 2、中断服务函数 ? 3、主函数 ? 4、运行结果 ?

    8K31

    2.2接收数据

    数据接收服务器的作用 数据接收服务器就跟它的字面意思一样,负责接收从设备发送来的数据。它在设备和系统之间起着桥梁作用。有很多种方法可以从设备把数据发送给服务器,其中具有代表性的包括以下两种方法。...使用一般的 Web 框架就可以制作数据接收服务器。设备用 HTTP 的 GET 方法和 POST 方法访问服务器,把数据存入请求参数和 BODY 并发送(图 2.6)。...数据格式 前面我们围绕用于接收数据的通信过程,即协议进行了讲解。事实上,数据就是通过协议来进行交换的。当然,就如我们前文所说,这条规则在物联网的世界里也是不变的。...举个例子,假设设备要发送传感器的值,此时除了发送传感器的值以外,还要一并发送数据接收时间、设备的机器信息以及用户信息等数据。自然,设备还会通知多个传感器的值和机器的状态。...如果能直接以二进制形式接收数据,是不是就能更迅速地处理数据了呢?由此,一种数据格式应运而生,它就是 MessagePack(图 2.19)。

    2.3K30

    jrtplib接收rtcp_qt tcpsocket 接收数据

    前言 JRTPLIB 是 C++ 语言编写的 RTP 库,它帮助我们封装了 RTP 协议细节,用户通过提供好的接口可以设置 RTP 包信息并发送到指定地址,也可以接收 RTP 包取出信息...本文仅介绍如何使用 JRTPLIB 发送/接收 RTP 数据包,我在这篇博客又介绍了如何使用 JRTPLIB 构造 RTP 数据包来荷载 H264 码流数据。 二....JRTPLIB接收RTP包程序 #include #include #include <jrtplib3...RTPTime::Wait(delay); } sess.EndDataAccess(); return 0; } 编译后运行如上,设置本地监听端口后就会开始等待 RTP 数据...RTPTime(10, 0), 0, 0); return 0; } 编译后运行如上,输入本地 UDP 使用的端口以及对端监听的端口,设置需要发送的 RTP 包数即可发送,发送后接收端打印的信息如下

    2.3K20

    单片机模块化程序: 给串口接收,发送数据都使用上缓存管理吧

    说明   前面几节围绕着串口发送和接收数据叨叨了很多.   这节给大家一个十分靠谱的串口接收,发送处理程序   这一节是建立在前面几节之上的,大家一定要把前面的几节学会!...开门见山   我接收数据也是使用数据缓存,使用STM32自带的串口空闲中断   如果接收到一条数据,就把数据存入数据缓存管理里面   主函数提取处理缓存里面的数据 1.创建缓存 ?...2.如果接收到一条数据,把数据存入缓存 ? 3.主循环提取并处理缓存的数据 ?...结语 1.大家看我的代码,很多代码还是按照以下方式处理的串口接收数据 究其原因: ① 各个单片机通用 ② 加入缓存处理意味着需要占用更多的单片机空间   单片机空间的需求又意味着需要容量更大的单片机

    1.3K10
    领券