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/EK-TM4C123GXL:UART_READ()以连续接收数据。

Guru**** 2461030 points
Other Parts Discussed in Thread: ENERGIA

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/652666/rtos-ek-tm4c123gxl-uart_read-to-receive-data-continuously

器件型号:EK-TM4C123GXL
主题中讨论的其他器件:Energia

工具/软件:TI-RTOS

您好!

我正在努力将多个传感器连接到 TM4C123G 微控制器、并通过 UART 读取数据并将其存储在缓冲器中、然后通过 USB 接口传输相同的数据。 我在通过 UART 读取数据时遇到问题、当我尝试读取并阻止我的下一条语句时、它只返回任何内容。 以下是代码的一个片段、

void echoFxn (UArg arg0、UArg arg1)
{

UART_MULTIPLE_INIT();
while (1)
{
//uart_read (uart1、a、sizeof (a));
// uart_read (uart2、c、sizeof (c));
UART_READ (uart3、b、sizeof (b)));
UART_WRITE (uart3、b、sizeof (b));
}

}

静态空 UART_MULTIPLE_INIT()
{
//创建数据处理关闭的 UART。
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 = 115200;

UART = UART_OPEN (Board_UART0、uartParams);

if (UART == NULL){
System_printf ("未打开");
system_flush();
//打开用户 LED
GPIO_WRITE (Board_LED0、Board_LED_ON);
System_abort ("打开 UART 时出错");
}

UART_PARAMS_INIT (uartParams1);
uartParams1.writeDataMode = UART_DATA_BINARY;
uartParams1.readDataMode = UART_DATA_BINARY;
uartParams1.readReturnMode = UART_RETURN_FULL;
uartParams1.readEcho = UART_ECHO_OFF;
uartParams1.budrate = 115200;
uart1 = UART_open (Board_UART1、&uartParams1);

if (uart1 == NULL){
System_printf ("UART1未打开");
system_flush();
//打开用户 LED
GPIO_WRITE (Board_LED0、Board_LED_ON);
System_abort ("打开 UART 时出错");
}

UART_PARAMS_INIT (uartParams2);
uartParams2.writeDataMode = UART_DATA_BINARY;
uartParams2.readDataMode = UART_DATA_BINARY;
uartParams2.readReturnMode = UART_return_full;
uartParams2.readEcho = UART_ECHO_OFF;
uartParams2.budrate = 115200;
uart2 = UART_OPEN (Board_UART2、&uartParams2);

if (uart2 == NULL){
System_printf ("UART2未打开");
system_flush();
//打开用户 LED
GPIO_WRITE (Board_LED0、Board_LED_ON);
System_abort ("打开 UART 时出错");
}

UART_Params_init (uartParams3);
uartParams3.writeDataMode = UART_DATA_BINARY;
uartParams3.readDataMode = UART_DATA_BINARY;
uartParams3.readReturnMode = UART_RETURN_FULL;
//uartParams3.readEcho = UART_ECHO_OFF;
uartParams3.budrate = 115200;
// uartParams.readMode = UART_MODE_CALLBACK;
// uartParams.readCallback = readCallback;
uart3 = UART_OPEN (Board_UART3、&uartParams3);

if (uart3 == NULL){
System_printf ("UART3未打开");
system_flush();
//打开用户 LED
GPIO_WRITE (Board_LED0、Board_LED_ON);
System_abort ("打开 UART 时出错");
}

} 

