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.

[参考译文] CCS/MSP430FR5994:MSP430FR5994:UART–未接收到第一个字节、传输仅从第二个字节开始

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/957838/ccs-msp430fr5994-msp430fr5994-uart-the-first-byte-is-not-received-transmission-starts-only-from-the-second-byte

器件型号:MSP430FR5994

工具/软件:Code Composer Studio

您好!

我遇到的问题是、在接收到的数据字符串中、MSP430FR5994会经常(但不是始终)忽略传入字符串的第一个字节(完全不接收)。 当我使用一个外部"串行端口监控器"软件时、它显示所有传入字节都是正确的。 因此问题必须在 MSP430FR5994中断函数中的某个位置、开关会忽略第一个接收到的字节。 所有其它字节都被很好地接收。 只要第一个字节是地址字节、我不知道是否接收到第一个字节、或者如果没有接收到第一个字节、就不可能说"总是忽略第一个字节、然后用第二个字节开始传输"、正如我在某些论坛中所读的那样。

如需了解相关信息、MSP430FR5994发送数据字符串的效果良好。 我将 P54和 P55与115200bps 用于此 UART。

void initUART2 (void)  //UART_2
{  UCA2CTLW0 = UCSWRST;
   UCA2CTLW0 |= UCSSEL_SMCLK;
   UCA2BR0=2;
   UCA2BR1 = 0x00;
   UCA2MCTLW |= UCOS16 | UCBRF_2 | 0x0300;
   UCA2CTLW0 &=~UCSWRST;
   UCA2IE |= UCRXIE;
   Received_bytes=0;
   unsigned int i;
   对于(i=0 <LENGHT_BUFFER;i++)
      {recbuf[i]=0x00;}


#pragma vector=USCI_A2_vector
_interrupt void usart2_Rx (void)
{ recbuf[received_bytes]= UCA2RXBUF;
  Received_bytes+=1;


int main (空)
{ ...
  initPorts();
  initUART2();
  (笑声)
  while (1)
     {...   //使用 recbuf[]执行某些操作
     如果(没有其他可做的事情)
        {LPM1;}
     }

为了安全地接收 MSP430FR5994的所有字节、我应该更改什么?

非常感谢你的帮助。

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

    您好!  

    1.将波特率降低到较低速度(如9600)时、问题是否仍然出现?  

    2.您是否使用了低功耗模式来接收 UART 数据? 如果是、则需要考虑 UART 时钟源 SMCLK 唤醒时间。 用户指南 slau367的第24.3.14节对此进行了介绍。  

    谢谢、  

    Lixin  

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

    非常感谢您提供此信息。

    很遗憾、我无法使用9600对其进行测试、因为我们的传感器只能在115200bps 下工作。

    2. LPM 模式似乎是问题的根源。 当我移除行"LPM1;"时、UART 再次正常工作。 未检测到丢失的第一个字节、并且所有字节均已正确接收。

    有人知道使用 LPM1中的 UART 的解决方案吗? 或者、我们必须找到另一个解决方法来以不同的方式解决这个问题。

    非常感谢。

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

    您好!  

    以下是一些权变措施:  

    1.建立一个自定义 UART 协议来将第一个字节定义为虚拟数据、这样接收器就可以将其丢弃。  

    2.在接收 UART 数据之前、先在 UART 启动边沿前10~20us 发送 GPIO 信号、以从 LPM1中唤醒。  

    谢谢、  

    Lixin  

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

    非常感谢您的回答。

    在我的情况下很难、因为有时会接收到第一个字节、有时不会接收。 此外、传感器协议由制造商确定。

    2.我将尝试寻找一个具有第二个 GPIO 中断的解决方案来退出 LPM1模式。 这应该是有可能的。