This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430G2553:传入数据的串行处理不可靠

Guru**** 2589245 points
Other Parts Discussed in Thread: ENERGIA

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/661089/msp430g2553-unreliable-serial-processing-of-incoming-data

部件号:MSP430G2553
主题中讨论的其他部件:Energia

您好,

我尝试通过串行读取26字节固定大小的数据。

我有另一个微控制器正在进行数据处理,它通过串行链路将数据发送到MSP430/ Launchpad开发板。

外部微控制器的TX引脚连接到WFP引脚1.1 (RX UART)并发送26个字节。

我收到大部分数据,但有时数据会丢失。

MSP根本不会获得传输的字节。

当我连接另一个基于MSP的开发板时,我得到相同的结果。

相同的代码适用于Arduino Uno板。  
我还将另一个微控制器的TX引脚直接连接到USB->serial dongle,并将接收到的数据进行六边转换。
它是100 % 正确传输的。

更改波特率不能修复它。
有效的是在发送方端的每个字节传输后增加10毫秒的延迟,但这是一个疯狂的“修复”,我无法使用。

附加的代码读取一个字节,如果它是一个开始指示符,它将尝试读取其他25个字节并填充缓冲区。
这是代码中断的位置。  
我花了一些时间才找到这种奇怪的行为。

我使用了Energia 1.6 .10E18 (目前有最新版本可用),但我也尝试了基于云的在线工具,问题仍然存在。

感谢您的任何想法。

e2e.ti.com/.../broken_5F00_serial_5F00_comm.energia.ino.txt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    首先,在您读取所有字节之前,不要发送"获取:"消息。 我不知道Energia如何在串行对象中进行缓冲,但我看到MSP430端可能会在事务处理过程中停止10个字符(10毫秒),这可能会导致缓冲区溢出。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的提示,但没有什么区别。
    事实上,我尝试了很多次,发布的代码只是一个简单的故障证明。

    我*认为*对于MSP平台,布线(Arduino框架)中的某些内容已损坏。
    其他人尚未发现的东西。
    我想这可能与UART缓冲区轮询和丢失磁头/尾部或沿着这条线的其它内容有关。
    遗憾的是,我目前没有时间深入探讨这一问题。
    我想这不是硬件问题,以前就会注意到这一点。

    所以今天我找到了一个非常丑陋的问题解决方案,我将留在这里,让那些在我之后遇到同样问题的人来解决。


    我将RX和TX两条线路连接到另一个MCU上的TX和RX。
    每次我从另一个MCU向启动板发送一个字节时,我都会将同样的字节从启动板再次发送到MCU。
    我在另一个MCU上检查serial.available ()并在那里设置超时标志。
    所以如果我在20毫秒内没有得到任何字节,我会再次发送相同的字节。
    收到一个字节后,我会检查它是否与我之前发送的字节匹配,如果它良好,我将转到下一个字节。

    这是一个非常丑陋的修复方法,但它解决了这项工作的问题。

    Energia平台是一个很难使用的平台,如果我不需要使用它来完成这项工作,我根本不会使用它。