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.

[参考译文] TM4C1294NCPDT:RS485通信:两个 TM4c1294ncpdt 控制器通信中的 UART 速度问题

Guru**** 2539500 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1201918/tm4c1294ncpdt-rs485-communication-uart-speed-issue-in-two-tm4c1294ncpdt-controller-communication

器件型号:TM4C1294NCPDT

*/李国坚女士/李国坚女士(香港)(香港)有限公司 UART 初始化文件(英文 /

空配置 ModubusUART6 (空)

//启用 UART 使用的 GPIO 外设。
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOP);

//启用 UART6。
SysCtlPeripheralEnable (SYSCTL_Periph_UART6);

//针对 UART 模式配置 GPIO 引脚。
GPIOPinConfigure (GPIO_PP0_U6RX);
GPIOPinConfigure (GPIO_PP1_U6TX);
GPIOPinTypeUART (GPIO_PORTP_BASE、GPIO_PIN_0 | GPIO_PIN_1);

// TODO:以前的 Buad 率:115200
//初始化控制台 I/O 的 UART
UARTConfigSetExpClk (UART6_BASE、SYSTEM MCLOCK、115200、(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE));
}

*/李国强(香港)代表:香港特区政府(香港)有限公司(香港特区 /

我已按照上述初始化函数设置 UART。 我已将波特率设置为115200。 理论上采用此波特率时、传输8位所需的时间 可以在(8/115200 =) 69usec 左右。 因此、这次传输600字节大约是42ms。 但在本例中、传输600字节需要128到200ms。 我们使用 Modbus-RS485通信、因此无论何时发送或接收、我们都必须切换方向引脚。  

我们将在以下代码中测量这个介于 S-RX-1和 S-RX-2之间的时间

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_3、GPIO_PIN_3);

UART0print ("S-RX-1\r\n");

/*从主设备发出的从设备数据请求:led on */
GPIOPinWrite (GPIO_PORTK_BASE、GPIO_PIN_1、GPIO_PIN_1);

FPGAincomingData[1]= slaveCommandRxBuf[1];

// TODO:SysCtlDelay (SYSTEMCLOCK/100);
softDelay (3);//必须延迟大于主机发送数据的时间,同时延迟接收


/*已发送至 MBUS-UART */
UART6print (((const char *) FPGAincomingData);

/*发送至 Debug-UART */
UART0print ("S-TX-2 >");UART0print ((const char*) FPGAincomingData);UART0print ("\n");
UART0print ("S-TX-3 >\r\n ");

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

此致、

萨加尔

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

    大家好、sagar:

    理论输出与理论输出完全相同。 即、如果您花费100%的时间持续驱动 UART 总线。 您应监控 UART 线路并查看驱动总线所花费的时间与总线空闲的时间、因为 MCU 的开销会发挥作用。 从缓冲区读取数据以及发送 UART 数据等所需的每个 API 调用都可能成为潜在的瓶颈、具体取决于例程的优化情况。 查看捕获结果、您应该能够确定发生传输延迟的区域。

    另外看起来您正在使用的方法没有使用 DMA。 您可以通过使用 DMA 来简化传输到 UART 外设的数据、从而加快该过程。

    此致、

    拉尔夫·雅各比

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

    我正在使用该 API UART6print (const char* text)  来传输600字节的数据。
    在此函数中、基地址 API 为 UARTCharPut (uint32_t ui32Base、unsigned char ucData)
    TI SDK 提供、因此我不想使用 UART DMA、所以可以通过任何其他方法来提高速度。

    void UART6print (const char*文本)

    常量字符* p;

    //对`text`的每个字符进行迭代,
    //直到我们到达 NUL 端接器
    for (p =文本;* p!='\0';p++)

    //将每个字符传递给某个函数
    UARTCharPut (UART6_BASE、* p);
    }
    }

    /***** UART.c - UART 驱动程序************ /
    //*****
    //
    //! 等待从指定端口发送字符。
    //!
    //! \param ui32Base 是 UART 端口的基地址。
    //! \param ucData 是要传输的字符。
    //!
    //! 此函数将字符\e ucData 发送到的发送 FIFO
    //! 指定的端口。 如果发送 FIFO 中没有空闲空间、则发送 FIFO 可以擦除
    //! 函数会等待到有可用空间后再返回。
    //!
    //! \无返回。
    //
    //*****
    空隙
    UARTCharPut (uint32_t ui32Base、unsigned char ucData)

    //
    //检查参数。
    //
    assert (_UARTBaseValid (ui32Base));

    //
    //等待空间可用。
    //
    while (HWREG (ui32Base + UART_O_FR)和 UART_FR_TXFF)

    }

    //
    //发送字符。
    //
    HWREG (ui32Base + UART_O_DR)= ucData;
    }

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

    您好!

    别忘了、每个字节也至少有一个起始位和停止位、因此是10位、而不是8位。 您的42ms 实际上大约是50ms。

    UART 有一个16字节 FIFO、因此它应该能够端到端发送字节-除非 FIFO 在某个时刻变空。 也许您可以在输出上找到示波器、查看间隙的位置-每个字符之间或几个字符组之间。

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

    大家好、sagar:

    Jim 在这里提供了很好的指导-此时、我们确实需要了解传输中的差距在哪里、以便在此处提供有关可能出现瓶颈的进一步建议。

    此致、

    拉尔夫·雅各比