过年好!
这几天在调试一个UART的问题,配置如下:
UCA1CTL1 |= UCSWRST; // **Put state machine in reset**
UCA1CTL0 = UCMODE_0; // 选择串口功能
UCA1CTL0 &= ~UCPEN; //无校验
UCA1CTL0 &= ~UC7BIT; //8位数据位
UCA1CTL0 &= ~UCSPB; //1位停止位
UCA1CTL1 |= UCSSEL_1; // CLK = ACLK
UCA1BR0 = 0x03; // 32kHz/9600=3.41
UCA1BR1 = 0x00; //
UCA1MCTL = UCBRS_3 + UCBRF_0; // Modulation UCBRSx=3, UCBRFx=0
// UCA1CTL1 &= ~UCDORM;
UCA1CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA1IE |= UCRXIE; // Enable USCI_A0 RX interrupt
接收:
#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
at_buf[at_buf_ptr++] = UCA1RXBUF;
if ( UCA1RXBUF == 0x0A )
{
}
break;
case 4:
break; // Vector 4 - TXIFG
default:
break;
}
}
描述:
1,使用的配置是波特率9600,在与其它9600的通讯中,是正常的。比如转为U口后使用串口调试,将串口工具设置为9600,工具及MCU都是正常的;
2,与明确配置为9600的模组进行通信,也是正常的,可收可发;
问题:
3,当模组为自适应波特率时,不能正常通讯,收发均不正常,丢包乱码;
4,不与外界连接,将TX与RX短接后,数据无触发,多数情况下只能收到0D 0A之类的字符。
我这是哪里设置的少一个步骤吗?
谢谢。