TI中文支持网
TI专业的中文技术问题搜集分享网站

请教一个串口的奇怪问题

先说说我的开发环境:

IAR + 430LaunchPad + msp430F2252目标板。

电路上断开launchpad的J3跳线(VCC保留),连接到目标板上,可以调试,仿真和串口。

问题来了,我写了一段双工的串口程序,结果:可以收到PC端的,却不能发送到PC,怪异的是示波器查看TXD有输出,9600波特率每位约103.5us,应该算标准了,但PC就是收不到,换了几个软件都不行。

我又用launchpad带的G2553试了模拟串口的程序,收发都可以,所以硬件应该没问题

下面把程序贴出来,大家帮我检查一下那里配置错了。其实程序参考例程的。

#include "io430.h"
#include "led.h"

#define UCA0_TXD BIT4
#define UCA0_RXD BIT5

char string1[8]="u hello";
char i;
char j = 0;

void uart_init(void)
{

P3SEL = UCA0_TXD + UCA0_RXD; // P3.4,5 = USCI_A0 TXD/RXD
UCA0CTL1 |= UCSSEL_2; // CLK = ACLK
UCA0BR0 = 0x68; // 1.MHz/9600 = 125
UCA0BR1 = 0x00; //
UCA0MCTL = UCBRS2; // Modulation UCBRSx = 0x04
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt

}

#pragma vector=USCIAB0TX_VECTOR
__interrupt void USCI0TX_ISR(void)
{
UCA0TXBUF = string1[i++]; // TX next character
//LED_PWR_GRN_BLINK;
if (i == sizeof string1 – 1) // TX over?
{
IE2 &= ~UCA0TXIE; // Disable USCI_A0 TX interrupt

i=0;
}
}

#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
if (UCA0RXBUF == 'u') // 'u' received?
{
i = 0;
UCA0TXBUF = string1[i++];
//LED_GAME_RED_BLINK;
IE2 |= UCA0TXIE; // Enable USCI_A0 TX interrupt }
}

我时钟选得smclk = dco =1MHZ

主函数调用

uart_init();
__bis_SR_register(GIE); // interrupts enabled while(1);

请各位指点下。

Bruce Wei:

楼主你好!

试一下超级终端,参考附件

zhenyu xu:

回复 Bruce Wei:

试过了,一样不行。我用timer模拟的uart可以工作,所以估计是程序问题

zhenyu xu:

回复 Bruce Wei:

谢谢你的回复。

我用一块单独的usb转串口的板子接到目标板上通讯成功,你提供的和我以前的均能正常工作。

可能是launchpad串口的问题,我不知道有人在上面试过硬件串口收发送没有?

Bruce Wei:

回复 zhenyu xu:

有一个版本的launch pad硬件布线有问题,楼主需要检查下跳线连接。

Peter_Zheng:

回复 zhenyu xu:

你看你的lanuchpad是1.4的还是1.5的版本。1.4的uart的tx跟rx引脚接反了,需要自己跳线校正。

zhenyu xu:

回复 Peter_Zheng:

我的是V1.4的板子,请问引脚标记错误的问题有相关说明吗,另外我接收PC的字符是正确的哦。奇怪

Leon Yan:

回复 zhenyu xu:

楼主,有一版本LaunchPad的串口引脚更改了,所以仔细看一下你那个版本的原理图;

然后用示波器仔细看看波形情况。

谢谢。

赞(0)
未经允许不得转载:TI中文支持网 » 请教一个串口的奇怪问题
分享到: 更多 (0)