打印
[STM32F1]

2块stm32的串口使用max485通讯,发现数据错位

[复制链接]
4289|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yyh1910|  楼主 | 2014-4-22 17:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很奇怪的问题,2块stm32usart3通过max458通讯。一个一直发另一个一直接收,接收到的数据总数错位,数据内容是正确的,只有按键复位接收的stm32,接收数据的顺序才正常。发送的stm32通过明华的485转232在串口调试工具看过,发送的数据顺序和内同都正确的
沙发
mmuuss586| | 2014-4-22 17:37 | 只看该作者
那说明接收程序没处理好,是不是收到第1个数据,变成发送的第2个数据?
通讯协议上好好理下,容易解决的。

使用特权

评论回复
板凳
airwill| | 2014-4-22 22:12 | 只看该作者
应该是接受中断服务的问题, 注意, USART 的 接收寄存器是双缓冲的。可以在开始接收前通过多一次读数据寄存器, 清空接收缓冲。

使用特权

评论回复
地板
zcl143| | 2014-4-23 00:19 | 只看该作者
感觉可能是缓冲的问题,楼主没有详细的说明按键复位后是接收到的的单个数据包正常吗。如果是这样那应该就是楼上说的原因

使用特权

评论回复
5
yyh1910|  楼主 | 2014-4-23 08:46 | 只看该作者
airwill 发表于 2014-4-22 22:12
应该是接受中断服务的问题, 注意, USART 的 接收寄存器是双缓冲的。可以在开始接收前通过多一次读数据寄 ...

开始接收前多读一次usart->dr,是指在初始化后读一次还是中断前读一次

使用特权

评论回复
6
b335002090| | 2014-4-23 10:09 | 只看该作者
注意RS485的使能端信号控制,在发送完后就把使能端职位为接收状态。建议你从使能端方面去看看

使用特权

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

本版积分规则

48

主题

96

帖子

1

粉丝