求高手看一个,UART 自发自收的问题!

2019-03-24 14:56发布

芯片是MSP430F5310
环境是IAR5.20.1

代码如下方式实现:
void Init_Clk(void)
{
 
  P5SEL |= BIT4+BIT5;                       //使能 XT1功能脚
 
  UCSCTL6 &= ~(XT1OFF);                     // XT1 开启
  UCSCTL3 = 0;                              // FLL Reference Clock = XT1
 
  // Loop until XT1,XT2 & DCO stabilizes - In this case loop until XT1 and DCo settle
  do
  {
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG  + DCOFFG);
                                    // Clear XT2,XT1,DCO fault flags
    SFRIFG1 &= ~OFIFG;                      // Clear fault flags
  }while (SFRIFG1&OFIFG);
 
  UCSCTL6 &= ~(XT1DRIVE_3);                 // Xtal is now stable, reduce drive strength
 
  UCSCTL4 |= SELA_0 ;                        // ACLK = LFTX1 (by default)
}


/*******************************************
函数名称:InitUARTA
功    能:初始化UART端口
参    数:无
返回值  :无
********************************************/
void Init_uartA(void)
{
  P4SEL = BIT4+BIT5;                        // P4.4,5 = USCI_A0 TXD/RXD
  UCA0CTL1 |= UCSWRST;                      // **Put state machine in reset**
  UCA0CTL1 |= UCSSEL_2;                     // SMCLK
  //UCA0CTL1 |= UCLISTEN;
  UCA1STAT |= BIT7;                         //使用自收自发模式
  UCA0BR0 = 0x03;                           // 32kHz/9600=3.41 (see User's Guide)
  UCA0BR1 = 0x00;                           //
  UCA0MCTL = UCBRS_1+UCBRF_0;               // Modulation UCBRSx=3, UCBRFx=0
  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  UCA0IE |= UCRXIE; 
}


/*******************************************
函数名称:InitUARTB
功    能:初始化UART端口
参    数:无
返回值  :无
********************************************/
void Init_uartB(void)
{
  P4SEL = BIT4+BIT5;                        // P4.4,5 = USCI_A0 TXD/RXD
  UCB0CTL1 |= UCSWRST;                      // **Put state machine in reset**
  UCB0CTL1 |= UCSSEL_2;                     // SMCLK
  //UCA0CTL1 |= UCLISTEN;
  UCB1STAT |= BIT7;                         //使用自收自发模式
  UCB0BR0 = 0x03;                           // 32kHz/9600=3.41 (see User's Guide)
  UCB0BR1 = 0x00;                           //
  UCA0MCTL = UCBRS_1+UCBRF_0;               // Modulation UCBRSx=3, UCBRFx=0
  UCB0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  UCB0IE |= UCRXIE; 
}


/*******************************************
函数名称:InitUARTB
功    能:初始化UART端口
参    数:无
返回值  :无
********************************************/
void Init_uartB(void)
{
  P4SEL = BIT4+BIT5;                        // P4.4,5 = USCI_A0 TXD/RXD
  UCB0CTL1 |= UCSWRST;                      // **Put state machine in reset**
  UCB0CTL1 |= UCSSEL_2;                     // SMCLK
  //UCA0CTL1 |= UCLISTEN;
  UCB1STAT |= BIT7;                         //使用自收自发模式
  UCB0BR0 = 0x03;                           // 32kHz/9600=3.41 (see User's Guide)
  UCB0BR1 = 0x00;                           //
  UCA0MCTL = UCBRS_1+UCBRF_0;               // Modulation UCBRSx=3, UCBRFx=0
  UCB0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  UCB0IE |= UCRXIE; 
}

/*******************************************
函数名称:BGet1Char
功    能:接收一个来自PC机的字符
参    数:无
返回值  :接收到的字符
********************************************/
uchar BGet1Char(void)
{
     while (!(UCB0IFG&UCTXIFG));    //等待接收到字符       
    return  UCB0RXBUF;
}

int main( void )
{

  WDTCTL   = WDTPW + WDTHOLD;           //关看门狗
  Init_Clk();
  Init_Port();

  Init_uartA();
  Init_uartB();

  _EINT();            //开总中断
 
  while(1)
  {

    ASend1Char(0x11);
   
    ReceiveV = BGet1Char();
   
    //LPM3;
  }
}

现在问题是在UCA0TXBUF时可以看到值!但是在UCB0RXBUF中看不到收到的值!

求高手指点!
别外在同一个芯片内实现一个UART 发一个UART 收,这样设置是不是有问题!






此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
浴火凤凰
2019-03-25 15:25
楼上都已经开始讨论串口通信了,我现在还在纠结5310的最小系统呢,希望楼主可以给出个最小系统的原理,我做个最小系统的板子但是用山寨的PIF仿真器不能用,现在不知道是仿真器问题还是最小系统的问题!qq:462629051

一周热门 更多>

相关问题

    相关文章