OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...

查看: 1643|回复: 15

51单片机RS485通讯发送和接收不匹配的原因

[复制链接]

  离线 

7

主题

19

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2017-3-1
在线时间
34 小时
发表于 2018-5-15 22:11:16 | 显示全部楼层 |阅读模式
10金钱

如果大家也有产生这种现象的,一起交流交流啊,有大神能提点一下就更好了!谢谢,万分感谢!


大家好,我之前有一块板子,是51的板子,这两天在学RS485模块的时候,发现好像板子的例程与实验结果不一样,
实验过程是把板子按照规定的方式连接,然后485两个接线柱引出接到RS232转RS485然后再接到电脑,
程序的功能是在实验串口发送一个数字,然后单片机再返回一个一样的数字
但是在实验过程中,发回的数字与发送的却并不一样,例如我发送的是十六进制的1,返回的是十六进制的7F,而且是每个数字都有固定的对应量,像是映射一样。。。。。
我与老师和同学聊过,同学基本没接触过(主要是接触232,而且我的232也好用。。。),
其中一位老师的建议是,(1)检查硬件,如导线之类的,(2)或检查软件,(3) 拿示波器观察波形,如果发射端、传输导线。接收端的电平不一样,那么就是导线问题(这个得明天找实验                                         室老师借)
                                    但我觉得 硬件应该没问题吧,因为返回数字和发送对应,并不是乱码,说明连接是正确的,干扰应该也没有,但是软件的话我觉得套路很正常,用SBUF寄存器的功                                       能,甚至都不做什么修改,出现错位就比较头疼
或者另外一位老师的说法,是否存在一些公式转换的问题,因为同样的程序套路,232好用,485错位,那么是不是我的485程序里面有一些底层的程序错位,公式错误,导致数据错位,这个就比较玄乎了,不过缺少类似的经验,返回的数据到时有一定的规律,给大家看一看吧,还挺有意思的
                                         1————————7F                 2————————3F
                                         3————————7E                 4————————1F   
                                         5————————7D                 6————————3E   
                                         7————————7C                 8————————0F   
                                         9————————7B                10————————07   
                                       11————————77                 12————————3B  
                                       13————————76                 14————————1D   
                                       15————————75                 16————————3A  
                                       17————————74                 18————————0E  
                                       19————————73                 20————————03

如果大家也有产生这种现象的,一起交流交流啊,有大神能提点一下就更好了!谢谢,万分感谢!



IMG_20180515_214119_1.jpg

1.jpg 2.jpg
3.jpg

最佳答案

