半双工通信模块碰撞问题

本文探讨了SX1278模块在半双工通信中遇到的碰撞问题,并提出了两种解决方案:一是使用两对模块实现全双工通信;二是采用环线列车法,通过数据列车机制解决碰撞,提高传输效率。

前言须知

    本文章假定读者已经熟悉单片机串口基本使用,若您对单片机串口开发还不熟悉,建议先快速学习如何使用单片机串口再来阅读本文章。本人开发水平有限,若有不足之处,欢迎提出。

发现问题

    大四寒假制作毕业设计,考虑到通信距离问题,于是买了一对sx1278模块(正点原子的),等读了相关的文档后才发现这种模块只能做半双工通信,也就是说,如果A、B两个模块同时发送数据那就会发生碰撞,导致双方都不能正确接收数据。那该怎么解决碰撞问题呢?如下有两种方案。

A方案:两对SX1278模块,实现全双工通信

这是我最先想到的方案,如下图:
在这里插入图片描述
    A1—>A2以及B1<—B2,这两条线路都是单工通信,合起来便成了全双工通信。已知STM32至少都有三个串口,两个用于SX1278的数据收发。
    这时又出现了新的问题。STM32要和两个串口模块通信(如同时与A1和B1通信),多个串口同时运作有冲突的可能。比如,串口2在收数据时,又有串口3发数据的需求。这时我的做法是让串口2使用DMA传输,让串口3使用中断方式来传输(反正大部分时候DMA传输是不占用CPU的,只有在传输完毕或错误时才短暂地需要CPU)。
    通过两对半双工模块来解决通信碰撞,顺便连全双工通信都实现了,确实是个可行的方案,只是成本也跟着翻倍了。

B方案:环线列车法(自己瞎取的名字)

示意图如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值