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/TM4C123GH6PM:如何使用 FIFO 在 UART 中发送数据包?

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/587538/ccs-tm4c123gh6pm-how-to-send-a-data-packet-in-a-uart-using-fifo

器件型号:TM4C123GH6PM

工具/软件:Code Composer Studio

您好!

  我对 UART 部分有疑问。如何通过 UART 中的 FIFO 发送13字节的数据包。  

#pragma pack (1)

typedef struct __Datappacket__

unsigned int Header;
unsigned char Maxsize;
int X_Data 短接;
短整型 Y_Data;
int Z_Data 短接;
短整型校验和;
}数据包;

假设上面是我的数据包、大小为13字节、我希望通过 UART 将这些数据包发送到 PC 的串行端口。然后我将在 PC 端解码数据包以进行功能工作。有人能指导我如何处理这些数据包。

在 Tiva 和数据表中研究了一些论坛之后、我通过在数据寄存器中写入数据来确定数据是否需要通过 UART 进行 Tx-IT。因此、研究示例中存在的论坛和 UART_polled.c、我有一个想法

UARTCharPut (UART0_BASE、sizeof (Datappacket));  

我不知道上述内容是否正确。是否有人可以提供在 UART 中处理这些内容的正确路径。

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

    您好!

      您可以执行如下操作,在调用 UARTSend()时将 sizeof (Datapkit)传递为字符数。 下面的示例代码也可以在 UART_ECHO.c 示例中找到。  

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

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

    不能、UARTCharPut 只向 UART 发送一个字符。 您可以将该函数置于 for 循环中、它看起来更像:

    void Output_Struct(Datappacket myPacket)
    {
    unsigned int i;
    char * c_ptr;
    
    c_ptr =(char *)&myPacket;
    for (i = 0;i < sizeof (Datapacket);i++)
    {
    UARTCharPut (UART0_BASE、* c_ptr++);
    }
    }
    

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

    感谢您的回复、

            但我想一次性发送整个数据包、从数据表中我发现 FIFO 水平(TX 和 RX)将为16 x 8 (16字节)。在这些链接中也是如此  

    http://users.ece.utexas.edu/~valvano/Volume1/E-Book/C11_SerialInterface.htm  

    (软件实际上可以向  UART0_DR_R 写入16个字节、硬件会按正确的顺序一次发送一个字节。) 我从下面的上面的书链接中获得的这一行链接到 交互工具11.4。 如果整个数据包是逐字节发送的、那么是否会发生数据丢失。请指导我如何单次将整个13字节数据包发送到 FIFO、我将在 PC 端对其进行解码。需要 发送这13字节数据包传输 持续到 FIFO。引导我清除这些 UART 的路径。

    交互式工具11.4.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    只要启用 FIFO、我提供的代码就会执行该操作。 对 UARTCharPUT()的每次调用都会在 FIFO 中放入一个字节,直到 FIFO 满。 写入 FIFO 的速度比串行数据传输快得多。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回复、

             现在、它运行良好、能够发送数据包。 非常感谢。