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.

[参考译文] MSPM0L1304:如何将从 UART 输出的文本和 ints/float 值打印到超级终端等应用

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1326919/mspm0l1304-how-to-print-text-and-ints-floats-out-of-uart-to-a-app-like-hyper-terminal

器件型号:MSPM0L1304
主题中讨论的其他器件:SysConfig

我正在使用 MSPM0-1304、并且我想知道如何使用 TX 输出引脚 PA23打印到 UART。 我尝试将其打印到超级终端或与之类似的应用。 我要打印的是可以是任意数字的字符串和数字值。 我使用的是 Code Composure Studio Theia。

谢谢!

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

    您是否尝试过 UARTEcho 示例? 可以帮助您快速入门。

    我已经创建了一个简单的字符串打印功能、

    您可以使用 sprintf ()来创建字符串-与 MSP430不同的是、MSPM0似乎对 Get 中的 float 有完整的 printf 支持。

    我使用一个简单的 SysTick 计时器来实现延迟、您可能只是浪费一些周期。

    volatile int TXChar =-1
    字符 TXData[64]
    void StartSerialTX(char *str) {
    
      while (TXChar != -1) {
        // wait for previous tx to finish
        Delay(10);
      }
    
      strcpy(TXData, str);
    
      TXChar = 0;
    
      DL_UART_Main_transmitData(UART_0_INST, TXData[TXChar++]);
    }

    void UART_0_INST_IRQHandler(void) {
      switch (DL_UART_Main_getPendingInterrupt(UART_0_INST)) {
    
      case DL_UART_MAIN_IIDX_RX:
        RXdata = DL_UART_Main_receiveData(UART_0_INST);
        // DL_UART_Main_transmitData(UART_0_INST, RXdata);
        break;
    
      case DL_UART_MAIN_IIDX_TX:
        if (TXData[TXChar] != '\0') {
          DL_UART_Main_transmitData(UART_0_INST, TXData[TXChar++]);
        } else {
          TXChar = -1;
        }
    
        break;
    
      default:
        break;
      }
    }

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

    当我使用回波示例时、看起来我可能正在获取数据并将其重新打印出来、我不确定如何将\n 放入他们使用的"gEchoData"中。

    对于您发送的这个示例代码、我如何使用"StartSerialTX"?

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

    例如、如果我想打印"G_HEATERNTC = 2011"

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

    用您的弦调用它。

    char buf ="g_HEATERNTC = 2011"

    StartSerialTX (buf);

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

    好了、 您如何设置延迟? 您是否 在 SysConfig 中使用 SysTick?

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

    另外、我在调试器中按下"START/CONTINE"按钮后似乎立即中止

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

    是的,我正在使用 SysConfig 中的 SysTick 与一点胶水创建 Arduino 像 Millis ().

    只能使用示波器

    DELAY_CYCLES (10000);

    之类的设置。

    我不知道为什么会崩溃、您可以发布您的代码吗?

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

    #include "ti_msp_dl_config.h"
    #include "string.h"
    
    volatile uint8_t gEchoData = 0;
    volatile int TXChar = -1;
    char TXData[64];
    
    void StartSerialTX(char *str) {
    
      while (TXChar != -1) {
        // wait for previous tx to finish
        delay_cycles(10000);
      }
    
      strcpy(TXData, str);
    
      TXChar = 0;
    
      DL_UART_Main_transmitData(UART_0_INST, TXData[TXChar++]);
    }
    
    int main(void)
    {
        SYSCFG_DL_init();
    
        NVIC_ClearPendingIRQ(UART_0_INST_INT_IRQN);
        NVIC_EnableIRQ(UART_0_INST_INT_IRQN);
        DL_SYSCTL_enableSleepOnExit();
    
        char *buf = "g_HEATERNTC = 2011";
    
        StartSerialTX(buf);
    }
    
    
    
    void UART_0_INST_IRQHandler(void)
    {
        switch (DL_UART_Main_getPendingInterrupt(UART_0_INST)) {
            case DL_UART_MAIN_IIDX_RX:
                gEchoData = DL_UART_Main_receiveData(UART_0_INST);
                break;
            case DL_UART_MAIN_IIDX_TX:
                if (TXData[TXChar] != '\0') {
                    DL_UART_Main_transmitData(UART_0_INST, TXData[TXChar++]);
                } else {
                    TXChar = -1;
                }
                break;
    
            default:
                break;
        }
    }

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

    我明天要试一下,但你不想在退出时睡觉,因为你想让 main 运行。

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

    您好、 

    通过 Github:GitHub - mpaland/printf 中的 tinyprintf 向 int/float 支持添加更多信息

    e2e.ti.com/.../TinyPrintf_5F00_uart_5F00_rw_5F00_M0G3507_5F00_nortos_5F00_ticlang.zip

    提供演示代码。

    此致、

    赫利克

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

    这里正在执行多项操作。

    一种是需要确保在 syscfg 中启用 UART 发送中断。

    另一个是程序的编写方式,它在 main ()的结尾掉下来,并在所有字符被发送前被调试器捕获和停止。 我得到一个"G"。 只需点击"Continue"就会发送其他字符。

    要真正修复它,请放入一个无限循环,以便 main ()永远不会退出:

    while (1){
      __ WFI ();
     }