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.

UART模式

Other Parts Discussed in Thread: MSP430F2132

各位:刚学MSP430,我是用MSP430F2132的芯片,该款芯片好像不支持USART Peripheral Interface, UART Mode 是吗?因为我编程时写:U0CTL=ox01;编译就出错,说U0CTL没定义。谢谢指点!

  • //******************************************************************************

    //   MSP430F21x2 Demo - USCI_A0, UART 19200 Echo ISR, HF XTAL SMCLK

    //

    //   Description: This program will echo a received character, RX interrupt

    //   service used. XT1 oscillator used in this example.

    //   ACLK = MCLK = SMCLK = BRCLK = LFXT1CLK = 8MHz

    //   Baud rate divider with 8MHz XTAL @19200 = 8MHz/19200 = ~416.6

    //   //* An external 8MHz XTAL on XIN XOUT is required for LFXT1CLK *//

    //

    //                MSP430F21x2

    //             -----------------

    //         /|\|              XIN|-

    //          | |                 | 8MHz

    //          --|RST          XOUT|-

    //            |                 |

    //            |     P3.4/UCA0TXD|------------>

    //            |                 | 19200 - 8N1

    //            |     P3.5/UCA0RXD|<------------

    //

    //   A. Dannenberg

    //   Texas Instruments Inc.

    //   January 2007

    //   Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.41A

    //******************************************************************************

    #include  "msp430x21x2.h"

    volatile unsigned int i;

    void main(void)

    {

     WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

     BCSCTL1 |= XTS;                           // ACLK = LFXT1 = HF XTAL

     BCSCTL3 |= LFXT1S1;                       // 3 ?16MHz crystal or resonator

     do

     {

       IFG1 &= ~OFIFG;                         // Clear OSCFault flag

       for (i = 0xFF; i > 0; i--);             // Time for flag to set

     }

     while (IFG1 & OFIFG);                     // OSCFault flag still set?

     BCSCTL2 |= SELM_3 + SELS;                 // MCLK = SMCLK = LFXT1 (safe)

     P3SEL = 0x30;                             // P3.4,5 = USCI_A0 TXD/RXD

     UCA0CTL1 |= UCSSEL_2;                     // SMCLK

     UCA0BR0 = 160;                            // 8MHz/19200 = ~416.6

     UCA0BR1 = 1;                              //

     UCA0MCTL = UCBRS2 + UCBRS1;               // Modulation UCBRSx = 6

     UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**

     IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt

     __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, interrupts enabled

    }

    //  Echo back RXed character, confirm TX buffer is ready first

    #pragma vector=USCIAB0RX_VECTOR

    __interrupt void USCI0RX_ISR(void)

    {

     while (!(IFG2 & UCA0TXIFG));              // USCI_A0 TX buffer ready?

     UCA0TXBUF = UCA0RXBUF;                    // TX -> RXed character

    }

    发一个demo程序基于F21X2的,U0CTL应该是UCA0CTLx之类的

  • F2132支持UART。

    你的问题在于编程时写的寄存器名称跟引用的头文件里的定义不一致,其实跟用其他单片机是一样的,你可以打开头文件“msp430x21x2.h”看看,里头是没有U0CTL这个定义的,所以编译器肯定会报错,因为它不知道你语句中的寄存器对应什么地址。这个问题我以前在引用TI的例程时也遇到过,有的例程里头的寄存器写法跟自己引用的头文件写法不一样,导致报错。所以,遇到这种情况,建议你结合芯片的数据手册和用户向导两个文档,对照头文件来查找对应地址的寄存器名称。