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/EK-TM4C1294XL:UARTSend 不会发回大字符串-由于某种原因、它们正在被剪切

Guru**** 2482105 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/708841/ccs-ek-tm4c1294xl-uartsend-does-not-send-large-strings-back---they-are-being-cut-for-some-reason

器件型号:EK-TM4C1294XL

工具/软件:Code Composer Studio


我对"UART_ECHO.c"示例中的"UARTSend"函数有一个奇怪的问题。 出于某种原因、我通过 UART 发送命令"info"时收到的响应被截断。
我应该回来:
{\"版本\":\"1.0\"、\"id\":\"37826342234\"}

但我得到的只是这样的结果:
{"版本":"1.0"

当我使用"UARTSend"循环内的断点执行 char by char 操作时、它会返回完整的字符串。 这里可能需要延迟?

以下是我的 UARTSend 和 UARTIntHandler:

空 UARTSend (const uint8_t * pui8Buffer、uint32_t ui32Count)

   //
   //循环,同时有更多字符要发送。
   //
   while (ui32Count---)
   {
       //
       //将下一个字符写入 UART。
       //
       ROM_UARTCharPutNonBlocking (UART0_BASE、* pui8Buffer++);
   }


我使用以下 UART 中断处理函数:

空 UARTIntHandler (空)

   uint32_t ui32Status;

   //
   //获取中断状态。
   //
   ui32Status = ROM_UARTIntStatus (UART0_BASE、TRUE);

   //
   //清除已发出的中断。
   //
   ROM_UARTIntClear (UART0_BASE、ui32Status);

   //
   //在接收 FIFO 中有字符时循环。
   //
   字符 b[5];
   int i = 0;

   while (ROM_UARTCharsAvail (UART0_BASE))
   {
       //
       //从 UART 读取下一个字符并将其写回 UART。
       //
       B[i]= ROM_UARTCharGetNonBlocking (UART0_BASE);
       i++;
   }


   if (strstr (b、"info"))
   {
       CHAR*响应="{\"版本\":\"1.0\"、\"id\":\"37826342234\"}";
       UARTSend (响应、strlen (响应));
   }


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

    [引用 user="Liran Sorani">相反、我只得到以下反馈:
    "version":"1.0"

    它是否不会为您提供 "计数、 "裁剪字段?"   它总共有16个字符-这些字符提供了大量线索-它不是吗?

    MCU UART 中的"功能"是什么-也有这种"16"计数?   这可能是开始分析的好地方吗?

    您没有提到-您是否"检查了并联效果"-让您自己受到 UART 接收的影响?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    实际上、它是17字节-而不是16字节-请重新计数。 这是我检查的第一件事。 请看一下我发送的代码-没有任何与某个大小的"限制"相关的信息、或者我是否遗漏了某个内容? 正如我还说过的-在调试中它运行良好-如果 I BP 位于每个字符的 UARTsend 循环内、则所有字节都会被转换。
    并行效果是什么意思? 这是串行通信-保证交付以保留订单或您是否意味着其他事情-请解释。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    在 UARTSend 中,您正在调用 ROM_UARTCharPutNonBlocking ()。 您应该检查此 API 调用的布尔返回值。 如果返回 false、则 TX FIFO 中没有空间。 您应该等到 FIFO 空间可用。 当波特率较慢时尤其如此。 尝试一下、看看它是否会有所不同。 或者改用 ROM_UARTCharPUT()来查看它是否起作用。 UARTCharPUT()正在阻塞。 它将等待 TX FIFO 中有空间。
    当您使用断点时、它允许 UART 在 CPU 暂停时完成传输。 我认为这可能是你休息时它起作用的原因。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢你们