打印
[STM32]

关于串口通讯的问题

[复制链接]
1765|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ksingy|  楼主 | 2015-12-18 08:25 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
现在手里有个东西要做在运行过程中需要用到232和485,用的是STM32F103的芯片,发现里面USART好像只有一组寄存器,而且232和485通讯是通过跳线来切换的,所以应该不能再一次由程序完成切换,想问下各位大大,有什么好的解决方案么?
我现在已经考虑过的有2种,第一是用IO口来模拟232通讯,这个原理比较简单,也一定可以实现,但需要多写一些代码。第二个是采用485转232接口,因为对485和232还不是非常理解,不知道只用这个接口但程序为485通讯的程序,是否可以完成对232的通讯。
PS:我也想顺便问下485和232的区别,在书里面学过的是物理特性等区别,主要是电平标准,传输距离,点对点还是点对多等等。但是他们的通讯协议好像从来没说过。个人理解是通过定义电平和波特率,完成了一组2进制的数据传输,至于如何对这组2进制的数据来“翻译”则是人为规定的。
额,写的有些乱== 各位大大凑合看下帮解释吧,我还是萌新一枚

相关帖子

沙发
JY-DX-JY| | 2015-12-18 11:15 | 只看该作者
把跳线接到IO口上,通过读取IO口的状态来切换232和485不就可以了吗?

使用特权

评论回复
板凳
ksingy|  楼主 | 2015-12-18 21:39 | 只看该作者
JY-DX-JY 发表于 2015-12-18 11:15
把跳线接到IO口上,通过读取IO口的状态来切换232和485不就可以了吗?

额,可以给讲稍微详细一些么?在这里会有三根线,意思是说把输入那根线的状态存下来,然后用IO口分别接到剩下两根线作输出,然后需要232就给控制232的复制状态,需485也是同理。还是说可以通过IO口和连线完成对两边的跳线的短路的切换呢?

使用特权

评论回复
地板
yizi0000| | 2015-12-19 09:33 | 只看该作者
是单片机上只有一个uart外设,可以连接到一个232转换芯片和485转换芯片,然后通过跳线来选择往两个电平转换芯片其中哪一个连接吗?

使用特权

评论回复
5
yizi0000| | 2015-12-19 09:34 | 只看该作者
硬件上如果只能2选1,改软件也没有用啊。

使用特权

评论回复
6
JY-DX-JY| | 2015-12-19 09:40 | 只看该作者
ksingy 发表于 2015-12-18 21:39
额,可以给讲稍微详细一些么?在这里会有三根线,意思是说把输入那根线的状态存下来,然后用IO口分别接到 ...

3根线,一个电源,一个地,一根输入线。比如跳线接通电源和输入就表示232,IO口读到高电平,就做232的处理;跳线接通地和输入就表示485,这时IO口读到低电平,就做485的处理。

使用特权

评论回复
7
NE5532| | 2015-12-19 16:27 | 只看该作者
485和232只是硬件接口,没有MAC层协议包含在里面,协议一般就是用的UART,楼主的需求我没有完全读懂,建议画张图上来,说明一下MCU、232和485的连接关系,还有你是只用其中之一,还是同时要使用两个端口,注意是同时哈。

使用特权

评论回复
8
ksingy|  楼主 | 2015-12-19 17:26 | 只看该作者
yizi0000 发表于 2015-12-19 09:33
是单片机上只有一个uart外设,可以连接到一个232转换芯片和485转换芯片,然后通过跳线来选择往两个电平转换 ...

嗯嗯,就是这个意思

使用特权

评论回复
9
ksingy|  楼主 | 2015-12-19 17:39 | 只看该作者
NE5532 发表于 2015-12-19 16:27
485和232只是硬件接口,没有MAC层协议包含在里面,协议一般就是用的UART,楼主的需求我没有完全读懂,建议 ...

G:\2015_forth\我整理下?\STM32开发板\图片\232、485、MCU关系图

嗯,这就就是它们三个的关系了,就是在运行过程中,既要与232通讯,又要与485通讯,不需要同时通讯,但需要两种通讯间经常的切换,因为刷新状态需要给基本所有的设备进行状态更新咯

使用特权

