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.

[参考译文] MSP430F149:MSP430F149 UART通信问题

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/584369/msp430f149-msp430f149-uart-communication-problem

部件号:MSP430F149

大家好,我需要帮助,我有一个项目,它使用MSP430F149来处理智能家庭安全系统。我现在需要做的是使用RS232到USB通过UART将MSP连接到笔记本电脑,并首先进行一些简单的通信。 但现在我所面对的是,我不能真正地保存从我的笔记本电脑发出的那些人物。 我的主板接收器缓冲器只能接收一次一个字节,所以当我尝试从我的笔记本电脑终端向主板发送一个句子,并尝试将其保存在我声明的另一个变量中时, 它保存了一个非常混乱的角色,我不知道它有什么错。 例如,我发送的电话号码类似于0124363516, 然后,我将数字从接收器缓冲器逐字节移动到变量,然后通过发送器缓冲器传输到我的笔记本电脑终端,显示其内部的内容,它就像(11,2.2465万)一样。IM使用IAR嵌入式工作台IDE和Realterm作为我的终端。 下面是我的编码,我可以获得一些帮助吗?非常感谢。

包括"io430-h"
#include <in430.h>  
包含"nbc430-h"

#define uchar unsigned char
#define uint unsigned int

无符号字符s2;
unsigned char string2[]={"Plesae Key in Your Message:\r\n"};
无符号字符;
无符号字符串1[]={"请输入您的电话号码:\r\n"};

无符号int i=0;

无符号字符缓冲区[];


void io_init(void)

P3DIR4=1;P3DIR5=0;  

}
空延迟(uint time)

UINT I,j;
对于(i = 0;i <时间;I++)

用于(j = 0;j < 30;j++);
}
}



void init_com( void )

P3SEL |= 0x30;  
ME1 |= UTXE0 + URXE0;  


UTCTL0 = SSEL0;  
UBR00 = 0x03;  
UBR10 = 0x00;  
UMCTL0 = 0x34;  

UCTL0 |=字符;  
UCTL0 &=~SWRST;  
IE1 |= URXIE0+UTXIE0;  
IFG1&=~UTXIFG0;
_EINT();  
LPM3;  
}

#pragma vector=UART0RX_vector
__interrupt void usart0_rx (void)

  while ((IFG1&URXIFG0)=0);
  BUFFER[COUNT]=RXBUF0;
 延迟(1);
 TXBUF0 =缓冲器[计数];
 COUNT+=1;

Void主(void)

WDTCTL = WDTPW + WDTHOLD;
io_init();¯
init_com();  
同时(1);

}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好Lay,
    您是否参考过slac015s.zip中的示例? 您将获得一些不同波特率下UART回波的示例。 您只需引用相同的代码并修改代码。

    此致,
    Vikas Chola
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,我确实参考了zip文件, 但这些只是用于回声,我需要存储从RX缓冲区收到的那些字符,修改后,结果有点奇怪,你能帮我看看我的代码在帖子上方的哪里有问题吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好Lay,
    您尝试达到的波特率是多少。 在您的代码中,您没有系统时钟。 您应该选择一个示例,将其更改为“Baud Rate”(波特率)设置。 首先确保其适用于UART回波,然后使用您的代码修改其UART ISR:

    while ((IFG1&URXIFG0)=0);
    BUFFER[COUNT]=RXBUF0;
    延迟(1);
    TXBUF0 =缓冲器[计数];
    COUNT++;


    它应该起作用。

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

    我发送的代码是从slac015s.zip中的示例中获取的。它在回波部分中工作,但对于多字符回波,结果非常混乱,例如,我将"AA"作为一个例子,第一次和第二次出现的代码是"A", 第三次只回声"AA"。
    我尝试了很多方法来保存从RXBUF0接收到的字符,但我把所有这些字符都移回后,它的形式非常混乱。是主板问题,时间问题还是延迟问题?


    UTCTL0 = SSEL0;//选择ACLK作为时钟源。
    UBR00 = 0x03; //波特率设置。(9600)
    UBR10 = 0x00; //波特率设置。(9600)
    UMCTL0 = 0x34;//波特率设置。(9600)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    计数定义在哪里? 它是否易变?

    此外,缓冲区需要定义大小。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,我在我的编码中定义了,只是不要附加在这里。
    Int计数=0;

    缓冲区大小会影响结果变得非常混乱? 因为我不想限制发送的字符数,所以我不定义缓冲区的大小。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    同样,这种情况也需要变化无常。
    如果不设置缓冲区的大小,C将不会为您设置缓冲区。
x 出现错误。请重试或与管理员联系。