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/MSP432P401R:TI-RTOS 上的 UART 回调

Guru**** 2539500 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/568542/rtos-msp432p401r-uart-callback-on-ti-rtos

器件型号:MSP432P401R

工具/软件:TI-RTOS

您好!

我们正在尝试在 MSP432P401R 上实现 UART 回调函数。

我们按如下所述设置参数、

uartParams.readMode = UART_MODE_CALLACK;
uartParams.readCallback =(UART_Callback) UartReadCallback;
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.readReturnMode = UART_return_full;
uartParams.readEcho = UART_ECHO_OFF;
//uartParams.readTimeout = UART_WAIT_FOREVER;
uartParams.baudrate = 9600;

下面 介绍了回调函数、

void UartReadCallback (UART_Handle handle、void *rxbuf、size_t size){
charAvail=true;
system_printf ("回调函数\n");
system_flush();

永远不会调用回调函数。

如何实现 UART 回调函数?

它们是否有用于 UART 回调函数的任何示例代码?

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

    您好、Nikitha、

    您使用的是哪个版本的 TI-RTOS?

    此外、您能否向我们展示您在何处进行第一个 UART_read (..)? 您必须执行读取才能调用回调。

    如果您需要代码示例、我建议您查看 Resource Explorer (CCS 中的"View"菜单下)。

    它还可在以下位置使用:

    此致、

    米歇尔

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

    您好、 Michel、

    我们使用以下 TI-RTOS 版本:

    tirtos_tivac_2_16_00_08

    tirtos_tivac_2_16_01_14

    在这里、我们将执行我们的第一个 UART_Read()

    UART_Handle UART;
    UART_Params uartParams;
    UART_PARAMS_INIT (uartParams);
    uartParams.writeDataMode = UART_DATA_BINARY;
    uartParams.readDataMode = UART_DATA_BINARY;
    uartParams.readReturnMode = UART_return_full;
    uartParams.readEcho = UART_ECHO_OFF;
    uartParams.baudrate = 9600;
    UART = UART_OPEN (Board_UART0、uartParams);
    UART_WRITE (UART、echoPrompt、sizeof (echoPrompt));
    UART_READ (UART、INPUT、1);

    在 Resource Explorer 中、没有 UART 回调示例、它包含2个示例(日志记录和回波)。

    此致、

    Nikitha

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

    您好、Michel、

    我们使用的代码和下图向您展示了我们使用第一个 UART_READ 的位置。

    在资源文件资源管理器中、我们 找不到 UART 的回调函数、它包含 UART 记录和回显。

    此致、

    Nikitha。

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

    您回答正确、我检查了、找不到任何可用于回调模式的示例代码。

    我认为我缺少了一些东西:
    在您发布的第一个代码中、您有以下行:
    uartParams.readMode = UART_MODE_CALLACK;
    uartParams.readCallback =(UART_Callback) UartReadCallback;
    但是、在第二段代码中、您不会设置模式或回调函数。

    另一件事:我看不到对 UART_Init (UART_Handle handle)或 Board_initUART()的任何调用;
    我相信 Board_initUART()只是调用 UART_Init。 如果您可以写入 UART、则表示初始化已完成。

    最后一点:您的项目中应该有一个类型为 UARTMSP432_HWAttrs 的变量。 您能否检查并确保它存在并正确定义。



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

    您好、Michel、

    这是我们上次仅向您发送代码中的主要行的代码。

    UART_Handle UART;
    UART_Params uartParams;

    const char echoPrompt[]="\fEchoing Characters:\r\n";

    UART_PARAMS_INIT (uartParams);

    uartParams.readMode = UART_MODE_CALLACK;
    uartParams.readCallback =(UART_Callback) UartReadCallback;
    uartParams.writeDataMode = UART_DATA_BINARY;
    uartParams.readDataMode = UART_DATA_BINARY;
    uartParams.readReturnMode = UART_return_full;
    uartParams.readEcho = UART_ECHO_OFF;
    uartParams.baudrate = 9600;

    UART = UART_OPEN (Board_UART0、uartParams);

    UART_WRITE (UART、echoPrompt、sizeof (echoPrompt));
    UART_READ (UART、INPUT、1);

    while (1){
        if (charAvail){
           UART_WRITE (UART、INPUT、1);
        }

     类型为 UARTMSP432_HWAttrs 的变量存在于 我们的项目中的 UARTMSP432.h 文件中、其定义如下所示。

    typedef 结构体 UARTMSP432_HWAttrs{
    /*! UART 外设的基地址*/
    unsigned int baseAddr;
    /*! UART 外设的中断向量*/
    unsigned int Num;
    /*! UART 外设的中断优先级*/
    unsigned int 优先级;
    /*! UART 时钟源*/
    uint8_t 时钟源;
    /*!< UART 位顺序*/
    uint32_t bitOrder;
    /*!< UARTMSP432_BudrateConfig 条目数*/
    uint8_t numBodrateEntry 尝试;
    /*!<指向可能的 UARTMSP432_BudrateConfig 条目的表的指针*/
    UARTMSP432_BudrateConfig const *波特率 LUT;
    /*! 指向应用程序循环缓冲区的指针*/
    unsigned char * ringBufPtr;
    /*! ringBufPtr 的大小*/
    size_t ringBufSize;
    } UARTMSP432_HWAttrs;

    此致、

    Nikitha。

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

    您忘记了向我展示您在哪里调用 UART_Init(...)、而不是 UART_Params_init。(..)

    还有一件事:您是否开始从任务中读取? 需要运行 TI-RTOS 才能使 UART 正常工作。 您可以通过调用 BIOS_start()来启动 TI-RTOS;

    我的想法已经用完了、但您能否检查代码是否在阻塞模式下工作? 这将验证您的 IOS 和 UART 是否正在配置。

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

    您好、Michel、

    void UartReadCallback (UART_Handle handle、void *rxbuf、size_t size){

          charAvail=true;


    void taskFxn (UArg0、UArgarg1){

    UART_Handle UART;
    UART_Params uartParams;
    const char echoPrompt[]="\fEchoing Characters:\r\n";

    UART_PARAMS_INIT (uartParams);
    uartParams.readMode = UART_MODE_CALLACK;
    uartParams.readCallback =(UART_Callback) UartReadCallback;
    uartParams.writeDataMode = UART_DATA_BINARY;
    uartParams.readDataMode = UART_DATA_BINARY;
    uartParams.readReturnMode = UART_return_full;
    uartParams.readEcho = UART_ECHO_OFF;
    uartParams.baudrate = 9600;
    UART = UART_OPEN (Board_UART0、uartParams);

    if (UART == NULL){
          System_abort ("打开 UART 时出错");

    UART_WRITE (UART、echoPrompt、sizeof (echoPrompt));
    UART_READ (UART、INPUT、1);
    while (1){
           if (charAvail){
               UART_WRITE (UART、INPUT、1);
          }

    int main (空)

    Task_Params taskParams;

    Board_initGeneral();
    Board_initGPIO();
    Board_initUART();

    Task_Params_init (&taskParams);
    taskParams.STACKSIZE = TASKSTACKSIZE;
    taskParams.stack =_task0Stack;
    Task_construct(&task0Struct,(Task_FuncPtr) taskFxn、&taskParams、NULL);


    GPIO_WRITE (Board_LED0、Board_LED_ON);

    BIOS_start()

    返回(0);

    读取已在任务中启动。

    代码在阻塞模式下工作。  

    此致、

    Nikitha。