要疯了,,现在的问题是,使用的串口调试助手来调试的,开发环境从IAR低版本到高版本以及CCS,程序是官方程序和自己编写的,以及网友的。板子是标准板,还有个自己的板子。USB转串口线两条。但是结果都一样。
主要是使用串口调试助手发送字符串,然后接收相同的。结果是,如果我发较长的字符串,前四位会丢失。单个发送字符,根本没有任何返回信息。我简直要疯了,真的不知道原因了,期待大神拯救啊
代码如下:
#include
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P3SEL = BIT3+BIT4; // P3.4,5 = USCI_A0 TXD/RXD
UCA0CTL1 |= UCSWRST; // Put state machine in reset
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 6; // 1MHz 9600 (see User's Guide)
UCA0BR1 = 0; // 1MHz 9600
UCA0MCTL = UCBRS_0 + UCBRF_13 + UCOS16; // Modln UCBRSx=0, UCBRFx=0,
// over sampling
UCA0CTL1 &= ~UCSWRST; // Initialize USCI state machine
UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt
P4OUT=0;
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled
__no_operation(); // For debugger
}
// Echo back RXed character, confirm TX buffer is ready first
#pragma vector=USCI_A0_VECTOR
interrupt void USCI_A0_ISR(void)
{
switch(even_in_range(UCA0IV,4))
{
case 0:break; // Vector 0 - no interrupt
case 2: // Vector 2 - RXIFG
while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = UCA0RXBUF; // TX -> RXed character
break;
case 4:break; // Vector 4 - TXIFG
default: break;
}
}
想想5529刚出炉的时候自己也是这么折腾的,这么多年过去了,代码基本看不下去了,给个思路:来个从简到繁,从硬件调到到软硬结合;先将收发短接,用串口调试助手类软件测试转换器是否正常(按你的描述,这一步可以不用,你的硬件应该是正常的);其次采用最简单的先发送再收发:先定时发送单个字符,调试成功后在尝试向电脑发送字符串,发送正常后,开始测试单个字符接收并转发,进一步测试整个字符串收发,慢慢来!最后,才是开始真正意义上的收发通讯