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.

求助:MSP430F2272的UART口通信问题!!!

Other Parts Discussed in Thread: MSP430F2272

最近用msp430f2272写一个uart的通信,波特率配置正确了,可以发送,可以接收,但是当我使能了接收中断的时候,才发现发送数据时的数据居然更新了接收缓存器里的内容,导致了我每发送一个数据就进一次接收中断,我也在仿真时检查过我的寄存器配置,在寄存器USCI_Ax_Status 中的位UCLISTEN = 0;根本就没开监听模式,求解!!!

  • 楼主,

       请参考如下代码:

    #include <msp430.h>

    int main(void)
    {
    WDTCTL = WDTPW + WDTHOLD; // Stop WDT
    if (CALBC1_1MHZ==0xFF) // If calibration constant erased
    {
    while(1); // do not load, trap CPU!!
    }
    DCOCTL = 0; // Select lowest DCOx and MODx settings
    BCSCTL1 = CALBC1_1MHZ; // Set DCO
    DCOCTL = CALDCO_1MHZ;
    P3SEL = 0x30; // P3.4,5 = USCI_A0 TXD/RXD
    UCA0CTL1 |= UCSSEL_2; // SMCLK
    UCA0BR0 = 8; // 1MHz 115200
    UCA0BR1 = 0; // 1MHz 115200
    UCA0MCTL = UCBRS2 + UCBRS0; // Modulation UCBRSx = 5
    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
    }

  • 你好,

    我把上述你给的程序编译了一遍,下载到板子上,通过PC机的串口助手进行调试,用串口助手发送一字节数据到mcu,数据是可以发成功的,但是muc收到数据后却一直把接收到的数据发送出去,也就是说,接收中断不断的进入,而UCA0TXBUF = UCA0RXBUF;已经把接收中断标志位清零了,所以得到的结论是mcu发送数据的时候把接收缓冲器里的内容更新了,导致接收中断的不断产生

  • 你好,

    我把上述你给的程序编译了一遍,下载到板子上,通过PC机的串口助手进行调试,用串口助手发送一字节数据到mcu,数据是可以发成功的,但是muc收到数据后却一直把接收到的数据发送出去,也就是说,接收中断不断的进入,而UCA0TXBUF = UCA0RXBUF;已经把接收中断标志位清零了,所以得到的结论是mcu发送数据的时候把接收缓冲器里的内容更新了,导致接收中断的不断产生

  • 你好,

        上面的代码应该不会出现你说的那种情况。你的板子是开发板还是自己做的?建议用示波器观察RXD脚,看看是否是该脚上存在低电平触发了接收中断。

     

  • 你好,

    板子是自己做的,但是我个人认为这应该不关板子的事吧,我先用示波器看看Rx脚是否有低电平产生,谢谢了

  • 你好,我用示波器看过了,我用串口助手发送的数据是0x55,而Rx引脚上观察到的数据就是Tx引脚上所发送的数据,两者波形只相差一个bit的时间,如图示(蓝色为Tx引脚,黄色为Rx引脚),这是芯片的问题吗

  • 你好,

       串口调试助手是不断发0x55吗?如果是这样的话确实会不断进入接收中断的,如果串口调试助手只发一个字节的话就只会进一次中断了。另外示波器黄色波形是430的TX脚吗?

  • 不是,串口助手我只发了一次0x55,其他都是芯片直发进行的,黄色是Rx引脚

  • 不是,串口助手我只发了一次0x55,其他都是芯片自发进行的,黄色是Rx引脚

  • 你好,

          不好意思,回复晚了。

          从波形上看,TX脚的波形可以认为是430发出的,但是Rx脚是输入脚,就算是接收缓冲被错误写入了数值,触发了接收中断,430也不会在这个脚上输出波形的,所以我认为应该还是外部在这个脚上产生了黄色的波形,触发了430的接收中断。

  • 你好,问题我已经找到了,谢谢你的帮助

  • 你好!请问一下你之前遇到的uart通讯过程中TXBUF中的内容会传送到RXBUF的问题是如何解决的?

  • 你好,tx发送的时候不要开在此中断,不然会进入到接收中断的,希望能帮到你吧