[STM32] 关于串口通讯的问题

[复制链接]
 楼主| 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转换芯片,然后通过跳线来选择往两个电平转换芯片其中哪一个连接吗?
yizi0000 发表于 2015-12-19 09:34 来自手机 | 显示全部楼层
硬件上如果只能2选1,改软件也没有用啊。
JY-DX-JY 发表于 2015-12-19 09:40 | 显示全部楼层
ksingy 发表于 2015-12-18 21:39
额,可以给讲稍微详细一些么?在这里会有三根线,意思是说把输入那根线的状态存下来,然后用IO口分别接到 ...

3根线,一个电源,一个地,一根输入线。比如跳线接通电源和输入就表示232,IO口读到高电平,就做232的处理;跳线接通地和输入就表示485,这时IO口读到低电平,就做485的处理。
NE5532 发表于 2015-12-19 16:27 | 显示全部楼层
485和232只是硬件接口,没有MAC层协议包含在里面,协议一般就是用的UART,楼主的需求我没有完全读懂,建议画张图上来,说明一下MCU、232和485的连接关系,还有你是只用其中之一,还是同时要使用两个端口,注意是同时哈。
 楼主| ksingy 发表于 2015-12-19 17:26 | 显示全部楼层
yizi0000 发表于 2015-12-19 09:33
是单片机上只有一个uart外设,可以连接到一个232转换芯片和485转换芯片,然后通过跳线来选择往两个电平转换 ...

嗯嗯,就是这个意思
 楼主| 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通讯,不需要同时通讯,但需要两种通讯间经常的切换,因为刷新状态需要给基本所有的设备进行状态更新咯
 楼主| ksingy 发表于 2015-12-19 17:47 | 显示全部楼层
JY-DX-JY 发表于 2015-12-19 09:40
3根线,一个电源,一个地,一根输入线。比如跳线接通电源和输入就表示232,IO口读到高电平,就做232的处 ...

额,好像是我的需求没有表述清楚,我是在程序的运行过程中的通讯环节,需要用到485和232两种,在给出的例程中,这两种通讯的代码是一样的,想要切换通讯方式需要手动切一下跳线。而我希望是可以让232和485的通讯相对自动的进行切换,不要手工操作。
JY-DX-JY 发表于 2015-12-19 17:56 | 显示全部楼层
我不明白,既然代码是一样的,那还切换什么呢?
难道232和485硬件接口不一样吗?
JY-DX-JY 发表于 2015-12-20 09:42 | 显示全部楼层
你可以通过一个IO口控制一个开关达到自动切换的目的。
NE5532 发表于 2015-12-21 12:52 | 显示全部楼层
您的图在您自己的硬盘上,我们看不到,请作为附件上传。
xmar 发表于 2015-12-21 13:52 | 显示全部楼层
485与232的最大差别是485是半双工(收不能发,发不能收;也就是说,收完才能发,发完才能收。)、232是全双工(可同时收发),没有485的限制。
江米条 发表于 2015-12-21 16:35 | 显示全部楼层
串口和232芯片之间是TTL电平,串口和485芯片之间也是TTL电平,所以不用考虑电平的问题吧?
 楼主| ksingy 发表于 2015-12-22 15:50 | 显示全部楼层
NE5532 发表于 2015-12-21 12:52
您的图在您自己的硬盘上,我们看不到,请作为附件上传。

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
yizi0000 发表于 2015-12-23 07:50 来自手机 | 显示全部楼层
图上和你描述的不对应啊,不是mcu上只有一个uart吗?
NE5532 发表于 2015-12-23 08:26 | 显示全部楼层
对,楼主的图和1楼描述对不上的,请楼主解释,大家再看。
 楼主| 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⊙)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
aerwa 发表于 2015-12-24 10:02 来自手机 | 显示全部楼层
你可以通讯的时候硬件上实现232和485同时在工作,232和485的协议可以做成一样,485只是多了个de控制脚,协议都是主从模式,收到后才发送。至于别人要不要就让他们插不同接口好了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

19

帖子

3

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