[国产单片机] 有人会一根串口线进行双向通讯吗?

[复制链接]
1289|43
 楼主 | 2019-8-13 16:57 | 显示全部楼层 |阅读模式
我们都知道UART串口线都是有TX和RX的,一根作为接收,一根作为发送,进行着双向通讯,但是实际应用中可能由于资源又或者为了节约线材,遇到过一根串口线进行双向通讯,当然这个双向不是一直都双向的,它是比如在看机瞬间由A-->B进行通信,只发送一条指令给B,之后就是一直是由B->A进行通讯,若是开机瞬间没有接收到由A发出来的指令,B就不能正常给A发送正确的数据,请问各位大佬,有玩过一根串口线实现双向通讯的操作码?有啥思路,跪求赐教!!!

使用特权

评论回复

评论

QWE4562009 2019-8-15 10:59 回复TA
@xmar :他这个需求应该就是半双工 
xch 2019-8-14 11:28 回复TA
CEC 
xmar 2019-8-14 09:30 回复TA
TX、RX可同时进行称为全双工。TX、RX分时进行叫做半双工。翻一下通信基础资料,了解通信基本概念。用工程“行话”叙事更简单明了。 
haunghua 2019-8-14 09:27 回复TA
抱歉,说的有点模糊,我想表达的是除了地线,只用到一根串口线的双向通讯,有哪位大神能分享下吗,主要软件,硬件怎么操作也麻烦各位大神分享下哈,一起学习下 
| 2019-8-13 18:11 | 显示全部楼层
仿照MODBUS/485的一主多从半双工协议呗,全双工就别想了,一个232根本做不到。

使用特权

评论回复
| 2019-8-13 18:16 | 显示全部楼层
多从的TXD要加一个二极管互相连接成“线与”形式,防止一台从机发送跟其他从机TXD发生短路。

使用特权

评论回复
| 2019-8-13 19:21 | 显示全部楼层
能实现单工通讯,发的时候不接,接的时候不发~

使用特权

评论回复

评论

小鱼儿1045 2019-8-14 14:53 回复TA
@haunghua :看10楼 
小鱼儿1045 2019-8-14 14:50 回复TA
@haunghua :嗯 
haunghua 2019-8-14 12:21 回复TA
@小鱼儿1045 :你的意思是把MCU出来的两根TX,RX线一起接在同一根线,然后这一根线就接到另一个设备,但是软件在设计时,发送时就不RX引脚关闭,接收时就把TX引脚关闭?是拉低IO口叫做关闭吧? 
小鱼儿1045 2019-8-14 09:51 回复TA
@haunghua :软件就是发的时候关闭接,接的时候关闭发~ 
小鱼儿1045 2019-8-14 09:50 回复TA
@xma:谢谢指点,说错了~ 
haunghua 2019-8-14 09:44 回复TA
具体呢?能否分享下,软件怎么实现 
xmar 2019-8-14 09:35 回复TA
这个应该叫半双工。单工:总是A发、B收。 
| 2019-8-13 19:54 | 显示全部楼层
可以啊,在石油行业就有这种应用的。

使用特权

评论回复
| 2019-8-13 20:39 | 显示全部楼层
RS232waveform5.png
先看下RS232的波形,可见空闲的时候,电压是-,而电压为+表示起始位,当然出现起始位以后,按事先商量好的波特率位数校验位停止位的总时间内,-也表示有效信号,当停止位时间结束后,总线为-表示空闲。

使用特权

评论回复
| 2019-8-13 20:47 | 显示全部楼层
QQ图片20190813204556.png
根据这个原理,就可以这样连线了,二极管可以防止从机的TXD互相短路,比如某从机发送信号,必然有正电压,而其他从机不说话,一定是负电压,如果不加二极管,就会短路掉。

使用特权

评论回复

评论

haunghua 2019-8-14 09:20 回复TA
你这个图也是用到了两根线了呀,我说的是一根线 
| 2019-8-13 20:49 | 显示全部楼层
有一种用定时器和一个GPIO脚来实现类似串口数据通信的,接收端通过周期采样GPIO高地电平的时长来确定接收到的每1位数据是0或者1,是开始位或者停止位

使用特权

评论回复
| 2019-8-13 20:52 | 显示全部楼层
至于如何让只有一个从机发言,最简单的办法是通读MODBUS协议,RTU是用时间来区分不同数据帧,ASC是用ASCII码可打印字符来表达帧头帧尾。不要像半瓶子醋wh6ic那么胡思乱想,结果把自己钉在耻辱柱上面,附送耻辱柱链接。

http://bbs.21ic.com/icview-2827846-1-1.html

更好的办法是把7楼我发的图改成RS422,TXD和RXD变成差分,带载节点数量和数据线长度都可以大大的提高。

使用特权

评论回复
| 2019-8-13 21:10 | 显示全部楼层
本帖最后由 马甲的马甲 于 2019-8-13 21:14 编辑

可以用HT6221的数据波形用普通IO口模拟,早年做中央空调控制,MCU木有串口,就是这么干的。接受端口需要带中断的IO,普通的IO也可以,只是速率没法太高。当然你也可以用标准的串口;不过这都是用于短距通讯,不超过200米;
无标题.jpg

使用特权

评论回复
| 2019-8-13 22:06 | 显示全部楼层
我用得很多,一条信号线和一条地线,半双工双向通信。

使用特权

评论回复

评论

haunghua 2019-8-14 09:23 回复TA
能分享下吗? 
| 2019-8-13 23:39 | 显示全部楼层
可以是可以,牺牲抗干扰性能为代价

使用特权

评论回复
| 2019-8-14 08:04 | 显示全部楼层
其实至少两根线,一根线不可能。(含地线)

使用特权

评论回复

评论

haunghua 2019-8-14 09:24 回复TA
我说的比较含糊,其实我所表达的意思就是除了地线以外用一根线,有玩过吗?可以分享 下吗? 
| 2019-8-14 09:11 | 显示全部楼层
楼主这个主要是软件协议要求,有好多现成的局域网就是单线双向,可以做成令牌模式,或者一主多从模式。

使用特权

评论回复
| 2019-8-14 09:34 | 显示全部楼层
可以用美信1-wire系列产品,可以组建大网络,有各种用法,可以去了解一下

使用特权

评论回复
| 2019-8-14 09:42 | 显示全部楼层
这个是可行的,要求不高是可以用的

使用特权

评论回复
| 2019-8-14 10:32 | 显示全部楼层
你要地线干嘛直接用485两根线不就结了

使用特权

评论回复

评论

小研究 2019-8-14 20:02 回复TA
正解,既然有地线,为何不用差分方式?抗干扰性还好。 
| 2019-8-14 11:49 | 显示全部楼层
参考K线(Lin)通讯

使用特权

评论回复
| 2019-8-14 11:51 | 显示全部楼层
模拟收发就行了,好好规划下思路,当然如果你接的TXRX口可以省掉一个发或守,比如TX脚,你就用中断发记好了,再置为普通IO模拟接收就OK

使用特权

评论回复
 楼主 | 2019-8-14 14:31 | 显示全部楼层
masmin 发表于 2019-8-13 19:54
可以啊,在石油行业就有这种应用的。

软件上如何控制TX,RX呢,接线又是怎样接?

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /6 下一条

在线客服 快速回复 返回顶部 返回列表