查看完整内容[请看2#楼]

刚刚发错 大概知道什么问题了,你的485处于发送的时候,切记要关闭你的485的接收(因为485只能单工通讯,发送的时候你去接收SBUF的数据也没意义),这时候一定不要去接收485的数据,至于什么原因,你按我说的去验证一下再说。 此外提醒一下,你改一下程序,你不要让单片机发送数据,你用串口助手给单片机发数据a或b,然后在程序中判断是不是收到a或b,如果是,亮一下灯。以验证485的接收有没有问题。
回复

使用道具 举报

  离线 

0

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2018-5-19
在线时间
5 小时
发表于 2018-5-15 22:11:17 | 显示全部楼层
刚刚发错
大概知道什么问题了,你的485处于发送的时候,切记要关闭你的485的接收(因为485只能单工通讯,发送的时候你去接收SBUF的数据也没意义),这时候一定不要去接收485的数据,至于什么原因,你按我说的去验证一下再说。
此外提醒一下,你改一下程序,你不要让单片机发送数据,你用串口助手给单片机发数据a或b,然后在程序中判断是不是收到a或b,如果是,亮一下灯。以验证485的接收有没有问题。
回复

使用道具 举报

  离线 

2

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
640
金钱
640
注册时间
2013-6-5
在线时间
96 小时
发表于 2018-5-16 00:59:37 | 显示全部楼层
USB转232的线有问题,用232转485最好用原生串口,实在没有,给232转485提供个电源,或用直接USB转485的。
回复

使用道具 举报

  离线 

0

主题

397

帖子

0

精华

高级会员

Rank: 4

积分
976
金钱
976
注册时间
2018-2-7
在线时间
106 小时
发表于 2018-5-16 09:21:36 | 显示全部楼层
可以先把485模块去掉,直接用单片机串口给电脑串口发数据,测试单独的串口是否正常。或者直接用两个USB转串口中间用485模块对接,直接用电脑上的串口助手互发数据,测试485模块是否正常。
回复

使用道具 举报

  离线 

7

主题

19

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2017-3-1
在线时间
34 小时
 楼主| 发表于 2018-5-16 10:23:42 | 显示全部楼层
正点原子公众号
zhxzhx 发表于 2018-5-16 00:59
USB转232的线有问题,用232转485最好用原生串口,实在没有,给232转485提供个电源,或用直接USB转485的。

您好,我想问一下,您说的线有问题,是指的银色的线有问题,还是黄绿色的线有问题,这个问题是干扰还是什么?对于原生串口没有太明白意思。。。。自己好像真的是个小白,
我还有一个这样的USB转485,刚才试了一下还是一样的结果,所以想问一下线的问题,
USB转485.jpg

普通线

普通线

银色线

银色线
回复

使用道具 举报

  离线 

2

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
640
金钱
640
注册时间
2013-6-5
在线时间
96 小时
发表于 2018-5-17 22:05:38 | 显示全部楼层
Liuyangliuyang 发表于 2018-5-16 10:23
您好,我想问一下,您说的线有问题,是指的银色的线有问题,还是黄绿色的线有问题,这个问题是干扰还是什 ...

有问题的是银色线,你的232转485的电源来自信号,而USB转的232输出信号提供不了太大的电流。
回复

使用道具 举报

  离线 

2

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
640
金钱
640
注册时间
2013-6-5
在线时间
96 小时
发表于 2018-5-17 22:08:08 | 显示全部楼层
原生串口,就是计算机主板上带的串口,这个信号输出电流比较大,你USB可以直接转485,这个供电来自USB的5V,就没有这个问题。
回复

使用道具 举报

  离线 

2

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
640
金钱
640
注册时间
2013-6-5
在线时间
96 小时
发表于 2018-5-17 22:10:58 | 显示全部楼层
另外还有一个可能,单片机自己控制485收发的话,发完立刻转接受状态,不要延时。
回复

使用道具 举报

  离线 

2

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
640
金钱
640
注册时间
2013-6-5
在线时间
96 小时
发表于 2018-5-17 22:12:55 | 显示全部楼层
你把16进制转2进制,看看是不是有缺位或串位现象,有的话就是485收发转换不及时。
回复

使用道具 举报

  离线 

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2018-5-7
在线时间
4 小时
发表于 2018-5-17 22:39:52 | 显示全部楼层
感觉像485收发转换不及时
回复

使用道具 举报

  离线 

14

主题

416

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2507
金钱
2507
注册时间
2013-6-27
在线时间
327 小时
发表于 2018-5-17 23:09:05 | 显示全部楼层
估计是代码逻辑问题,把逻辑理清楚,TI一个清除就可以了,两个估计就会乱掉
让我们的思维驾驭在电的速度之上!
回复

使用道具 举报

  离线 

0

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2018-5-19
在线时间
5 小时
发表于 2018-5-25 13:33:01 | 显示全部楼层
1.你先把485两个端子的线调换一下,看看有没有问题;2.如果还有问题,你买一个485匹配器。我们用485做电表的通讯,用了好多年了,我们都是用485匹配器来观察485的数据的,可以加我微信baofeng_zouyu交流一下
回复

使用道具 举报

  离线 

0

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2018-5-19
在线时间
5 小时
发表于 2018-5-25 13:59:37 | 显示全部楼层
大概知道什么问题了,你的485处于发送的时候,切记要关闭你的485的接收(因为485只能单工通讯,发送的时候你去接收SBUF的数据也没意义),如果这时候一定不要去接收485的数据,至于什么原因,你按我说的去验证一下再说。

此外提醒一下,你改一下程序,你不要让单片机发送数据,你用串口助手给单片机发数据a或b,然后在程序中判断是不是收到a或b,如果是,亮一下灯。以验证485的接收有没有问题。
回复

使用道具 举报

  离线 

1

主题

2

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2018-5-29
在线时间
3 小时
发表于 2018-5-29 21:19:57 | 显示全部楼层
楼主你好,我今天遇到的问题和你的一模一样,我想请问一下你的问题解决了吗?
回复

使用道具 举报

  离线 

7

主题

19

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2017-3-1
在线时间
34 小时
 楼主| 发表于 2018-5-31 21:55:59 | 显示全部楼层
18373354099 发表于 2018-5-29 21:19
楼主你好,我今天遇到的问题和你的一模一样,我想请问一下你的问题解决了吗?

额,我觉得是硬件问题,所以又买了一个模块。。。功能可以实现,现在出现的问题是波特率设置不对,可能是硬件有问题。。。感觉调不粗来。。。
回复

使用道具 举报

  离线 

7

主题

19

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2017-3-1
在线时间
34 小时
 楼主| 发表于 2018-5-31 21:56:48 | 显示全部楼层
18373354099 发表于 2018-5-29 21:19
楼主你好,我今天遇到的问题和你的一模一样,我想请问一下你的问题解决了吗?

你是自己的板子还是什么模块,对应的程序可以发给我看看,1135973344@qq.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则




关闭

必看:"原子哥”力荐上一条 /1 下一条

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-8-17 02:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */