最近买了利而达的学习板MSP-TEST-42FE,用的是430FE425芯片。调串口程序用例程也调不同,上示波器UTXD有脉冲输出,肯定是MAX3221出了问题,学习板中MAX3221的_FORCEOFF是接MSP的P1.4脚,MAX3221工作模式有三种,一种普通模式,一种自动调电模式还有关断模式,它们由FORCEON 和_FORCEOFF控制,FORCEON接地,_FORCEOFF拉高为自动掉电模式(当没有232信号时关断),所以程序加上一条P1DIR |= 0x10; P1OUT |= 0x10;结果还是没输出,再看MAX3221中INVALID管脚(有232信号为高)竟然为低电平,测量DB9的3口和MAX3221的RIN没通,最后找到是MAX3221的8脚(RIN)虚焊,搞定它,输出终于有了。
所以程序:
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P1DIR |= 0x10;
P1OUT |= 0x10;
FLL_CTL0 |= XCAP18PF; // Configure load caps
P2SEL |= 0x30; // P2.4,5 = USART0 TXD/RXD
ME1 |= UTXE0 + URXE0; // Ena××e USART0 TXD/RXD
UCTL0 |= CHAR; // 8-bit character
UTCTL0 |= SSEL1; // UCLK = SMCLK
UBR00 = 0x6D; // 1MHz 9600
UBR10 = 0x00; // 1MHz 9600
UMCTL0 = 0x00; // no modulation
UCTL0 &= ~SWRST; // Initalize USART state machine
IE1 |= URXIE0; // Ena××e USART0 RX interrupt
P2DIR |= 0x10; // P2.4 output direction
_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt
}
#pragma vector=UART0RX_VECTOR
__interrupt void usart0_rx (void)
{
while (!(IFG1 & UTXIFG0)); // USART0 TX buffer ready?
TXBUF0 = RXBUF0; // RXBUF0 to TXBUF0
}
其他TI提供的例程也都通过调试,下载在TI网站
串口调试是比较麻烦,建议:
1、用示波器测MCU输出波形,LSB在前,MSB在后,正逻辑。
2、测MAX3232输出波形,LSB在前,MSB在后,负逻辑。
3、注意波特率寄存器的设定,特别是UxMCTL的设定。
4、高波特率时(9600以上)用高频晶振