使用了5438A的P3.4,5; P5.6,7; P9.4,5; P10.4,5来作为串口通讯,其中P3,P5,P9为232,P3和P5使用一个232芯片,P9使用另外一个,这一个232芯片有一个232接口是悬空的,在调试过程中,P3,P5的串口通讯正常,同样的设置,在P9这个串口就不行了,没有数据收回。
测量了P9232接口的电压,TXD为-5.6V,RXD与GND都为0V,并且试了下P9.4,P9.5这俩个IO口的输出,高电平都为3.3V,低电平一个为0V一个为0.3V,不知道会不会有影响
具体测试程序与设置如下:
//串口2初始化
void UART1_Init()
{
P5SEL |= 0xc0; // P3.4,5 = USCI_A0 TXD/RXD
UCA1CTL1 |= UCSWRST; // **Put state machine in reset**
UCA1CTL1 |= UCSSEL_2; // SMCLK
UCA1BR0 = 104; // 1MHz 9600 (see User's Guide)
UCA1BR1 = 0; // 1MHz 9600
UCA1MCTL |= 0x02; // Modulation UCBRSx=1, UCBRFx=0
UCA1CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA1IE |= UCRXIE; // Enable USCI_A0 RX interrupt
}
//串口3初始化
void UART2_Init()
{
P9SEL |= 0x30; // P3.4,5 = USCI_A0 TXD/RXD
UCA2CTL1 |= UCSWRST; // **Put state machine in reset**
UCA2CTL1 |= UCSSEL_2; // SMCLK
UCA2BR0 = 104; // 1MHz 9600 (see User's Guide)
UCA2BR1 = 0; // 1MHz 9600
UCA2MCTL |= 0x02; // Modulation UCBRSx=1, UCBRFx=0
UCA2CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA2IE |= UCRXIE; // Enable USCI_A0 RX interrupt
}
//串口2中断程序
#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{
//unsigned char data=0;
switch(__even_in_range(UCA1IV,4))
{
case 0:break; // Vector 0 - no interrupt
case 2: // Vector 2 - RXIFG
while (!(UCA1IFG&UCTXIFG)); // USCI_A1 TX buffer ready?
UCA1TXBUF = UCA1RXBUF; // TX -> RXed character
//Send_Byte(data);
break;
case 4:break; // Vector 4 - TXIFG
default: break;
}
}
//串口3中断程序
#pragma vector=USCI_A2_VECTOR
__interrupt void USCI_A2_ISR(void)
{
//unsigned char data=0;
switch(__even_in_range(UCA2IV,4))
{
case 0:break; // Vector 0 - no interrupt
case 2: // Vector 2 - RXIFG
while (!(UCA2IFG&UCTXIFG)); // USCI_A1 TX buffer ready?
UCA2TXBUF = UCA2RXBUF; // TX -> RXed character
//Send_Byte(data);
break;
case 4:break; // Vector 4 - TXIFG
default: break;
}
}
通过IAR仿真软件看寄存器的设置是完全一样的,打是串口2就能通讯,串口3就收不到。还望大家帮忙看看,问题会出在哪里。
此帖出自
小平头技术问答
一周热门 更多>