串口数据接收处理的一种方法

本文探讨了在处理串口通信中如何接收完整数据包的问题。通过设置定时器监控数据接收,当在预设时间内未收到新数据,视为接收完成。接着介绍了一种状态机方法来处理和校验接收到的数据,包括帧头、帧尾识别以及数据校验。该方法适用于桌面应用和微控制器,如在Qt上位机中实现。
摘要由CSDN通过智能技术生成

在处理串口接收到的数据时,面临的问题主要是是如何接收到完整的数据,对于数据如何处理等。不管是在微控制器中使用串口还是在桌面应用中使用串口,都需要解决这个接收的数据包处理的问题。最近在做一个应用,主要是上位机发送指令,查询下位机相关的数据。假设一帧数据是由10字节构成的,指令和应答数据均为10字节,应答数据发送频率为5Hz。有两个问题需要解决,第一个就是数据帧什么时候接收完成,第二个接收完成如何处理。
针对第一个问题,我的方法是,利用一个定时器来监控数据是否接收完成,接收一个数据就重新装载定时器的计数值,定时时间应该在ms级别(10个字节也可能会多发或少发),假设是115200的波特率,那么10个字节的数据时间大概在0.9ms ,考虑到可能会有阻塞,可以定时5ms,5ms没有接收到新的数据,就说明接收已经完成了,颗粒有点像看门狗的思路。这个问题解决后,就要解决第二个问题了。我的上位机使用Qt来做的,给出一个代码,代码中用到的数据需要在头文件中定义:

/*read data*/
void Widget::readSerialData(void)
{
	timerMonitorSerial->start(5);
	QByteArray buf;
	buf=serialPort->readAll();
	for(unsigned char index=0;index<buf.size();index++)
	{
		receiverQueue.enqueue(buf.at(i)&0xFF);
	}
	buf.clear();
}
/*time out,receive complete*/
void Widget::serialDataResolution()
{
	timerMonitorSerial->
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值