请教大神,在用MSP430F4152做串口调试时,程序是讲接受的数据再发送出来,可是使用串口调试助手发送与接受的数据不同,必须在发送数据前加00,可即便如此接收的数据会后面多出00;还有一个问题就是发送的数据不能太大,数据大就会出现问题,程序如下:
#include <msp430x41x2.h>
int main(void)
{
volatile unsigned int i;
/* HAL clock init */
HW_MCLK_INIT();
for ( i = 0; i < 10000; i++); // Delay for 32 kHz crystal to stabilize
do {
IFG1 &= ~OFIFG; // Clear osc fault flag
for (i = 0; i < 1000; i++); // Delay for osc to stabilize
} while(IFG1 & OFIFG); // Check to see if osc flag is set
HW_UART_INIT();
IE2 |= UCA0RXIE;
_BIS_SR(LPM3_bits + GIE); // Enter LPM0, interrupts enabled
// _EINT(); /* enable all interrupt */
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCIA0RX_ISR (void)
{
while(!(IFG2&UCA0TXIFG));
UCA0TXBUF = UCA0RXBUF; // TX -> RXed character
}
///////////////////////////////////////////////////////////////////////////////////////////////////
void HW_MCLK_INIT() \
{ \
WDTCTL = WDTPW + WDTHOLD; /* Stop watchdog timer */ \
_DINT(); /* disable all interrupt */ \
SCFI0 |= FN_2; /* x2 DCO freq, 8MHz nominal DCO */ \
SCFQCTL = 121; /* (121+1) x 32768 x 2 = 7.99 Mhz */ \
FLL_CTL0 |= DCOPLUS + XCAP5_5F; /* DCO+ set so freq= xtal x D x N+1 */ \
}
/////////////////////////////////////////////////////////////////////////////////////////////
/* --------- Board HAL UART Initialization -------- */
void HW_UART_INIT() \
{ \
UCA0CTL1 |= UCSWRST; \
P6SEL |= (BIT5 + BIT6); /* P6.5,6 = USCI_A0 RXD TXD */ \
P6DIR |= BIT6; /* P6.6 Tx */ \
P6DIR &= ~(BIT5); /* P6.5 Rx */ \
UCA0CTL0 = 0; /* no parity, 8bit, 1stop, lSb first,uart */ \
UCA0CTL1 |= UCSSEL_2; /* BRCLK=SMCLK = 8MHz */ \
UCA0BR0 = 52; /* 8MHz/9600 = ~833.3 = 0x0341 */ \
UCA0BR1 = 0; \
UCA0MCTL = UCOS16; /* Modulation UCBRSx = 2 */ \
UCA0CTL1 &= ~UCSWRST; /* Initialize USCI state machine */ \
}
串口调试助手发送接收数据如下图: