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.

MSP430FR2433: 在我设置好串口初始化后放在while一直发送我的接收端,但是接收端接收不到任何的值。

Part Number: MSP430FR2433
Other Parts Discussed in Thread: MSP430F149

#include "msp430.h"

#define MAX_STRBUF_SIZE      32 /* 串口接收的最大数据 */


unsigned char g_u32RevCnt = 0;  /* 接收字符串自加变量 */
unsigned char gAr32_u8xString[MAX_STRBUF_SIZE]; /* 串口接收字符串数组 */


/*********************************************************************
                      *函数名称:void Init_GPIO( void )

                      *函数功能:串口IO初始化

                      *入口参数:无

                      *出口参数:无

                      *备注:无
*********************************************************************/
void Init_GPIO( void )
{
     P1DIR = 0xFF;
     P1REN = 0xFF;
     P1OUT = 0x00;
}

/*********************************************************************
                      *函数名称:void Transform_Str(unsigned char l_u8Data)

                      *函数功能:串口发送单字节函数

                      *入口参数:要发送的数据(l_u8Data)

                      *出口参数:无

                      *备注:无
*********************************************************************/
void Transform_Str(unsigned char l_u8Data)
{
      while(!(UCA1IFG&UCTXIFG));
      UCA1TXBUF = l_u8Data;
}

/*********************************************************************
                      *函数名称:int putchar(int ch)

                      *函数功能:putchar重定义函数

                      *入口参数:无

                      *出口参数:无

                      *备注:无
*********************************************************************/
int putchar(int ch)
{
    UCA1TXBUF = ch;
    while(!(UCA1IFG & UCTXIFG));
    return ch;
}

/*********************************************************************
                      *函数名称:void Usart_Init( void )

                      *函数功能:串口初始化

                      *入口参数:无

                      *出口参数:无

                      *备注:无
*********************************************************************/
void Usart_Init( void )
{
  Init_GPIO();
  PM5CTL0 &= ~LOCKLPM5;

  FRCTL0 = FRCTLPW | NWAITS_1;
  __bis_SR_register(SCG0);                           // disable FLL
  CSCTL3 |= SELREF__REFOCLK;                         // Set REFO as FLL reference source
  CSCTL0 = 0;                                        // clear DCO and MOD registers
  CSCTL1 &= ~(DCORSEL_7);                            // Clear DCO frequency select bits first
  CSCTL1 |= DCORSEL_5;                               // Set DCO = 16MHz
  CSCTL2 = FLLD_0 + 487;                             // DCOCLKDIV = 16MHz
  __delay_cycles(3);
  __bic_SR_register(SCG0);                           // enable FLL
  while(CSCTL7 & (FLLUNLOCK0 | FLLUNLOCK1));         // FLL locked

  CSCTL4 = SELMS__DCOCLKDIV | SELA__REFOCLK;         // set default REFO(~32768Hz) as ACLK source, ACLK = 32768Hz
                                                     // default DCOCLKDIV as MCLK and SMCLK source
  P1SEL0 |= BIT5 | BIT4;

  UCA0CTLW0 |= UCSWRST;
  UCA0CTLW0 |= UCSSEL__SMCLK;

  // Baud Rate calculation
  // 16000000/(16*9600) = 8.681
  // Fractional portion = 0.681
  // User's Guide Table 14-4: UCBRSx = 0xD6
  // UCBRFx = int ( (8.681-8)*16) = 11
  UCA0BR0 = 8;                             // 16000000/16/115200
  UCA0BR1 = 0x00;
  UCA0MCTLW = 0xD600 | UCOS16 | UCBRF_11;

  UCA0CTLW0 &= ~UCSWRST;                    // Initialize eUSCI
  UCA0IE |= UCRXIE;                         // Enable USCI_A0 RX interrupt

  __bis_SR_register(GIE);         //  interrupts enabled

}



/*********************************************************************
                      *函数名称:void USCI_A1_ISR(void)

                      *函数功能:串口接收中断

                      *入口参数:无

                      *出口参数:无

                      *备注:无
*********************************************************************/
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
  switch(__even_in_range(UCA0IV,USCI_UART_UCTXCPTIFG))
  {
    case USCI_NONE: break;
    case USCI_UART_UCRXIFG:     //      接收中断
      while(!(UCA0IFG & UCTXIFG));
        UCA0TXBUF = UCA0RXBUF;

    __no_operation();

      break;
    case USCI_UART_UCTXIFG: break;
    case USCI_UART_UCSTTIFG: break;
    case USCI_UART_UCTXCPTIFG: break;
    default: break;
  }
}

void main (void)
{
    Usart_Init();
    while(1)
    {
        while(!(UCA0IFG & UCTXIFG));
                UCA0TXBUF = UCA0RXBUF;
    }
}

在我改过UCAxCTLW0 寄存器的UCMODEx为0x01及空闲线多处理器模式后突出过正确的接收寄存器的值,但是中断始终没用工作,今天即使该了UCMODEX后也不起作用了。