Embedded UART速度可能错误

Embedded UART速度可能错误,embedded,serial-port,rs485,Embedded,Serial Port,Rs485,我的大脑被炸了,所以我想我会把这个传给社区 当向我的嵌入式系统发送1个字符时,它始终认为它收到2个字符。第一个接收的字符似乎映射到传输的字符(以某种未知的方式),而第二个接收的字符始终是0xff 以下是我观察到的: Tx char (in hex) Rx character (in hex), I left out the second byte (always ff) 31 9D 32 9B 33

我的大脑被炸了,所以我想我会把这个传给社区

当向我的嵌入式系统发送1个字符时,它始终认为它收到2个字符。第一个接收的字符似乎映射到传输的字符(以某种未知的方式),而第二个接收的字符始终是0xff

以下是我观察到的:

Tx char (in hex)    Rx character (in hex), I left out the second byte (always ff)
31                    9D
32                    9B
33                    99
61                    3D
62                    3B
63                    39
64                    37
65                    35
41                    7D
42                    7B
43                    79
我已经检查了我的时钟,它们似乎没问题。这个非工作版本和以前版本之间的唯一区别是我现在使用的是RS485芯片


我一直跟踪信号到MCU,它看起来很好(确认了RX引脚上的位值)

RS485与RS232在电气级别上有很大的不同(差分与单端,+/-6V与+15/-3V)-您的通信链路的两侧是否使用相同的协议?

如果是RS485,您有相同的协议吗总线的“默认状态”设置是否正确?停止位的正确数量如何

第一个接收到的字符似乎是 映射到传输的字符(在 (不知何故)

在每种情况下,TX字节左移1位,然后反转

例如:

31=00110001 9D=10011101


0x31您可能也会得到ChipHacker的良好响应。这是我的帖子(我懒得登录)。在测试之前,我有足够的信心确保一切正常。我正在使用sn75或其他rs485转换器。地平面良好,+/-信号干净(正确端接)。波特率被正确设置为9600无奇偶校验,1个停止位。如果可能的话,收听您自己的传输,作为冲突检测的手段。我个人曾遇到过这样的情况:一个字节已成功移出TX移位寄存器,我过早地释放rs485收发器的控制引脚,导致最后一个字符被删除传输(校验和)不正确。如果+和-线被交换,rs485转换器实际会工作吗?即uart端还会生成一个字节吗?如果是这样,那么这里生成的内容是有意义的,因为当停止位和开始位被反转时,uart会混淆。并且末尾额外的垃圾字节也是有意义的。如果一个开始位被错误地看到n最后,下一个字节将是所有逻辑字节。我想。我不在我的作用域和我的开发工具包附近。回答不错-当你在Stackoverflow上有标记时,谁需要作用域?@michael yes rs485链接将“运行”假设电线两端都是rs485收发器,则+/-连接倒置。如果你用这种方式接线,信号就会出现反转,这很可能就是问题所在。在485世界中,命名+/-端子(A/B)的方法存在冲突,因此请检查它。如果UART内置了信号反转选项,这可能比更改接线更简单。绝对!我有一个sn75。。。。USB/串行电缆侧有rs485芯片,微型电路板上有1个。很好。当你说“现在使用RS485芯片”时,我感到困惑——这让我觉得你只改变了链接的一端。不管怎样,看来马克可能已经通过检查解决了!是的,它应该很好,代码和我使用直接UART(rs232)时的代码一样,而且这些东西工作正常!我还确保在发送或接收rs485芯片时,有适当的选择器引脚设置rs485芯片的方向