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.

[参考译文] TM4C129XNCZAD:将多个 UART 与 TI-RTOS 一起使用

Guru**** 2391415 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1069008/tm4c129xnczad-using-multiple-uarts-with-ti-rtos

部件号:TM4C129XNCZAD

大家好,我正在尝试将一个旧项目迁移到 TM4C129XNMCZAD 微控制器上,我想使用 TI-RTOS,以便可以进行多线程处理。 我遇到的一个问题是,我不知道如何初始化除 UART0外的 UART 外设。 尽管此主板支持多个 UART,但在 Board.h 文件中定义的唯一 UART 是 UART0。 在 TI-RTOS 上使用多个 UART 的 TM4C129x 设备上是否有教程或示例? 我有 UART 回声示例工作,因此我在创建任务时没有问题。

//code in the Board.h file

#define Board_USBDEVICE             DK_TM4C129X_USBDEVICE

#define Board_UART0                 DK_TM4C129X_UART0 //=> the only UART definition.

#define Board_WATCHDOG0             DK_TM4C129X_WATCHDOG0

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

    您好 Omer,

    Board.h 文件和 DK_TM4C129X.c/.h 文件是根据所有示例项目使用的内容提供的。 可以根据需要对每个用户进行扩展。

    例如,要使用固件包1和固件包2插槽为 UART 再添加两个 UART,可以进行以下调整。

    Board.h

    #define Board_UART0                 DK_TM4C129X_UART0
    #define Board_UART3                 DK_TM4C129X_UART3
    #define Board_UART5                 DK_TM4C129X_UART5
    

    DK_TM4C129X.h

    /*!
     *  @def    DK_TM4C129X_UARTName
     *  @brief  Enum of UARTs on the DK_TM4C129X dev board
     */
    typedef enum DK_TM4C129X_UARTName {
        DK_TM4C129X_UART0 = 0,
        DK_TM4C129X_UART3,
        DK_TM4C129X_UART5,
    
        DK_TM4C129X_UARTCOUNT
    } DK_TM4C129X_UARTName;

    DK_TM4C129X.c

    #include <ti/drivers/uart/UARTTiva.h>
    
    UARTTiva_Object uartTivaObjects[DK_TM4C129X_UARTCOUNT];
    unsigned char uartTivaRingBuffer[DK_TM4C129X_UARTCOUNT][32];
    
    /* UART configuration structure */
    const UARTTiva_HWAttrs uartTivaHWAttrs[DK_TM4C129X_UARTCOUNT] = {
        {
            .baseAddr = UART0_BASE,
            .intNum = INT_UART0,
            .intPriority = (~0),
            .flowControl = UART_FLOWCONTROL_NONE,
            .ringBufPtr  = uartTivaRingBuffer[0],
            .ringBufSize = sizeof(uartTivaRingBuffer[0])
        },
        {
            .baseAddr = UART3_BASE,
            .intNum = INT_UART3,
            .intPriority = (~0),
            .flowControl = UART_FLOWCONTROL_NONE,
            .ringBufPtr  = uartTivaRingBuffer[1],
            .ringBufSize = sizeof(uartTivaRingBuffer[1])
        },
        {
            .baseAddr = UART5_BASE,
            .intNum = INT_UART5,
            .intPriority = (~0),
            .flowControl = UART_FLOWCONTROL_NONE,
            .ringBufPtr  = uartTivaRingBuffer[2],
            .ringBufSize = sizeof(uartTivaRingBuffer[2])
        }
    };
    
    const UART_Config UART_config[] = {
        {
            .fxnTablePtr = &UARTTiva_fxnTable,
            .object = &uartTivaObjects[0],
            .hwAttrs = &uartTivaHWAttrs[0]
        },
        {
            .fxnTablePtr = &UARTTiva_fxnTable,
            .object = &uartTivaObjects[1],
            .hwAttrs = &uartTivaHWAttrs[1]
        },
        {
            .fxnTablePtr = &UARTTiva_fxnTable,
            .object = &uartTivaObjects[2],
            .hwAttrs = &uartTivaHWAttrs[2]
        },
        {NULL, NULL, NULL}
    };
    
    /*
     *  ======== DK_TM4C129X_initUART ========
     */
    void DK_TM4C129X_initUART()
    {
        /* Enable and configure the peripherals used by the uart. */
        SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
        GPIOPinConfigure(GPIO_PA0_U0RX);
        GPIOPinConfigure(GPIO_PA1_U0TX);
        GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
    
        SysCtlPeripheralEnable(SYSCTL_PERIPH_UART3);
        GPIOPinConfigure(GPIO_PJ0_U3RX);
        GPIOPinConfigure(GPIO_PJ1_U3TX);
        GPIOPinTypeUART(GPIO_PORTJ_BASE, GPIO_PIN_0 | GPIO_PIN_1);
    
        SysCtlPeripheralEnable(SYSCTL_PERIPH_UART5);
        GPIOPinConfigure(GPIO_PH6_U7RX);
        GPIOPinConfigure(GPIO_PH7_U7TX);
        GPIOPinTypeUART(GPIO_PORTH_BASE, GPIO_PIN_6 | GPIO_PIN_7);
    
        /* Initialize the UART driver */
        UART_init();
    }

    您可以使用 Board_UART3和 Board_UART5设置参数和 UART_OPEN,以创建任务。

    希望这有助于了解 在  配置中添加附加 UART 外设所需的一切。

    此致,

    拉尔夫·雅各比

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

    感谢您的快速回答,我尝试过这种方法,但它不适用于 UART1,我将查看您发送的代码以确定它是否有效,如果有效,请解决线程问题。  

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

    感谢您的帮助! 第二个 UART 的其中一个引脚命名错误。

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

    您好,Omer,

    很高兴能得到帮助。 我去过那里很多次,因为我给一根针出了错误的名字,刮伤了我的头。

    此致,

    拉尔夫·雅各比