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

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

前言 Linux 开发时,经常会遇到串口通信来完成两个设备之间的交互。...然而,在串口通信中,我们通常不知道对方会发送多少数据,也不清楚数据何时发送完毕。简而言之,问题在于:我们如何确保接收到一帧完整的数据判断一个完整帧就需要知道,帧什么时候开始,又在什么时候结束。...判断完整帧方式 串口传输的数据长度不一,如果接收不完整,将直接影响到后续的业务处理。...接收中断与超时判断: 当串口收到数据时,会触发接收中断。...空闲中断法: 当串口在一段时间内没有接收到数据时,会触发空闲中断。 空闲中断实际上与接收中断的超时判断原理相似,但空闲中断是硬件自带的功能,而接收中断的超时判断则需要我们自己实现。

1.1K10

Linux基础(串口编程)

虽然以太网接口和USB接口也是以一个串行流进行数据传送的,但是串口连接通常特指那些与RS-232标准兼容的硬件或者调制解调器的接口。废话少讲,今天来解剖使用串口时的编程代码细节。...上面的代码是使用串口的第一步,来解释下都是啥意思。...来瞧瞧: 第21-22行,定义了一个用来配置串口属性的结构体: struct termios serial; bzero(&serial, sizeof(serial)); 第24行,将串口设置为raw...数据模式,即关闭掉字符回显、关闭输入输出时特殊的进度控制特殊字符,因为我们此时不需要使用串口来实现终端控制,因此这些功能都不需要: cfmakeraw(&serial); 第25-26行,很简单,设置输入输出波特率...// 设置字符尺寸为CS8 serial.c_cflag &= ~PARENB; // 关闭奇偶校验 serial.c_cflag &= ~CSTOPB; // 关闭停止位 第33、36行,刷新掉接收到数据并忽略掉他们

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

    Linux 查看本机串口方法

    最近在了解嵌入式方面的知识,就随笔记录一下: 查看Linux本机串口: 1、查看串口是否可用    可以对串口发送数据比如对com1口,echo /dev/ttyS0 2、查看串口名称使用    ls...-l /dev/ttyS*   一般情况下串口的名称全部在dev下面,如果你没有外插串口卡的话默认是dev下的ttyS*,一般ttyS0对应com1,ttyS1对应com2,当然也不一定是必然的; 3、...查看串口驱动    cat/proc/tty/drivers/serial 4、查看串口设备    dmesg | grep ttyS* 5、查一下板子上的串口有没有设备    grep tty/proc.../dev下应该有一个USB串口:/dev/ttyUSB0. 当一个串行卡或数据卡被侦测到时,它会被指定成为第一个可用的串行设备。...PC上的串口一般是ttyS,板子上Linux串口一般叫做ttySAC; 串口使用: 如果需要查看这个串口设备输出: cat ttyUSB0 如果需要对这个设备输入: echo yaoxu > ttyUSB0

    21.9K20

    Linux 串口的基本用法

    查看Linux本机串口: 1、查看串口是否可用 如果需要查看这个串口设备输出: cat ttyUSB0 如果需要对这个设备输入: echo yaoxu > ttyUSB0 常用的调试工具有: minicom...cutecom Linux系统可视化串口应用软件,使用上与Windows系统串口调试工具。 picocom 效果上类似 minicom 的精简版,设置比较简单,还可以有背景颜色。.../dev下应该有一个USB串口:/dev/ttyUSB0. 当一个串行卡或数据卡被侦测到时,它会被指定成为第一个可用的串行设备。...PC上的串口一般是ttyS,板子上Linux串口一般叫做ttySAC; 串口权限问题 临时调试解决 在使用串口进行通信时,经常需要使用指令来赋予用户读写的权限 $ sudo chmod 777 /dev...查看linux所有用户 使用 /etc/passwd 文件 使用任何一个像 cat、more、less 等文件操作命令来打印 Linux 系统上创建的用户列表。

    10K41

    12-Air202串口学习(Air202串口1接收到什么内容就回复什么内容)

    有人会想,不就是个串口收到什么就会什么的程序嘛!!!!!!!!!!!!!!有什么好说的!!...uartReadDataCntCopy = uartReadDataCnt; end end sys.timer_loop_start(TimerFunc4,10) --读取串口收到数据...,串口收到数据后,会以中断方式,调用read接口读取数据 sys.reguart(UART_ID,read) --配置并且打开串口 uart.setup(UART_ID,115200,8,uart.PAR_NONE...算啦说一下整体的思路 串口中断里面有一个负责接收数据的字符串变量,还有一个数据个数累加的变量 假设串口一次发100个数据,,然后间隔1S发一次 定时器是每间隔10Ms检测一次 如果数据没有接收完 uartReadDataCnt...uartReadDataCntCopy == uartReadDataCnt 所以....处理数据就可以了,,,接收到一条完整的数据了.... ?

    37830

    6-Air202串口学习(Air202串口1接收到什么内容就回复什么内容)

    有人会想,不就是个串口收到什么就会什么的程序嘛!!!!!!!!!!!!!!有什么好说的!!...uartReadDataCntCopy = uartReadDataCnt; end end sys.timer_loop_start(TimerFunc4,10) --读取串口收到数据...,串口收到数据后,会以中断方式,调用read接口读取数据 sys.reguart(UART_ID,read) --配置并且打开串口 uart.setup(UART_ID,115200,8,uart.PAR_NONE...算啦说一下整体的思路 串口中断里面有一个负责接收数据的字符串变量,还有一个数据个数累加的变量 假设串口一次发100个数据,,然后间隔1S发一次 定时器是每间隔10Ms检测一次 如果数据没有接收完 uartReadDataCnt...uartReadDataCntCopy == uartReadDataCnt 所以....处理数据就可以了,,,接收到一条完整的数据了.... ?

    40830

    8-Air202串口学习(Air202串口1接收到什么内容就回复什么内容)

    有人会想,不就是个串口收到什么就会什么的程序嘛!!!!!!!!!!!!!!有什么好说的!!...uartReadDataCntCopy = uartReadDataCnt; end end sys.timer_loop_start(TimerFunc4,10) --读取串口收到数据...,串口收到数据后,会以中断方式,调用read接口读取数据 sys.reguart(UART_ID,read) --配置并且打开串口 uart.setup(UART_ID,115200,8,uart.PAR_NONE...算啦说一下整体的思路 串口中断里面有一个负责接收数据的字符串变量,还有一个数据个数累加的变量 假设串口一次发100个数据,,然后间隔1S发一次 定时器是每间隔10Ms检测一次 如果数据没有接收完 uartReadDataCnt...uartReadDataCntCopy == uartReadDataCnt 所以....处理数据就可以了,,,接收到一条完整的数据了.... ?

    42940

    7-Air202串口学习(Air202串口1接收到什么内容就回复什么内容)

    有人会想,不就是个串口收到什么就会什么的程序嘛!!!!!!!!!!!!!!有什么好说的!!...uartReadDataCntCopy = uartReadDataCnt; end end sys.timer_loop_start(TimerFunc4,10) --读取串口收到数据...,串口收到数据后,会以中断方式,调用read接口读取数据 sys.reguart(UART_ID,read) --配置并且打开串口 uart.setup(UART_ID,115200,8,uart.PAR_NONE...算啦说一下整体的思路 串口中断里面有一个负责接收数据的字符串变量,还有一个数据个数累加的变量 假设串口一次发100个数据,,然后间隔1S发一次 定时器是每间隔10Ms检测一次 如果数据没有接收完 uartReadDataCnt...uartReadDataCntCopy == uartReadDataCnt 所以....处理数据就可以了,,,接收到一条完整的数据了.... ?

    26610

    嵌入式Linux串口编程

    简介 嵌入式Linux串口编程与Linux系统下的编程没有什么区别,系统API都是一样的。...RS232与RS485在使用上的区别,RS232是全双工的,只能对接一个设备串口设备。RS485是半双工的总线协议,一般可以挂多个传感器设备,半双工的意思是同时只能有一个设备向串口数据。...用到的API函数 函数 说明 open 打开设备,用于打开串口设备 fcntl 修改设备描述符属性参数 isatty 检测打开的描述符是否指向一个终端 tcgetattr 用来获取串口终端参数 cfmakeraw...将终端设置为原始模式,该模式下所有的输入数据以字节为单位被处理 tcflush 用于清空输入、输出缓冲区 tcsetattr 设置串口终端参数 read 读取数据 write 写数据 close 关闭串口设备...new_cfg = old_cfg; cfmakeraw(&new_cfg); //配置为原来配置 new_cfg.c_cflag &= ~ CSIZE; //用数据位掩码清空数据位的设置

    13.1K20

    串口通信(二) 数据校验

    前言 上一篇文章简单叙述了串口通信的参数,这一篇讲叙串口通信的校验方式。 初识Android串口通信(一) 为什么要校验传输数据?...串口通信校验码发送与接收方式 串口通信中的校验码通常是通过在数据包的末尾附加一个固定长度的校验码来实现的,发送方在发送数据时计算校验码并将其附加在数据包的末尾,接收方在接收到数据后同样计算校验码,并与发送方发送的校验码进行比对...,以判断数据传输是否正确。...接收端在接收到数据后,将对数据进行校验和计算,如果计算得到的校验和与接收到的校验和不一致,则说明数据可能被篡改或传输错误。...串口传输补位 在串口通信中,数据通常以字节为单位进行传输。有时候,为了保证数据的完整性和正确性,需要在数据中添加一些特殊的字节来进行补位。补位的方式有很多种,下面介绍两种常用的补位方式。

    1K10

    同步方式串口收发数据

    串口通信基础串口通信,也称为串行通信,是一种计算机硬件连接方式,允许计算机与其他设备进行数据交换。在Windows中,串口通常以文件的形式存在,可以通过文件I/O操作来进行数据的读写。2....配置串口打开串口后,需要配置串口的参数,如波特率、数据位、停止位和奇偶校验等。这可以通过GetCommState和SetCommState函数配合DCB结构体实现。...同步读取串口数据同步读取串口数据可以使用ReadFile函数。这个函数会阻塞调用线程,直到读取到指定数量的数据或发生错误。DWORD bytesRead;CHAR Buffer[64];if (!...同步发送串口数据同步发送串口数据同样使用WriteFile函数。这个函数也会阻塞调用线程,直到所有数据被发送或发生错误。...实际应用示例在实际应用中,同步串口通信通常用于数据量不大、实时性要求不高的场景。例如,在嵌入式设备调试、简单的串口设备控制等场景中,同步串口通信可以提供简单可靠的解决方案。

    89900

    关于串口接收处理数据

    一,处理思路(定时器模拟空闲中断)   判断串口收到一条完整的数据以后置位一个标志位,主循环判断此标志位处理数据.   ...如何判断收到一条完整的数据:     无论做的什么串口通信,数据总是一条一条的发送,发送完一条再发送另一条,发送每一条数据之间存在时间间隔,串口接收数据的时候控制一个     变量在定时器里面累加,...如果串口一直接收数据这个变量永远累加不到期望的数值,如果串口接收     数据以后不再接收数据,变量会累加到期望的数值,然后就是判断收到一条完整的数据....二,由于每个单片机串口配置的写法不一,只截图说明使用 ? ? ? 串口收到数据时:Usart1ReadCnt++;  Usart1IdleCnt = 0; 定时器 判断Usart1ReadCnt !...DMA 同时开启DMA发送完成中断,DMA发送完成中断里面也要判断内存里面有没有需要发送的数据,有的话就重新配置DMA, 说完发送,再说接收 我的想法是 数组+DMA+串口空闲中断/定时器 串口空闲中断和定时器的作用都是判断收到一条完整的数据

    3.4K31

    异步方式串口收发数据

    本文将重点介绍如何在Windows平台上使用异步方式进行串口数据的收发。1....异步串口通信概述异步串口通信是指在数据传输过程中,发送方和接收方不需要严格的时钟同步,而是依赖于数据包的起始位和停止位来标识数据的开始和结束。这种方式适用于数据传输速率较低、传输距离较短的场景。2....异步串口通信的特点异步串口通信具有以下特点:字符为单位:以字符为单位进行数据传输。起始位和停止位:每个字符的开始和结束由起始位和停止位标识。无外部时钟同步:发送方和接收方不需要外部时钟信号同步。...ReadFile和WriteFile:用于同步读取和写入串口数据。SetCommMask和WaitCommEvent:用于设置串口事件和等待事件。SetupComm:用于设置串口的输入输出缓冲区大小。...}4.2 配置串口使用SetCommState函数配置串口的波特率、数据位、停止位和奇偶校验等参数。

    84100

    php上传后台无法收到数据解决方法

    php无法收到数据 form表单是很常用的html标签,它能为我们提交数据到服务器,上传文件等。有时后台程序却无法接收数据,下面看看解决方法吧。...一、_POST接收不到数据,_GET能接收到数据问题 1、如果头信息content-type为“content-type:application/x-www-form-urlencoded” ,这种传输是以表单的方式提交数据...2、如果头信息content-type为“content-type:application/json“,这种传输是以json方式提交数据,php需要使用file_get_contents(“php://...二、文件上传时,无法接收到_POST数据和_FILES数据 原因:文件大小超出了php.ini设置的post_max_size,导致POST数据为空,FILES数据也为空。...以上就是php无法收到数据解决办法的详细内容,更多请关注ZaLou.Cn其它相关文章!

    2.4K41
    领券