目前在调试串口通讯程序,刚刚调试的时候都正常,后期出现问题就是4个串口中只有一个能正常发送数据,另外三个均无响应。程序如下,4个串口配置内容相进唯一一个UCA2CTL1 为1200波特率,数据发送正常,其他三个波特率为9600数据发送失败。
还有一个现象就是当多个串口同时发送的时候,数据发送正常,而如果只是单个发送就只有UCA2CTL1 发送数据正常
/****************初始化********************/
void uart_init(void)
{
P9DIR |= BIT0 ;
P9DIR &= ~BIT6 ;
P9SEL |= BIT5+BIT4 ;
P3DIR |= BIT3; // P3.3 = R&W ENABLE
P3SEL |= BIT5+BIT4; // P3.4,5 = USCI_A0 TXD/RXD
P5DIR |= BIT5; // P5.5 = R&W ENABLE
P5SEL |= BIT6+BIT7; // P5.6,7 = USCI_A1 TXD/RXD
P10DIR |= BIT3; // P5.5 = R&W ENABLE
P10SEL |= BIT5+BIT4;
RS485_0IN;
RS485_1IN;
RS485_2IN;
GPRS_EN_OFF ;
UCA0CTL1 |= UCSWRST;
UCA0CTL1 |= UCSSEL_1 ; // CLK = ACLK
UCA0BR0 = 0x03; // 2.45MHz/9600=3.41
UCA0BR1 = 0x00;
UCA0MCTL = UCBRS_3; // Modulation UCBRSx=0, UCBRFx=15
UCA0CTL1 &= ~UCSWRST;
UCA0IE |= UCRXIE;
UCA1CTL1 |= UCSWRST;
UCA1CTL1 |= UCSSEL_1 ; // CLK = ACLK
UCA1BR0 = 0x03; // 2.45MHz/9600=3.41
UCA1BR1 = 0x00;
UCA1MCTL = UCBRS_3; // Modulation UCBRSx=0, UCBRFx=15
UCA1CTL1 &= ~UCSWRST;
UCA1IE |= UCRXIE;
UCA2CTL1 |= UCSWRST;
UCA2CTL1 |= UCSSEL_1 ; // CLK = ACLK
UCA2BR0 = 0x1b; // 2.45MHz/9600=3.41
UCA2BR1 = 0x00;
UCA2MCTL = UCBRS_4; // Modulation UCBRSx=0, UCBRFx=15
UCA2CTL1 &= ~UCSWRST;
UCA2IE |= UCRXIE ;
UCA3CTL1 |= UCSWRST;
UCA3CTL1 |= UCSSEL_1 ; // CLK = ACLK
UCA3BR0 = 0x03; // 2.45MHz/9600=3.41
UCA3BR1 = 0x00;
UCA3MCTL = UCBRS_3; // Modulation UCBRSx=0, UCBRFx=15
UCA3CTL1 &= ~UCSWRST;
UCA3IE |= UCRXIE;
}
/*****************表1通讯********************/
void TX_send(uchar* data,uchar count)
{
RS485_1OUT;
uchar i,j,k;
for(i=0;i<count;i++)
{
j=254,k=254;
UCA1TXBUF = data[i];
while(UCA1STAT&BIT0)//usart1 tx发送完毕
{
if(j==0)
{
j=254;
k--;
}
else
j--;
if(k==0)
flag_tx=1;
if(flag_tx)
break;
}
}
RS485_1IN;
rx_data_bit=0;
}