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: Problem with sending data from MSP430FR2433 to PC by UART (USCIA0)

Part Number: MSP430FR2433
Other Parts Discussed in Thread: MSP430WARE

Hi all, I am trying to transmit data from microcontroller to pc  by running uscia0 in uart mode. I took an example from msp430ware and modified to send a character to pc when a  push button pressed. But I can't see any data on my PC.

PC side I am using Linux host with putty. and I am looking at the port ttyACM1 (Not sure which of ttyACM1 and ttyACM0 to check). I am including entire code below. Kindly notify me if I am doing any mistake in the implementation.

Thanks,

Ravi.\

///////////////////////////////////////////////////////   code /////////

#include <msp430.h>
#define MCLK_FREQ_MHZ 8                     // MCLK = 8MHz
void Software_Trim();
void Init_GPIO();
volatile unsigned int p=0;

int main(void)
{
  WDTCTL = WDTPW | WDTHOLD;                // Stop watchdog timer

  // Configure GPIO
  Init_GPIO();
  PM5CTL0 &= ~LOCKLPM5;                    // Disable the GPIO power-on default high-impedance mode
                                           // to activate 1previously configured port settings
  __bis_SR_register(SCG0);                 // disable FLL
    CSCTL3 |= SELREF__REFOCLK;               // Set REFO as FLL reference source
    CSCTL1 = DCOFTRIMEN | DCOFTRIM0 | DCOFTRIM1 | DCORSEL_3;// DCOFTRIM=3, DCO Range = 8MHz
    CSCTL2 = FLLD_0 + 243;                   // DCODIV = 8MHz
    __delay_cycles(3);
    __bic_SR_register(SCG0);                 // enable FLL
    Software_Trim();                         // Software Trim to get the best DCOFTRIM value



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

  // Configure UART pins
  P1SEL0 |= BIT4 | BIT5;                    // set 2-UART pin as second function

  // Configure UART
  UCA0CTLW0 |= UCSWRST;
  UCA0CTLW0 |= UCSSEL__SMCLK;

  // Baud Rate calculation
  // 8000000/(16*9600) = 52.083
  // Fractional portion = 0.083
  // User's Guide Table 14-4: UCBRSx = 0x49
  // UCBRFx = int ( (52.083-52)*16) = 1
  UCA0BR0 = 52;                             // 8000000/16/9600
  UCA0BR1 = 0x00;
  UCA0MCTLW = 0x4900 | UCOS16 | UCBRF_1;
  UCA0STATW |= 0x0080;
  UCA0CTLW0 &= ~UCSWRST;                    // Initialize eUSCI

while(1)
{
  if (!(P2IN & BIT3))
          {
              if(p==0)
              {
                
               UCA0TXBUF = 1 ;                     //  P1.0 TOGGLE
          
               __no_operation();

              p=1;
              }
          }
          else
              p = 0;
}
}


void Init_GPIO()
{
    P1DIR = 0xFF;  P3DIR = 0xFF;
    P1REN = 0xFF;  P3REN = 0xFF;
    P1OUT = 0x00;  P3OUT = 0x00;
    P2DIR |= BIT3;                          // Set P2.3 to input direction
    P2REN |= BIT3;                          // P2.3 Enable pull-up resistors
    P2OUT |= BIT3;                   // Configure P2.3 pull-up


}

void Software_Trim()
{
    unsigned int oldDcoTap = 0xffff;
    unsigned int newDcoTap = 0xffff;
    unsigned int newDcoDelta = 0xffff;
    unsigned int bestDcoDelta = 0xffff;
    unsigned int csCtl0Copy = 0;
    unsigned int csCtl1Copy = 0;
    unsigned int csCtl0Read = 0;
    unsigned int csCtl1Read = 0;
    unsigned int dcoFreqTrim = 3;
    unsigned char endLoop = 0;

    do
    {
        CSCTL0 = 0x100;                         // DCO Tap = 256
        do
        {
            CSCTL7 &= ~DCOFFG;                  // Clear DCO fault flag
        }while (CSCTL7 & DCOFFG);               // Test DCO fault flag

        __delay_cycles((unsigned int)3000 * MCLK_FREQ_MHZ);// Wait FLL lock status (FLLUNLOCK) to be stable
                                                           // Suggest to wait 24 cycles of divided FLL reference clock
        while((CSCTL7 & (FLLUNLOCK0 | FLLUNLOCK1)) && ((CSCTL7 & DCOFFG) == 0));

        csCtl0Read = CSCTL0;                   // Read CSCTL0
        csCtl1Read = CSCTL1;                   // Read CSCTL1

        oldDcoTap = newDcoTap;                 // Record DCOTAP value of last time
        newDcoTap = csCtl0Read & 0x01ff;       // Get DCOTAP value of this time
        dcoFreqTrim = (csCtl1Read & 0x0070)>>4;// Get DCOFTRIM value

        if(newDcoTap < 256)                    // DCOTAP < 256
        {
            newDcoDelta = 256 - newDcoTap;     // Delta value between DCPTAP and 256
            if((oldDcoTap != 0xffff) && (oldDcoTap >= 256)) // DCOTAP cross 256
                endLoop = 1;                   // Stop while loop
            else
            {
                dcoFreqTrim--;
                CSCTL1 = (csCtl1Read & (~(DCOFTRIM0+DCOFTRIM1+DCOFTRIM2))) | (dcoFreqTrim<<4);
            }
        }
        else                                   // DCOTAP >= 256
        {
            newDcoDelta = newDcoTap - 256;     // Delta value between DCPTAP and 256
            if(oldDcoTap < 256)                // DCOTAP cross 256
                endLoop = 1;                   // Stop while loop
            else
            {
                dcoFreqTrim++;
                CSCTL1 = (csCtl1Read & (~(DCOFTRIM0+DCOFTRIM1+DCOFTRIM2))) | (dcoFreqTrim<<4);
            }
        }

        if(newDcoDelta < bestDcoDelta)         // Record DCOTAP closest to 256
        {
            csCtl0Copy = csCtl0Read;
            csCtl1Copy = csCtl1Read;
            bestDcoDelta = newDcoDelta;
        }

    }while(endLoop == 0);                      // Poll until endLoop == 1

    CSCTL0 = csCtl0Copy;                       // Reload locked DCOTAP
    CSCTL1 = csCtl1Copy;                       // Reload locked DCOFTRIM
    while(CSCTL7 & (FLLUNLOCK0 | FLLUNLOCK1)); // Poll until FLL is locked
}

  • Hi Ravi,

    You may scope the signals on UART TX pin to confirm whether the MCU sent out the data. If yes, there should be some issue on your PC host configuration.
  • Hi Ravi,

    I haven’t heard from you for several days, so I’m assuming you were able to resolve your issue. If this isn’t the case, please click the "This did NOT resolve my issue" button and reply to this thread with more information. If this thread locks, please click the "Ask a related question" button and in the new thread describe the current status of your issue and any additional details you may have to assist us in helping to solve your issues.
  • Dear Wei,

    Thank you for your reply.

    I connected Tx pin to scope and noticed data is getting transferred.

    But I noticed problem is there in my code. I am assigning data to Tx buffer as UCA0TXBUF =1. But when I changed it to UCAOTXBUF = '1' putty is able to display the character correctly. Now I can send data to PC.

    I realized that for putty to interpret what character I am sending, I should send its ASCII value. The problem is solved.

    Sorry for not getting back to you earlier and Once again thank you for your message.

    Regards,

    Ravi

**Attention** This is a public forum