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.

MSP430F5529LP Evaluation Kit跑UART例程收发数据问题,求解答

如题,使用的MSP430F5529LP 单片机USB2.0接口的那个。在学习例程跑UART_A0_01~04的程序时,利用串口调试助手调试,发送和接收不了程序。进入不了中断,请问这是什么原因呢?

另外:1.请问板子上要有什么接线或跳线帽更换的操作吗? 

            2.板子只有一个USB2.0接口,请问,直接通过这个USB连接电脑就行了吗?

              还是这个USB接口不能进行串口调试呢?P3.3和P3.4引脚要接什么吗?

新人请求解答。


#include <msp430.h>

int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P3SEL = BIT3+BIT4; // P3.4,5 = USCI_A0 TXD/RXD
UCA0CTL1 |= UCSWRST; // **Put state machine in reset**
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 6; // 1MHz 9600 (see User's Guide)
UCA0BR1 = 0; // 1MHz 9600
UCA0MCTL = UCBRS_0 + UCBRF_13 + UCOS16; // Modln UCBRSx=0, UCBRFx=0,
// over sampling
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt

__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled
__no_operation(); // For debugger
}

// Echo back RXed character, confirm TX buffer is ready first
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(USCI_A0_VECTOR))) USCI_A0_ISR (void)
#else
#error Compiler not supported!
#endif
{
switch(__even_in_range(UCA0IV,4))
{
case 0:break; // Vector 0 - no interrupt
case 2: // Vector 2 - RXIFG
while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = UCA0RXBUF; // TX -> RXed character
break;
case 4:break; // Vector 4 - TXIFG
default: break;
}
}

  • 板子自带仿真器的,你需要把那个PowerSEL那个开关拨到中间位置即可以仿真。
  • 你好,我用的是这一个板子,其他程序仿真时可以的。就是UART这一块使用串口通信助手收发数据 都不行,UCA0TXBUF和UCA0RXBUF都没有读取数据。串口助手是可以连接上的。求解答

  • 你好,我用的板子不是实验板那个,是这个www.ti.com.cn/.../msp-exp430f5529lp
  • 5529 UART.txt
    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #include "msp430f5529.h"
    // ACLK = REFO = 32768Hz, MCLK = SMCLK = default DCO/2 = 1048576Hz
    // P3.4��5����USCI_A0 TXD/RXD��P9.4,5����USCI_A2 TXD/RXD��P10.4,5����USCI_A3 TXD/RXD��
    void main(void)
    {
    WDTCTL = WDTPW + WDTHOLD; // Stop WDT
    P4SEL |=BIT4+BIT5 ;
    UCA1CTL1 |= UCSWRST; // **Put state machine in reset**
    UCA1CTL1 |= UCSSEL_2; // SMCLK
    UCA1BR0 = 9; // 1MHz 115200 (see User's Guide)
    UCA1BR1 = 0; // 1MHz 115200
    UCA1MCTL |= UCBRS_1 + UCBRF_0; // Modulation UCBRSx=1, UCBRFx=0
    UCA1CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
    UCA1IE |= UCRXIE; // Enable USCI_A1 RX interrupt
    __bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled
    }
    // Echo back RXed character, confirm TX buffer is ready first����������֮ǰȷ�����ͻ���׼����
    #pragma vector=USCI_A1_VECTOR
    __interrupt void USCI_A1_ISR(void)
    {
    switch(__even_in_range(UCA1IV,4))
    {
    case 0:break; // Vector 0 - no interrupt
    case 2: // Vector 2 - RXIFG
    while (!(UCA1IFG&UCTXIFG)); // USCI_A1 TX buffer ready? UCTXIFG(USCI Transmit Interrupt Flag)
    //�ȴ����ݷ������ ���UCTXIFG��1 ����ѭ��
    UCA1TXBUF = UCA1RXBUF; // TX -> RXed character
    break;
    case 4:break; // Vector 4 - TXIFG
    default: break;
    }
    }
    // UCTXIFG=0x02��UCA1IFG&UCTXIFG����UCA1IFG��UCTXIFGλΪ1ʱ��˵��UCA1TXBUFΪ�գ�
    //����whileѭ��ѭ������UCTXIFGλΪ0ʱUCA1TXBUF��Ϊ�գ�ͣ��ѭ����
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    那您试一下上述程序。

  • 你好,试了你的程序,第一次是可以的,但是之后串口助手没有显示数据,寄存器查看是可以的,请问这是窗口调试助手的问题吗?
    另外,请问我之前的程序时什么问题呢?是波特率太低了吗?
  • 请问是不能使用A0的问题吗?