|
先说说我的开发环境:
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);
请各位指点下。 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|