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.

[参考译文] RTOS/SIMPLELINK-MSP432-SDK:MSP432的 Tiva 驱动程序库中不存在与 UARTCharAvail 类似的函数

Guru**** 2589245 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/623382/rtos-simplelink-msp432-sdk-no-function-similar-to-uartcharavail-present-in-tiva-driver-library-for-msp432

器件型号:SIMPLELINK-MSP432-SDK

工具/软件:TI-RTOS

大家好、

我之前的项目是使用 Tiva 板完成的。 但是、现在我们已转到 MSP432 Launchpad、我们将使用 Simplelink SDK 版本。

我正在使用 RTOS 概念、我正在尝试查找 Tiva 驱动程序库中是否有类似"UARTCharsAvail (uint32_tBase)"的函数、以检查接收 FIFO 中是否有字符用于连续 UART 操作?

如果没有、请告诉我、我必须找到解决方案。

提前感谢您。

Vikram

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

    Vikram、

     如果我正确读取了您的意图,我认为 UART_read()函数可能已经满足您的需要。  此 API 使用 uartParams 结构来定义"读取返回模式"、其中包括将导致读取缓冲区填满、直到输入流到达换行。

    MSP432P4111 OutOfBox 演示程序中说明了此行为。 查看 UART_thread.c 源文件以查看如下所示的以下代码片段。 在此代码中、设置 UART_Handle 时使用 UART_RETURE_NEWLINE 读取模式。  这会设置一个 ISR 回调函数、每当输入流到达换行时、该函数就会调用。

    请告诉我这是否是您所使用的功能。

    /*定义 UART 参数*/
    UART_PARAMS_INIT (uartParams);
    uartParams.writeDataMode = UART_DATA_TEXT;
    uartParams.readDataMode = UART_DATA_TEXT;
    uartParams.readReturnMode = UART_return_NEWLINE;
    uartParams.readEcho = UART_ECHO_OFF;
    uartParams.baudrate = 115200;

    UART_Handle = UART_OPEN (Board_UART0、uartParams);

    if (UART_Handle == NULL){
    /* UART_open()失败*/
    while (1);

    while (1){
    UART_READ (UART_Handle、&rxString、MAX_STR_LENGTH);//input = RXD 字节

    ----------------------

    此致、

     Bob

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

    感谢 Bob 提供的宝贵意见。

    我会尝试一下、然后返回给您。

    此致、

    Vikram  

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

    尊敬的 Bob:

    我尝试将该概念用于演示 UART 代码、但没有发现结果有任何差异、因此您可以解释使用 UART_RETURE_NEWLINE v/s UART_RETURE_FULL 有何区别;

    我要从中获取数据的来源对我来说是一个黑盒、因为我们无法访问它将要发送的数据类型。

    任务是有一个脉冲发生器、该脉冲发生器通过 MSP432上的看门狗事件触发、并开始通过其 UART 线向 MSP432发送数据。 因此我们不确定它是否每次都发送新的行字符?

    谢谢你

    Vikram

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Vikram、
    除非另一端的器件显式感应换行符、否则您可能看不到换行符。 UART_RETURE_NEWLINE / FULL 参数决定给定线程何时解块或返回。 因此、换行符或缓存满条件都可以解阻该线程中的读取命令。

    正如我理解的那样、您只有1个 MSP432器件与其他器件通信、 您使用来自该其他器件的输入脉冲来触发 MSP432上的看门狗计时器(这正是您使用看门狗而不是仅允许外部脉冲触发中断的原因)。 在该脉冲之后、您将在一段时间内接收到恒定的数据流、并希望确保不会出现缓冲区溢出。 因此、您将定期检查缓冲区(最初使用 UARTCharsAvail (uint32_tBase))以处理该数据。

    这是对您尝试执行的操作的准确描述吗? 如果是、是否有原因不使用 UART 读取命令、并允许它在给定的缓冲区已满时解除阻止/返回? 我认为这将执行上述相同的操作。

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

    尊敬的 Bob:

    感谢你的答复。

    是的、我只有一个 MSP432器件通过 UART 与另一个器件(微脉冲发生器)进行通信。  看门狗的概念不是由另一个器件触发的、而是在 MSP432中以固定的时间间隔触发看门狗、并发布该看门狗触发事件、 我打开另一台设备并发送一些回复命令、另一台设备开始发送一段时间的数据流。  

    因此、我希望确保我不会收到缓冲区溢出错误、因为我必须使用环形缓冲区来持续收集接收到的数据、我也不想错过接收到的数据。

    我正在使用 UART_READ 命令、但问题是有时、我仍然遇到缓冲区溢出错误。

    因此、如果有一个类似于 UARTCharsAvail 的函数、我可以使用它在特定的固定数据值之后验证是否还有其他需要接收的内容。

    谢谢你

    Vikram

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

    Vikram、

     确定此处的 Rugh 方法将重新确定对传入数据流的了解程度,但以下是需要考虑的几个因素:

    1. UART 驱动程序 API 在 打开/初始化(UART_params_init()) UART 实例时具有相应的选项

    • UART_DATA_TEXT -处理发送换行的所有器件行
    • UART_RETURE_NEWLINE -当看到换行符而不是缓冲区已满时,使 UARTread()返回
    • 您可以使用上面的2个选项来最大限度地减少缓冲区溢出的可能性

    2.您也可以使用 UART_readPolling(),它在读取之前不会返回 字节数。 如何使用此功能以及设置的大小取决于传入的数据。 再说一次、如果 远小于缓冲器大小、则可以减少缓冲器溢出的可能性。

    此致、

     Bob

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

    非常感谢您提到的3个要点。 我将尝试使用选项1、因为我无法使用 UART_readPolling()函数。
    希望获得最佳结果。

    此致、
    Vikram