This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

F5438A+ G2Lauchpad 调试串口的波特率的问题.求助



本人做了一个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 20MHz

  P11DIR = BIT1+BIT2;                       // P11.1-2 to output direction
  P11SEL |= BIT1+BIT2;                      // P11.1-2 to output SMCLK,MCLK
  P5SEL |= 0x0C;                            // Port select XT2
  UCSCTL6 &= ~XT2OFF;                       // Enable XT2
  UCSCTL3 |= SELREF_2;                      // FLLref = REFO
											// Since LFXT1 is not used,
											// sourcing FLL with LFXT1 can cause
											// XT1OFFG flag to set
  UCSCTL4 |= SELA_2;                        // ACLK=REFO,SMCLK=DCO,MCLK=DCO
  // Loop until XT1,XT2 & DCO stabilizes
  do
  {
	UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
											// Clear XT2,XT1,DCO fault flags
	SFRIFG1 &= ~OFIFG;                      // Clear fault flags
  }while (SFRIFG1&OFIFG);                   // Test oscillator fault flag
  UCSCTL6 &= ~XT2DRIVE0;                    // Decrease XT2 Drive according to
											// expected frequency
  UCSCTL4 |= SELS_5 + SELM_5;               // SMCLK=MCLK=XT2
  UCSCTL5 |= DIVM0 + DIVS0;                 //Div SMCLK/2 MCLK/2
}

void INIT_UCA0_UART(void)
{
  P3SEL |= 0x30;                             // P3.4,5 = USCI_A0 TXD/RXD

  UCA0CTL1 |= UCSWRST;                      // **Put state machine in reset**
  UCA0CTL1 |= UCSSEL_2;                     // SMCLK
  UCA0BR0 = 6;                              // 12MHz 115200 (see User's Guide)
  UCA0BR1 = 0;                              // 12MHz 115200
  UCA0MCTL |= 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/RXD

  UCA1CTL1 |= UCSWRST;                      // **Put state machine in reset**
  UCA1CTL1 |= UCSSEL_2;                     // SMCLK
  UCA1BR0 = 6;                              // 1MHz 9600 (see User's Guide)
  UCA1BR1 = 0;                              // 1MHz 9600
  UCA1MCTL = 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 WDT
  INIT_XT2();                               // Init XT2
  INIT_UCA0_UART();

  __bis_SR_register(GIE);                   // interrupts enabled

  P5DIR |= 0x01;                            // P5.0 LED
  while (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 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;
  }
}

  • 这个不是你代码的问题,Launchpad上面有个USB转串口的芯片,那个跑115200的速率会出问题

  • 谢谢指点,我将继续更新我移植后的结果。另外有两个小疑问,请教您下。

    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?

          

  • 换了一个RS232的板子,已经没有问题了。再次多谢!

  • 请告诉F5438A的小板,和Launchpad板子 /RST/TEST/VCC/TXD/RXD 飞线连接到F5438A的小板芯片脚对应连接线,我也在做5438A。谢谢。