linux 不定长数据接收,单片机串口接收不定长数据的通用方法

本文介绍了适用于各种单片机的串口接收不定长数据的通用方法,通过设置延时计数器判断一帧数据的结束。在STM32和51单片机中,中断函数接收到字节后保存到缓冲区,主函数通过计数器判断数据接收完成,并处理接收到的数据。
摘要由CSDN通过智能技术生成

原标题:单片机串口接收不定长数据的通用方法

135d6eec00130a3bff6022d15ec94f1d.png

我之前写过一篇文章关于STM32单片机接收不定长数据的方法,这篇文章可以在瑞生网(https://Mrs.Pub)搜索关键字“不定长”看到,不过...

这个只是针对某些STM32单片机的方法,比如F1系列的就可以使用,然而...

我在后续使用其它STM32系列的单片机时,发现这个方法不能用,比如L0系列的,我用IDLE判断,总是还没有接收完一帧数据,就会发生IDLE中断,于是...

我只能用下面的通用方法来解决了,这个通用的方法,其实原理和使用IDLE的原理一样:

接收完一个字节以后,如果超过了一定的时间,就认为是接收完一帧数据了。首先...

我们要知道,串口是接收一个字节,就会发生一次中断,如果一帧数据包含10个字节,就会发生10次中断。在接收一个字节以后,会紧跟着接收下一个字节,如果时间超了一定值,就代表一帧数据已经发完了。

下面,我分别用STM32和51单片机的代码来演示一下这个通用代码的实现。

1、STM32(以STM32L0系列为例)

串口中断函数:

voidLPUART1_IRQHandler( void) // 低功耗串口1中断服务函数{if(__HAL_UART_GET_FLAG(&hlpuart1,

Linux C编程中,接收不定数据串口通信可以通过以下的步骤实现: 1. 打开串口:使用open系统调用打开串口设备文件,例如"/dev/ttyS0"。确保正确设置串口的baud rate、数据位、校验位和停止位等参数。 2. 配置串口:通过ioctl系统调用设置串口的属性,例如禁用规范模式,并设置输入输出波特率、数据位、校验位和停止位等参数。 3. 接收数据:使用read系统调用从串口读取数据。由于数据不定,可以考虑一次读取一个字节,并将其存储在一个缓冲区中。 4. 处理数据:根据接收数据进行处理。可以通过循环读取,直到接收到特定的结束标志或达到预定的数据度。也可以通过超时机制或读取的字节数判断数据接收完成。 5. 关闭串口:使用close系统调用关闭串口设备文件。 需要注意的是,在接收不定数据时,可能会遇到以下一些问题: 1. 数据的结束标志:如果数据中没有特定的结束标志,在处理数据时可能需要使用自定义的结束标志或者通过计数器判断数据度。 2. 超时处理:如果数据接收时间较,可以通过设置串口的超时时间,当一定时间内没有数据到达时,进行超时处理。 3. 数据缓冲区大小:由于数据度不确定,需要考虑缓冲区的大小,确保足够存储接收数据。 总之,在Linux C中接收不定数据串口通信,需要打开和配置串口,循环读取数据并进行处理,最后关闭串口。通过合适的结束标志、超时处理和缓冲区管理等技术,可以实现稳定、可靠地接收不定数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值