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/MSP430FR2000:无法接收多条消息

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/783583/ccs-msp430fr2000-unable-to-receive-multiple-messages

器件型号:MSP430FR2000

工具/软件:Code Composer Studio

您好!

我正在接收来自 UART 的3条消息、并将值加载到 RTCMOD 中。 但我无法接收它们。 我收到的所有3个消息都与第一个消息相同。 我已连接下面的 UART 中断。

此致、

Prudhvi Sagar

//
// UART 中断
//

//每次关闭 UART…
#if defined (__TI_Compiler_version__)|| defined (__IAR_systems_icc_)
#pragma vector=USCI_A0_vector
__interrupt void USCI_A0_ISR (void)
#Elif defined (__GNU__)
void __attribute__(interrupt (USCI_A1_vector))#USCI_A0

Compiler #a0_aid!
#endif
{
switch (__even_in_range (UCA0IV、USCI_UART_UCTXCPTIFG))
}{
USCI_NONE 案例:中断;
USCI_UART_UCRXIFG 案例:
while (!(UCA0IFG&UCTXIFG));
if (RX_COUNT = 0)
{
RX_temp = UCA0RXBUF;
RX_temp =(RX_temp << 8);
RX_COUNT++; //Count = 1
}
if (RX_COUNT = 1)
{

RX_temp |= UCA0RXBUF;
RTCMOD = RX_temp;
RX_COUNT++; //Count = 2
}
if (RX_COUNT = 2)
{

增量= UCA0RXBUF;
RX_COUNT++; //Count = 3
}
//实现增量
if (RX_COUNT >= 3)//检查所有字节 RX
{
RX_COUNT = 0;

RTCCTL = RTCSS_XT1CLK | RTCSR | RTCPS_1024 | RTCIE;//启动 RTC


_bis_SR_register_ON_EXIT (LPM3_BITS | GIE);
__no_operation();
}

中断;
案例 USCI_UART_UCTXIFG:中断;
案例 USCI_UART_UCSTTIFG:中断;
案例 USCI_UART_UCTXCPTIFG:break;
}
} 

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

    您使用的波特率是多少? 您能使它更慢、比如9600。 您可以捕获 TX 和 RX 的波形以查看信号是否正确。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    void initUART()
    {
    //将 USCI_A0配置为 UART 模式
    UCA0CTLW0 |= UCSWRST; //将 eUSCI 置于复位
    #if UART_MODE = SMCLK_115200
    
    UCA0CTLW0 |= UCSSEL_SMCLK; // CLK = SMCLK
    //波特率设置
    //使用表21-5
    UCA0BRW = 8;
    UCA0MCTLW |= UCOS16 | UCBRF_10 | 0xF700;//0xF700为 UCBRSx = 0xF7
    
    #Elif UART_MODE = SMCLK_9600
    
    UCA0CTLW0 |= UCSSEL_SMCLK; // CLK = SMCLK
    //波特率设置
    //使用表21-5
    UCA0BRW = 104;
    UCA0MCTLW |= UCOS16 | UCBRF_2 | 0xD600;//0xD600为 UCBRSx = 0xD6
    #else
    #错误"请将波特率指定为115200或9600 "
    #endif
    
    UCA0CTLW0 &=~UCSWRST; //初始化 eUSCI
    UCA0IE |= UCRXIE; //启用 USCI_A0 RX 中断
    } 

    您好!

    是的、我使用9600波特率。 我的代码 UART 初始化如下所示:  

    第一条消息 IM 接收正确、但同样的消息也应用于第二条和第三条消息

    此致、

    Prudhvi Sagar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Prudhvi
    UART、PC 或其他 MCU 的另一侧是什么? 您能否确保其他设备和不同的消息、最好通过逻辑分析仪捕获波形。
    第二个是"_bis_SR_register_ON_EXIT (LPM3_bits | GIE";"您想离开 LPM3还是在 LPM3之间? 我知道您是否想离开、您可以使用
    "_BIC_SR_REGISTER_ON_EXIT (LPM3_BITS);"如果您想进行交互、则应为"_bis_SR_register (LPM3_bits | GIE";"
    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    > if (RX_COUNT = 1)
    RX_COUNT 在这里将始终为=1、因为您只是将其递增。 请尝试"else if"。 同样、对于=2检查。