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.

[参考译文] SW-EK-TM4C123GXL:将 USB_DEV_BULK 示例与 UART0不同的 UART 一起使用

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1186045/sw-ek-tm4c123gxl-using-usb_dev_bulk-example-with-a-different-uart-from-uart0

器件型号:SW-EK-TM4C123GXL
Thread 中讨论的其他器件:EK-TM4C123GXL

大家好、  

我正在尝试创建一个应用、其中 Tiva 被配置为 USB 器件、通过串行端口进行下行通信。  

我已经成功通过 USB_DEV_BULK 示例测试、其中 PC 向 USB 器件发送一个字符串、该字符串由 cap 回答。  

现在、我将修改此示例、以使用 UART 将通过 USB 从 PC 接收到的字符串发送到另一个器件。 使用 UART0没有问题、购买时我无法使用不同的 UART 使其运行、即使使用不同于 UART0的 UART 也会阻止 USB 通信。  

这是我的 UART 配置:  

//UART4
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_UART4);
    GPIOPinConfigure(GPIO_PC4_U4RX);
    GPIOPinConfigure(GPIO_PC5_U4TX);
    GPIOPinTypeUART(GPIO_PORTC_BASE, GPIO_PIN_4 | GPIO_PIN_5);
    UARTClockSourceSet(UART4_BASE, UART_CLOCK_PIOSC);
    UARTStdioConfig(4, 115200, 16000000);

在 main 的后面部分,从 USB 接收后,我只需使用 UARTSend 函数:

....

UARTSend(UART4_BASE, (uint8_t*)tx_buffer, 6);
....



//*****************************************************************************
//
// Send a string to the UART.  This function sends a string of characters to a
// particular UART module.
//
//*****************************************************************************
void
UARTSend(uint32_t ui32UARTBase, const uint8_t *pui8Buffer, uint32_t ui32Count)
{
    //
    // Loop while there are more characters to send.
    //
    while(ui32Count--)
    {
        //
        // Write the next character to the UART.
        //
        MAP_UARTCharPut(ui32UARTBase, *pui8Buffer++);
    }
}

上述代码对于 UART0来说是完美的、但对于其他 UART 则不是如此。 我认为我非常关注 GPIO、端口... 配置。  

有什么想法或可能的原因?

此致  

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

    您好!

     原因是 UART0是唯一连接到 EK-TM4C123GXL 上 ICDI 探针并作为 COM 端口进行枚举的 UART。 未连接 UART4。   有关详细信息、请参阅 EK-TM4C123GXL 用户指南。 要使用 UART4、您需要通过 USB 转串行适配器、如 https://www.amazon.com/DSD-TECH-Adapter-FT232RL-Compatible/dp/B07BBPX8B8/ref=sr_1_21?keywords=Serial+To+Usb+Adapter&qid=1673372890&sr=8-21。 您可以找到其他类似的适配器。 我不赞成任何一个特定的问题。  

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

    感谢您迅速回复 Charles、

    在我尝试开发的应用中、我希望使用 PC 和 Tiva 之间的 USB 端口以及 Tiva 和下游 MCU 之间的第二个 UART、因此我不需要 UART 充当虚拟 COM 端口。 现在,我只是尝试向 UART 发送从 USB 端口接收到的内容,并在该 UART 的 TX 引脚上使用示波器进行检查,而不使用 ICDI,始终在设备模式下工作。 这是可行的吗?

    此致  

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

    您好!  

    我找到了问题所在的位置:在 USB_DEV_BULK 示例中包含的 startup_ccs.c 文件中定义的矢量表中、UARTStdioIntHandler 被分配到 UART0 Rx 和 Tx 位置。  

     只需将 UARTStdioIntHandler 交换到 UART1 Rx 和 Tx 位置、即可 使 UART1正常工作。  

    无论如何都谢谢。  

    此致