利用循环队列接收串口数据实例!!!

2019-07-21 01:44发布

发现坛子里总是有人在问串口接收的问题,所以分享一下我一直用的一个方案,希望能帮到大家。

总体思路是:
1.利用串口接收中断进行数据接收。利用串口空闲中断统计接收到完整的数据包的个数。
ps:如果是485接口,利用串口空闲中断也可以判断总线是否处于空闲状态,方便判断485何时进行发送。
2.使用循环队列,需要开辟一个较大的全局buf,建议至少开辟大于数据包最大长度的3倍空间。
3.串口接收中断中使用以下2个函数把数据入队到循环队列里边
HAL_UART_Receive(&hlpuart1,&data,1,1000);//串口接收数据
Enqueue_One_Byte(&queue_rs485,data);//数据直接放入循环队列
4.主程序中直接判断数据包个数大于0再开始进行数据处理。
5.数据包大于0的情况下,再按照通信协议,逐字节进行判断,错误就直接出队扔掉,
正确则继续判断,直到捕获一包正确的数据就把整包数据出队。
6.出队正确后再按照通信协议进行数据处理就可以了。


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
头号菜鸟flight
1楼-- · 2019-07-21 06:50
赞 ,谢谢大佬 ,我去琢磨琢磨
1208
2楼-- · 2019-07-21 07:53
不错,环形队列用来处理485数据比较好,谢谢分享
haojie7511
3楼-- · 2019-07-21 11:57
正是需要的

一周热门 更多>