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.

[参考译文] CCS/CC3220SF-LAUNCHXL:编辑库 UART。

Guru**** 2562200 points
Other Parts Discussed in Thread: CC3220SF

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/912133/ccs-cc3220sf-launchxl-edit-library-uart

器件型号:CC3220SF-LAUNCHXL
主题中讨论的其他器件:CC3220SF

工具/软件:Code Composer Studio

您好支持者!

我通过 UART 将 CC3220sf_launchxl 接口与 CPU 配合使用。 当我发送数据包时,从 CPU(数据接收丢失)接收数据 UART。   

我希望从 CPU 接收数据并同时发送 TCP/IP 数据包、但数据 UART 仍然正确。

1个线程中的 UART 和 TCP/IP 进程。

我想自定义库。 我可以这么做吗?

谢谢你。

VU。

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

    嘿 Vu、

    您无需编辑 UART 库。 CC32XX 器件的主机驱动程序使用内部 SPI 外设。 因此、您可以同时调用主机驱动程序 API 和 UART API、而不会发生冲突。

    您能否共享您正在使用的 API 调用或一些代码以及您收到的错误消息?

    谢谢、

    Paul

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

    您好 Paul。

    我的代码相同:

    /*创建 UART */
    UART_PARAMS_INIT (uartParams1);
    uartParams1.writeMode = UART_MODE_CALLBACK;
    uartParams1.readMode = UART_MODE_CALLACK;
    uartParams1.writeDataMode = UART_DATA_BINARY;
    uartParams1.readDataMode = UART_DATA_BINARY;
    uartParams1.readReturnMode = UART_RETURN_FULL;
    uartParams1.readEcho = UART_ECHO_OFF;
    uartParams1.budrate = 115200;
    uartParams1.readCallback = UART_READ_CALLBACK;
    uartParams1.writeCallback = UART_write_callback;
    //uartParams1.readTimeout = 10;
    uart1 = UART_open (CONFIG_UART_1、&uartParams1);
    
    if (uart1 == NULL){
    Display_printf (display、0、0、"UART Initialize Fail!\n");
    while (1);
    }否则{
    display_printf (display、0、0、"UART initialized!\n"\});
    }
    UART_READ (uart1、&DATA_UART、1); 

    我将其称为 func  

    /*创建 UART */
    UART_PARAMS_INIT (uartParams1);
    uartParams1.writeMode = UART_MODE_CALLBACK;
    uartParams1.readMode = UART_MODE_CALLACK;
    uartParams1.writeDataMode = UART_DATA_BINARY;
    uartParams1.readDataMode = UART_DATA_BINARY;
    uartParams1.readReturnMode = UART_RETURN_FULL;
    uartParams1.readEcho = UART_ECHO_OFF;
    uartParams1.budrate = 115200;
    uartParams1.readCallback = UART_READ_CALLBACK;
    uartParams1.writeCallback = UART_write_callback;
    //uartParams1.readTimeout = 10;
    uart1 = UART_open (CONFIG_UART_1、&uartParams1);

    if (uart1 == NULL){
    Display_printf (display、0、0、"UART Initialize Fail!\n");
    while (1);
    }否则{
    display_printf (display、0、0、"UART initialized!\n"\});

    UART_READ (uart1、&DATA_UART、1);

    */结束 init*/

    我在 while (1)中再次调用 UART_read{};

    数据接收未满。

    VU。

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

    嘿 Vu、

    很抱歉耽误你的回答。

    根据您提供的代码、您会看到您从 UART 读取的数据每次一个字节。 我假设您还实现了 UART_READ_CALLBACY()函数,该函数在每次写入数据时处理从缓冲区读取此字节数据的操作。 但是、当您说您没有收到完整数据时、我有点困惑。 传输数据时、您是否缺少一些随机字节、或者是否有一个完全停止接收数据的点?

    我看到可能会导致问题的一件事是您在 while (1)循环中调用 UART_read()。 如果您有任何类型的代码在 while (1)循环中延迟或休眠、这可能会延迟下一个读取调用、从而导致随机数据字节丢失。 相反,请尝试将其从 while 循环中取出,并将其放在 UART_READ_CALLY()函数的末尾。 这样、在处理数据缓冲区后、您可以立即开始从 UART 读取数据。

    谢谢、
    Paul

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

    您好 Paul。

    当我传输数据时、数据会随机丢失。 每个数据帧都有页眉和页脚。

    我已经将 UART_READ()与 UART_READ_CALLACK 一起使用,数据仍然丢失。 数据输入是连续的,如果我等待调用 calling()函数,我将无法立即处理数据。  

    感谢您的回答。

    VU。

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

    嘿 Vu、

    您如何验证您丢失的数据包? 可以发送此捕获的屏幕截图、以便我可以看到发生了什么情况?

    我认为您正在正确初始化 UART 外设、因此没有问题。 您能否验证 CPU 和您的应用程序之间的 UART 设置(波特率、数据大小、奇偶校验、停止、流控制)是否相同?

    您是否还可以尝试增大 DATA_UART RX 缓冲器的大小?

    此致、
    Paul