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.

[参考译文] MSP430FR2355:UART TX 问题?

Guru**** 2389990 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1120136/msp430fr2355-uart-tx-issue

器件型号:MSP430FR2355

您好...

我正在读取 I2C 寄存器、并在19200年通过 UART 将其传输到 PC (使用 RealTerm)。  我已经验证了 TXIE 是否已设置,CNTR 和 UART_TX_CNTR 是否始终是正确的值...我也对 itoa 函数充满信心。  我已经检查了 val[]是否也正确。  但是、我在端口上看不到良好的数据。  例如、我将0x34写入寄存器、回读后的 UART 显示30 (后跟一些奇怪的字符...如前所述、所有变量在 CCS 中看起来都是正确的、因此我倾向于将其视为代码。   

1. 对我的错事有什么想法?

2. 在设置 TXIE 之前应该加载 TXBUFFER、还是可以像我一样加载 TXBUFFER? (置位 TXIE,进入 ISR,然后置位 TXBUFFER)。。。。这似乎是正常的,因为我的第一个字节3看起来是正确的。。。。。

谢谢

我有以下 ISR TX UART 代码:   

          if (cntr == uart_tx_cntr)
          {
              applicationUART.pSysCommsA->UCAxTXBUF = 0x13;
              applicationUART.pSysCommsA->UCAxIE &= ~UCTXIE;
              cntr = 0;
          }
          else if (!(cntr % 2)) //even
              applicationUART.pSysCommsA->UCAxTXBUF = itoa((val[cntr] >> 4) & 0xF);
          else
              applicationUART.pSysCommsA->UCAxTXBUF = itoa((val[cntr]) & 0xF);

          cntr++;
          break;

主代码:

        if (Mutex.UART_tx)
        {
            /*
             * send register to UART
             */
            i2cstate = I2CIDLE;
            Mutex.UART_tx = F;
            applicationUART.pSysCommsA->UCAxIE |= UCTXIE;
        }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    已解决....模数在计数器提前时使用不当

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这样的症状-- 0x34变为不是-安静 的0x34 --通常意味着您的时钟关闭,即 UART 时钟,它可以是 SMCLK、BRW 或调制器常量。

    如果您有示波器、测量位通常是有益的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的发帖和分享!