我请求别人帮助我、我至少需要一个 UART 来接收数据、这样我就可以解决其他 UART 接收的问题。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    看起来您不是在使用 TIVAWare、而是 Energia、这是一个类似于"设计"的平台。 您最好在 Energia 特定论坛上提问。

    Robert
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将在 CCS 7.3和 TI-RTOS 中针对 Tiva-2.16构建它。 我确信这不是 Energia 代码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    那么、它是 TI-RTOS 所独有的。 您最好在该论坛中尝试一下。

    也可以是您自己的发明。 在这种情况下、最好使用 TIVAWare

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

    e2e.ti.com/.../uartecho.c

    Robert、

    如果这是我的发明、我将找不到帮助。 我请您在发表如此令人厌恶的评论之前仔细阅读代码。

    谢谢、

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

    我的朋友- Robert 的评论不符合"讨厌"的标准。   他提出了两个有效的备选方案供您考虑。

    现在、"两种"选择都不符合 您的喜好-尽管这是"公平的"- 但这些建议证明、"远远不会让您感到厌烦!"

    对于记录-我也看了您的代码-看到了"正常"UART 配置和设置代码(无)-这表明、"此类必要数据是通过 RTOS 处理的。"   在这方面、Robert 和我自己都没有使用"受供应商限制"的 RTOS、因此我们可以提供"无见解"。

    "使用 RTOS "没有任何理由。    TivaWare API 中提供了强大的代码示例-非常好地展示了多个 UART 的(必要)配置和设置-这些示例可确保为您的工作提供帮助...     请注意、RTOS 添加了一个"复杂性层"-这应该输入到您的"设计注意事项"中。

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

    我已向 TI-RTOS 发出您的帖子的警报。

    Robert、不再有 TI-RTOS 论坛了、客户必须在特定于器件的论坛中发帖、然后我们有一个内部系统来提醒 TI-RTOS 团队有关此类线程的信息。 Nitihin 已将其发布在正确的论坛中、并为 RTOS 团队提供了大量详细信息。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、我已经在源文件 e2e.ti.com/.../EK_5F00_TM4C123GXL.c 中配置了多个 UART

    和头文件 e2e.ti.com/.../EK_5F00_TM4C123GXL.h 中

    但我的问题是、即使在这些配置之后、UART_READ 函数也不会读取任何数据。 您所说的配置和代码 TIVAware 是裸机实现。 我正在寻找一种适用于 RTOS 实现的方法。 我希望这一点更加清楚。

    谢谢你。

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

    你好、Nitihin、

    此外、查看您的代码与示例 TI-RTOS 项目、还提供了一些注释:

    1) 1)如果您在读取数据时遇到问题、我建议从配置和读取尝试中的一个 UART 通道开始。 当您让它为一个工作后、转到其他工作。

    2) 2)您似乎没有针对所使用的"b"变量/缓冲区的声明

    UART_READ (uart3、b、sizeof (b))); 

    您能更好地阐述一下吗? 另外、我建议使用更具描述性的名称...

    3) 3)是否确定您尝试读取的器件默认支持115200kbps 波特? 您可能需要使用较慢的器件、如9600才能启动。

    4) 4)是否正在检查 UART_open()的返回值以确保它们正确打开?

    5) 5)您是否在主函数中使用 Board_initUART()? 如果是、您是否检查了是否打开了正确的 UART 端口? 默认函数只会初始化 UART0、因此您需要为 项目修改 EK_TM4C123GXL.c 文件以添加更多端口。 (更多的原因是只使用一个端口、特别是 UART0作为启动器)

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

    看起来您已经回答了我的问题5)在我编写自己的文章时,您提供了一个帖子,但我仍然强烈建议您从一个*单* UART 通道开始,直到您已阅读并从中扩展。 请仔细查看我的问题/意见1至4。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Ralph Jacobi"] Robert、 不再有 TI-RTOS 论坛、客户必须在特定于器件的论坛中发帖、然后我们有一个内部系统来提醒 TI-RTOS 团队有关此类线程的信息。

    考虑到在 TI RTOS 方面几乎没有什么专业知识、这是不幸的。 我怀疑为 RTOS 社区提供服务不足和设备社区过载可能会带来收益。

    Robert

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

    [引用 user="Nitihin N"]如果这是我的发明,我将找不到帮助。

    有多少人相信这一点、您会感到惊讶。

    [引用 user="Nitihin N"]如此令人厌恶的评论。

    !??!

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不知怎么说,“亲吻”,“进入了我的脑海?” 已提到多个传感器-但每个传感器都是通过 CMOS 级 UART 输出的"传感器"。 (我的经验表明、通过 I2C 或 SPI - UART 输出的"大多数此类传感器"非常罕见。)

    没有提到"此类传感器与海报的 MCU 之间的隔离"。 如果传感器基于 UART、则可能会采用某种形式的"线路驱动器"(以大大扩展其通信范围)和此类线路驱动器(如果不是预期的并且通过"匹配的线路驱动器@ MCU "正确设置)、从而使 MCU (几乎)遭受某些"死亡/破坏"。

    有些"传感器数据"非常需要、尤其是在"未接收到传感器数据"的情况下...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尼蒂欣

    您使用的是 Launchpad 还是定制板? 如果您使用的是定制板、您能否连接一个示波器以查看 UART 是否正在发送/接收任何内容?

    是否可以确认其他 UART 正在工作? 此外、您能否在没有 USB 的情况下尝试 UART3。 看起来 USB0和 UART3都使用 PC6和 PC7、因此我们来排除与 USB 有关的任何有趣业务。

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

    您好 Ralph、

    1) 1)我也使用单个 UART 进行了检查、它工作正常。

    2) 2)变量"b"的声明是全局完成的、是整数类型的数组。 UART 接收数据必须存储在该缓冲区中。

    3) 3)传感器模块(是一个 BLE 模块、用于传输通过 UART 接收的数据)能够以115200kbps 的速率发送数据。 我会再次检查 UART 发送的发生情况。

    4) 4)所有 UART 模块都正确打开、我已经使用断点对其进行了检查、并且我还设置了一个检查状态、即如果它返回 NULL、系统将中止。

    尽管我会再次检查各个功能、但它是否无法正常工作、因为 它是否必须同时使用 UART 和 USB 来执行某些操作?  

    谢谢你。

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

    我使用的是 Launchpad、我已检查 UART 是否正在传输数据。 我已经单独检查了所有 UART 是否正常工作。 我怀疑所有配置/定义/声明是否都正确? 我已在之前的评论中附上这些代码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否确认 UART3是否正常工作而不涉及 USB?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我检查了数据是否通过 UART 在传感器侧传输、以及传感器是否正在传输数据。 其次、我检查了 UART3通道上的数据接收端、但它不起作用、即没有任何通道接收数据。 我陷入了这个问题。

    谢谢你。

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

    产品中的 UART Echo 示例是否适合您? 您能否确认您在应用程序中调用 Board_initUART、而 UART 实例均不起作用。

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

    UART 回显示例确实起作用、它反映了我在串行监视器上键入的字符。我尝试实现相同的概念、但它必须接收字符、而不是键入。 我在主函数内调用 Board_initUART。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否随附一个问题示例程序并告诉我您使用的是哪款 Launchpad?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我附加了示例代码、UART 在这里接收数据并通过 USB 传输数据。 我是 Tiva TM4C123G Launchpad.e2e.ti.com/.../4341.main.c

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

    我确认了在使用 UART UART_Handle (而不是 uart3)进行接收时代码的工作情况。 这是否适合您?

    假设确实如此、您能否给我提供您在 uart3句柄(实际上是 UART5)上用于通信的布线。 此外、您是在 LaunchPad 上还是在定制板上执行此操作?

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

    您好 Todd、

    我设法使其适用于 UART5、并将其跨引脚 E4和 E5进行连接。 但它仍然不是通过 USB COM 端口传输这些值。 它会发送空字符、是否必须使 UART 和 USB 协同工作、或者如果引脚配置正确、是否可以正常工作。

    谢谢你。