本人做了一个F5438A的小板,然后用Launchpad的 /RST/TEST/VCC/TXD/RXD 飞线连接到F5438A的小板。已实现目前可以仿真、烧写,控制LED也没问题。
F5438A的UCA0TXD/UCA0RXD 连接到Launchpad的TXD和RXD,使用24M XT2再分频为12M,在波特率9600时,一切通讯正常,当波特率设置为115200时,当输出任何字符,PC端打印都是“0x3f”,且RXD不接收任何字符。求帮忙看看是什么问题。
以下是我的代码
void INIT_XT2(void) {SetVcoreUp(PMMCOREV_1);SetVcoreUp(PMMCOREV_3);// Set VCore to 1.8MHz for 20MHzP11DIR = BIT1+BIT2;// P11.1-2 to output directionP11SEL |= BIT1+BIT2;// P11.1-2 to output SMCLK,MCLKP5SEL |= 0x0C;// Port select XT2UCSCTL6 &= ~XT2OFF;// Enable XT2UCSCTL3 |= SELREF_2;// FLLref = REFO // Since LFXT1 is not used, // sourcing FLL with LFXT1 can cause // XT1OFFG flag to setUCSCTL4 |= SELA_2;// ACLK=REFO,SMCLK=DCO,MCLK=DCO// Loop until XT1,XT2 & DCO stabilizesdo{ UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG); // Clear XT2,XT1,DCO fault flags SFRIFG1 &= ~OFIFG;// Clear fault flags}while (SFRIFG1&OFIFG);// Test oscillator fault flagUCSCTL6 &= ~XT2DRIVE0;// Decrease XT2 Drive according to // expected frequencyUCSCTL4 |= SELS_5 + SELM_5;// SMCLK=MCLK=XT2UCSCTL5 |= DIVM0 + DIVS0;//Div SMCLK/2 MCLK/2 } void INIT_UCA0_UART(void) {P3SEL |= 0x30;// P3.4,5 = USCI_A0 TXD/RXDUCA0CTL1 |= UCSWRST;// **Put state machine in reset**UCA0CTL1 |= UCSSEL_2;// SMCLKUCA0BR0 = 6;// 12MHz 115200 (see User's Guide)UCA0BR1 = 0;// 12MHz 115200UCA0MCTL |= UCBRS_0 + UCBRF_8 + UCOS16;// Modln UCBRSx=1, UCBRFx=0,UCA0CTL1 &= ~UCSWRST;// **Initialize USCI state machine**UCA0IE |= UCRXIE;// Enable USCI_A0 RX interrupt } void INIT_UCA1_UART(void) {P5SEL |= 0xC0;// P5.6,7 = USCI_A1 TXD/RXDUCA1CTL1 |= UCSWRST;// **Put state machine in reset**UCA1CTL1 |= UCSSEL_2;// SMCLKUCA1BR0 = 6;// 1MHz 9600 (see User's Guide)UCA1BR1 = 0;// 1MHz 9600UCA1MCTL = UCBRS_0 + UCBRF_13 + UCOS16;// Modln UCBRSx=0, UCBRFx=0,UCA1CTL1 &= ~UCSWRST;// **Initialize USCI state machine**UCA1IE |= UCRXIE;// Enable USCI_A0 RX interrupt } int main(void) {WDTCTL = WDTPW + WDTHOLD;// Stop WDTINIT_XT2();// Init XT2INIT_UCA0_UART();__bis_SR_register(GIE);// interrupts enabledP5DIR |= 0x01;// P5.0 LEDwhile (1)// Test P1.4{P5OUT ^= 0x01;// Toggle P5.0 using exclusive-OR__delay_cycles(1000000);while (!(UCA0IFG&UCTXIFG));UCA0TXBUF='b';}__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 interruptcase 2:// Vector 2 - RXIFGwhile (!(UCA0IFG&UCTXIFG));// USCI_A0 TX buffer ready?UCA0TXBUF = UCA0RXBUF;// TX -> RXed characterbreak;case 4:break;// Vector 4 - TXIFGdefault: break;} }
clark Zheng:
回复 Triton Zhang:
谢谢指点,我将继续更新我移植后的结果。另外有两个小疑问,请教您下。
1、XT2如果是24MHZ,电压等级我设置成 SetVcoreUp(PMMCOREV_3);是否有问题。 参考代码是设置成SetVcoreUp(PMMCOREV_2);
2、F5xx_F6xx_Core_Lib 和MSP-EXP430F5438_HAL添加到我的工程里面是否有相关的User guide?
我操作的流程是,复制文件夹到工程目录,并且在include options里面添加了路径,但是编译时提示编译器不支持。需要新的MSP430 Complier。
我装的是CCS5.1.1,编译器是TI V4.0.0,单独的MSP430编译器更新是否有相关下载?还是我需要更新CCS到5.5?
clark Zheng:
回复 Triton Zhang:
换了一个RS232的板子,已经没有问题了。再次多谢!
ping liang:
请告诉F5438A的小板,和Launchpad板子 /RST/TEST/VCC/TXD/RXD 飞线连接到F5438A的小板芯片脚对应连接线,我也在做5438A。谢谢。