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.

[参考译文] MSP430F249:UART RX 未工作

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1384811/msp430f249-uart-rx-is-not-working

器件型号:MSP430F249

工具与软件:

您好!

我将使用示例代码 为 MSP430F249启用 uart msp430x24x_uscia1_uart_05_9600.c

当我通过 IAR 运行代码时、示例代码运行正常。

我可以看到在 Teraterm 端口中输入字符的输出(9600波特率)。  

当我使用 HEX 映像和闪存并使用 FETPro 工具时、它无法正常工作。 我的意思是、RX 输入会回送至 TX。

请帮助确定问题。

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

    您能否共享代码?

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

    //
    // MSP430x24x 演示- USCI_A1、超低功耗 UART 9600 Echo ISR、32kHz ACLK
    //
    //说明:回显接收到的字符、使用 RX ISR。 正常模式为 LPM3、
    // USCI_A1 RX 中断触发 TX Echo。
    // ACLK = BRCLK = LFXT1 = 32768Hz、MCLK = SMCLK = DCO ~1.045Mhz
    //波特率分频器为32768Hz XTAL @9600 = 32768Hz/9600 = 3.41
    //=> UCBRx = 0x03;在 UCA1MCTL 中:UCBRSx = round (0.41*8)= 0x03
    //////*对于 ACLK、XIN XOUT 上需要外接一个手表晶体*//
    //
    // MSP430F249
    //-------
    ///|\| XIN|-
    //|||| 32kHz
    //--|RST XOUT|-
    //|
    //| P3.6/UCA1TXD|----- >
    //|| 9600 - 8N1
    //|P3.7/UCA1RXD|<---
    //
    // B. Nisarga.
    // Texas Instruments Inc.
    // 2007年9月
    //构建 CCE 版本:3.2.0和 IAR 嵌入式工作平台版本:3.42A
    //
    #include

    int main (void)

    WDTCTL = WDTPW + WDTHOLD;//停止 WDT
    P1DIR = 0xFF;//所有 P1.x 输出
    P1OUT = 0;//所有 P1.x 复位
    P2DIR = 0xFF;//所有 P2.x 输出
    P2OUT = 0;//全部 P2.x 复位
    P3SEL = 0x0C0;// P3.6、7 = USCI_A1 TXD/RXD
    P3DIR = 0xFF;//所有 P3.x 输出
    P3OUT = 0;//所有 P3.x 复位
    P4DIR = 0xFF;//所有 P4.x 输出
    P4OUT = 0;//全部 P4.x 复位
    P5DIR = 0xFF;//所有 P5.x 输出
    P5OUT = 0;//所有 P5.x 复位
    P6DIR = 0xFF;//所有 P6.x 输出
    P6OUT = 0;//所有 P6.x 复位

    UCA1CTL1 |= UCSSEL_1;// CLK = ACLK
    UCA1BR0 = 0x03;// 32kHz/9600 = 3.41
    UCA1BR1 = 0x00;//
    UCA1MCTL = UCBRS1 + UCBRS0;//调制 UCBRSx = 3
    UCA1CTL1 &=~UCSWRST;//**初始化 USCI 状态机**
    UC1IE |= UCA1RXIE;//启用 USCI_A1 RX 中断

    __bis_SR_register (LPM3_bits + GIE);//进入 LPM3、中断被启用
    }

    //回送 RXed 字符、确认 TX 缓冲区首先就绪
    #if defined (__TI_Compiler_version__)|| defined (__IAR_SYSTEMS_ICC__)
    #pragma VECTOR=USCIAB1RX_VECTOR
    __interrupt void USCI1RX_ISR (void)
    #elif defined (_GNUC__)
    void __attribute__(((interrupt (USCIAB1RX_VECTOR))) USCI1RX_ISR (void)
    #else
    错误编译器不受支持!
    #endif

    while (! (UC1IFG&UCA1TXIFG);// USCI_A1 TX 缓冲器是否就绪?
    UCA1TXBUF = UCA1RXBUF;// TX -> RXED 字符
    }

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

    自从您对电路板进行编程后、您是否已对其进行复位(或下电上电)? 正如我所记得的、FET-Pro 软件会使器件保留为"Reset"、除非您在某个地方勾选复选框。

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

    尊敬的 Swarna:

    也许您可以查看 两者之间的区别:分别是由 IAR 编译的指令、还是从 FET 工具读出的指令。

    如果相同、我怀疑您是否让器件进入了某个不运行应用代码的模式。 复位模式或 BSL 模式。

    B.R.

    SAL

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

    您好!

    十六进制没有变化。  

    我还没有进行任何晶振设置。 这就是应用没有得到任何时钟的原因吗?  

    您能否共享要配置的代码? 我尝试了一些示例、但没有成功。  

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

    尊敬的 Swarna:

    十六进制没有变化。  [报价]

    那么、当您使用 IAR 调试模式、然后退出调试模式并复位器件时、这是否正常呢?

    我尚未进行任何晶体设置。 这就是应用没有得到任何时钟的原因吗?  [报价]

    您共享的示例配置了 CLK。  

    对于 UART、也许您可以使用内部时钟而不是 ACLK、参考代码如下所示:

    https://dev.ti.com/tirex/explore/node?node=A__AKlljD0-u6GH-hOGGBHFtg__msp430ware__IOGqZri__LATEST 

    B.R.

    SAL

    [/quote]