我最近在做的项目里面用到了MSP430FR5959这块芯片(和MSP430FR5969同类),现在想使用MSP430FR5959的串口通信功能,用了一块CH340T作为UART转接USB的通信方法,我的需求是将430片内AD采样的数据定义为一个字符型数组后依次发送到电脑,但是现在配置好程序之后发现电脑上面用串口调试助手看到的数据很不对劲:a.串口发送数据经常出错,错误率已经超过了user guide提供的误差范围,而这个波特率是我按照官方例程设置的;b.串口调试助手上面显示的字符串速度太快,我尝试着给发送函数加上延时,发现加了延时函数之后串口调试助手上面显示字符的速度没有变化。
下面贴上程序,恳请论坛里面的高手解答一下:
#include "msp430fr5959.h"
unsigned char buf[]={"The UART is a little difficult!!!\n"};
unsigned int l;
void delay(uint a)
{
uint i,j;
for(i=0;i<a;i++)
{
for(j=0;j<253;j++);
}
}
void main(void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog
// Configure GPIO
//P1OUT &= ~BIT0; // Clear P1.0 output latch
//P1DIR |= BIT0; // For LED on P1.0
P2SEL1 |= BIT0 | BIT1; // USCI_A0 UART operation
P2SEL0 &= ~(BIT0 | BIT1);
// Disable the GPIO power-on default high-impedance mode to activate
// previously configured port settings
PM5CTL0 &= ~LOCKLPM5;
UCA0CTLW0 = UCSWRST; // Put eUSCI in reset
UCA0CTL1 |= UCSSEL__SMCLK; // CLK = SMCLK
UCA0BR0 = 8; // 1000000/115200 = 8.68
UCA0MCTLW =0xD600; // 1000000/115200 - INT(1000000/115200)=0.68
// UCBRSx value = 0xD6 (See UG)
UCA0BR1 = 0;
UCA0CTL1 &= ~UCSWRST; // release from reset
UCA0IE |= UCTXIE; // Enable USCI_A0 RX interrupt
//UCA0IE |= UCRXIE;
//_EINT();
while (1)
{
uint j;
// Load data onto buffer
__bis_SR_register(LPM0_bits | GIE);
//__EINT();
//delay_ms(150);
for(j=0;j<100;j++)
{
delay(150);
delay(150);
delay(150);
delay(150);
delay(150);
delay(150);
delay(150);
}
}
}
#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,USCI_UART_UCTXCPTIFG))
{
case USCI_NONE: break;
case USCI_UART_UCRXIFG:
break;
case USCI_UART_UCTXIFG:
for(l=0;l<sizeof(buf);l++)
{
UCA0TXBUF =buf[l];
while(!(UCA0IFG & UCTXIFG));
}
__bic_SR_register_on_exit(LPM0_bits); // Exit LPM0 on reti
break;
case USCI_UART_UCSTTIFG: break;
case USCI_UART_UCTXCPTIFG: break;
}
}