评论回复
10
ksingy|  楼主 | 2015-12-19 17:47 | 只看该作者
JY-DX-JY 发表于 2015-12-19 09:40
3根线,一个电源,一个地,一根输入线。比如跳线接通电源和输入就表示232,IO口读到高电平,就做232的处 ...

额,好像是我的需求没有表述清楚,我是在程序的运行过程中的通讯环节,需要用到485和232两种,在给出的例程中,这两种通讯的代码是一样的,想要切换通讯方式需要手动切一下跳线。而我希望是可以让232和485的通讯相对自动的进行切换,不要手工操作。

使用特权

评论回复
11
JY-DX-JY| | 2015-12-19 17:56 | 只看该作者
我不明白,既然代码是一样的,那还切换什么呢?
难道232和485硬件接口不一样吗?

使用特权

评论回复
12
JY-DX-JY| | 2015-12-20 09:42 | 只看该作者
你可以通过一个IO口控制一个开关达到自动切换的目的。

使用特权

评论回复
13
NE5532| | 2015-12-21 12:52 | 只看该作者
您的图在您自己的硬盘上,我们看不到,请作为附件上传。

使用特权

评论回复
14
xmar| | 2015-12-21 13:52 | 只看该作者
485与232的最大差别是485是半双工(收不能发,发不能收;也就是说,收完才能发,发完才能收。)、232是全双工(可同时收发),没有485的限制。

使用特权

评论回复
15
江米条| | 2015-12-21 16:35 | 只看该作者
串口和232芯片之间是TTL电平,串口和485芯片之间也是TTL电平,所以不用考虑电平的问题吧?

使用特权

评论回复
16
ksingy|  楼主 | 2015-12-22 15:50 | 只看该作者
NE5532 发表于 2015-12-21 12:52
您的图在您自己的硬盘上,我们看不到,请作为附件上传。

抱歉,头一次弄这个不太会用。

232、485、MCU关系图.PNG (11.88 KB )

232、485、MCU关系图.PNG

使用特权

评论回复
17
yizi0000| | 2015-12-23 07:50 | 只看该作者
图上和你描述的不对应啊,不是mcu上只有一个uart吗?

使用特权

评论回复
18
NE5532| | 2015-12-23 08:26 | 只看该作者
对,楼主的图和1楼描述对不上的,请楼主解释,大家再看。

使用特权

评论回复
19
ksingy|  楼主 | 2015-12-23 19:44 | 只看该作者
额,我后来又看了下数据手册,一开始没有注意的确是有2组以上的uart寄存器,232和485通讯的电路是如图所示的,我遇到的问题是需要在程序中用到232和485两种通讯,但要求不能采用手动插拔跳线的方式来切换两种通讯方式。
而如P7接口,需要采用跳线才可以切换232和485的通讯,所以我认为在完全依赖这个开发板上的情况下,完成两种通讯方式是物理不可实现的,所以想通过一些手段来完成。有两个想法,一个是跳线固定在485一边,在连接2个本来需要的485接口外加一个485转232接口,完成和232的通讯。另外一种想法是,单独划出一些项目中用不到的IO口,然后用这些IO口来仿真出一个232的通讯接口,完成232通讯。
PS:将切换232和485通讯的跳线接口、232通讯部分、485通讯部分的电路原理图上传。因为是开发过程是自学,而且课外时间有限,所以回复的有些慢,感谢各位大大们这一周多的回复。不知道这次有没有将我的问题表述清楚,这几天时间不是很多,还在分别调232和485的通讯例程,所以这部分还只是有想法没实践,所以认识有些肤浅的说。(⊙v⊙)

232、485切换P7口.PNG (24.67 KB )

开发板上切换232和485通讯方式的跳线接口

开发板上切换232和485通讯方式的跳线接口

232电路.PNG (161.18 KB )

232通讯部分电路图

232通讯部分电路图

485电路.PNG (128.02 KB )

485通讯部分电路原理图

485通讯部分电路原理图

使用特权

评论回复
20
aerwa| | 2015-12-24 10:02 | 只看该作者
你可以通讯的时候硬件上实现232和485同时在工作,232和485的协议可以做成一样,485只是多了个de控制脚,协议都是主从模式,收到后才发送。至于别人要不要就让他们插不同接口好了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

19

帖子

3

粉丝