user5939530
user5939530

Reputation: 51

MSP430 UART receiving a string

Using MSP430F6736A embedded programming. Code written in Code Composer Studio.

I want to send some string for example some number(26) and then send it back on screen to the PC. Now, I´m getting only strange charracters. What should I improve?

 int main(void) {

    WDTCTL = WDTPW | WDTHOLD;   // Stop watchdog timer

    P2SEL |= BIT2 + BIT3;

    UCA2CTLW0 |= UCSWRST; //
    UCA2CTLW0 |= UCSSEL_1 ; // ACLK

    UCA2BR0 = 0x1B;    // 1200 Baud   32768 / 1200 = 27   0x1B
    UCA2BR1 = 0x00; // 1200 Baud
    UCA2MCTLW |= 0x94;

    UCA2CTLW0 &= ~UCSWRST; //

    UCA2IE |= UCRXIE;
    UCA2IFG = 0;

    __bis_SR_register(GIE); 

}

#pragma vector=USCI_A2_VECTOR
__interrupt void    Recieve_ISR(void)
{
    static char sprava[] = {""};
    int j = 0;
    int i = 0;

    for ( i = 0 ; i < sizeof sprava; i++)
    {
        sprava[i] = UCA2RXBUF;

     }

    UCA2TXBUF  =  UCA2RXBUF;
      for ( j = 0 ; j < sizeof sprava+1; j++)
      {
          UCA2TXBUF = sprava[j];
      }


}

Upvotes: 0

Views: 2770

Answers (1)

CL.
CL.

Reputation: 180210

  • Do not use magic numbers like 0x94; they make the code unreadable. Use the proper symbols instead.
  • In an embedded firmware, you cannot return from main(). You must run a loop, or go to sleep.
  • The interrupt is raised when a single received byte is available. The interrupt handler must not try to read multiple bytes.
  • TXBUF can be written only when the transmit buffer is empty. You have to wait for that before every byte.

Upvotes: 0

Related Questions