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.

430F5529串口通信,这个程序想要实现的功能是什么?我始终感觉没有发送这一模块的程序啊。

Other Parts Discussed in Thread: MSP430F5529

/*
*说明:波特率9600,无校验位,数据位8为,停止位1位,采用低频波特率模式
*/
#include <msp430f5529.h>

/*
* main.c
*/
int main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
P3SEL |= BIT3 + BIT4;
UCA0CTL1 = UCSWRST;
UCA0CTL1 = UCSSEL_1;
UCA0BR0 = 3;
UCA0BR1 = 0;
UCA0MCTL = UCBRS_3 + UCBRF_0;
UCA0CTL1 &= ~UCSWRST;
UCA0IE = UCRXIE;
//_EINT();
_bis_SR_register(LPM3_bits+GIE);


//return 0;
}
#pragma vector=USCI_A0_VECTOR
interrupt void USCI_A0_ISR(void)
{
switch(_even_in_range(UCA0IV,4))
{ case 0:
break;
case 2:
while(!(UCA0IFG & UCTXIFG));//等待发送完成
UCA0RXBUF = UCA0TXBUF;//将发送缓冲寄存器中的字符发送到接受缓冲寄存器中, 发给上位机,助手回显
break;
case 4:
break;
default:
break;
}
}

  • 我也看不懂,第一次见把串口发送缓存寄存器的值放到接收缓存寄存器里,这程序是糊弄老师的吧。。。

    学习msp430建议参考官网提供的例程

  • hui tang2 说:

    /*
    *说明:波特率9600,无校验位,数据位8为,停止位1位,采用低频波特率模式
    */
    #include <msp430f5529.h>

    /*
    * main.c
    */
    int main(void) {
    WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
    P3SEL |= BIT3 + BIT4;
    UCA0CTL1 = UCSWRST;
    UCA0CTL1 = UCSSEL_1;
    UCA0BR0 = 3;
    UCA0BR1 = 0;
    UCA0MCTL = UCBRS_3 + UCBRF_0;
    UCA0CTL1 &= ~UCSWRST;
    UCA0IE = UCRXIE;
    //_EINT();
    _bis_SR_register(LPM3_bits+GIE);


    //return 0;
    }
    #pragma vector=USCI_A0_VECTOR
    interrupt void USCI_A0_ISR(void)
    {
    switch(_even_in_range(UCA0IV,4))
    { case 0:
    break;
    case 2:
    while(!(UCA0IFG & UCTXIFG));//等待发送完成
    UCA0TXBUF = UCA0RXBUF;//将发送缓冲寄存器中的字符发送到接受缓冲寄存器中, 发给上位机,助手回显
    break;
    case 4:
    break;
    default:
    break;
    }
    }

    你好,430的串口模块中有两个寄存器用于存放 收到和待发送的数据, 分别是 UCA0RXBUF 和 UCA0TXBUF。收到的数据自动放到 UCA0RXBUF里面,需要发送的数据 只要放到 UCA0TXBUF 里 就会自动发送。

    所以这个程序的意思是:430 收到上位机(PC串口调试助手)发来的数据,然后远样返回给PC。代码写错了