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/MSP430F5529:尝试在同一程序中使用两个 UART

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/585104/rtos-msp430f5529-trying-to-use-two-uarts-in-the-same-program

器件型号:MSP430F5529

工具/软件:TI-RTOS

将 CCS 6.1.3和 TI-RTOS 用于带有5529 Launchpad 的 MSP43x 2.20.0.06。

在 Booster Pack 连接图中、引脚3.4和3.3分别标记为"UART RX"和"UART TX"。 我尝试使这些引脚作为 UART 与另一个微控制器进行通信、同时使用标准 UART 通过 USB 连接与 Launchpad 进行通信。 我还想使用 TI-RTOS 功能、因为我在低级微处理器编程方面没有太多经验。

我查看了论坛问题 e2e.ti.com/.../421987 并尝试将其用作模型。 论坛问题中的代码看起来与我的*5529.c 和*5529.h 中的代码不完全相同,但我尝试做一些类似的事情。 我还查看 了 e2e.ti.com/.../581883 、但无法确定如何使其适用。 5529.c 中的代码是不同的,如果我将论坛问题中的代码粘贴到该代码中,则不会进行编译。

以下我对*5529.c 和*5529.h 文件所做的更改:

CONST UARTUSCI_HWAttrs uartUSCIAHWAttrs[MSP_EXP430F5529LP_UARTCOUNT]={
{
baseAddr = USCI_A1_base、
时钟源= USCI_A_UART_CLOCKSOURCE_SMCLK、
.bitOrder = USCI_A_UART_LSB_FIRST、
numBudrateEndries = sizeof (uartUSCIABAURATS)/sizeof (UARTUSCIA_BAUDRAateConfig)、
.budrateLUT = uartUSCIA波特 率
}、
{
baseAddr = USCI_A0_BASE、
时钟源= USCI_A_UART_CLOCKSOURCE_SMCLK、
.bitOrder = USCI_A_UART_LSB_FIRST、
numBudrateEndries = sizeof (uartUSCIABAURATS)/sizeof (UARTUSCIA_BAUDRAateConfig)、
.budrateLUT = uartUSCIA波特 率
}、// JDL 第二个 UART 请参见 e2e.ti.com/.../421987 */
};

const UART_Config UART_CONFIG[]={
{
.fxnTablePtr =&UARTUSCIA_fxnTable、
.object = uartUSCIAObjects[0]、
.hwAttrs = uartUSCIAHWAttrs[0]
}、
{
.fxnTablePtr =&UARTUSCIA_fxnTable、
.object = uartUSCIAObjects[1]、
.hwAttrs = uartUSCIAHWAttrs [1]
},/* JDL 第二个 UART 参见 e2e.ti.com/.../421987 */ 
{NULL、NULL、NULL}
}; 

这里(这是看起来与其他问题不同的部分):

void MSP_EXP430F5529LP_initUART (void)
{
/* P4.4、5 = USCI_A1 TXD/RXD *
GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P4、
GPIO_PIN4 | GPIO_PIN5);

/* P3.3、4 = USCI_A0 TXD/RXD *
GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P3、
GPIO_PIN3 | GPIO_PIN4);
/* JDL 第二个 UART 参见 e2e.ti.com/.../421987 */ 

/*初始化 UART 驱动程序*/
UART_init();
} 

在* 5529.h 中:

typedef 枚举 MSP_EXP430F5529LP_UARTName{
MSP_EXP430F5529LP_UARTA1 = 0、
MSP_EXP430F5529LP_UARTA0 = 1、/* JDL 第2个 UART * 
MSP_EXP430F5529LP_UARTCOUNT
}MSP_EXP430F5529LP_UARTName;

在 Board.h 中:

#define Board_UART0 MSP_EXP430F5529LP_UARTA1
#define Board_UART1 MSP_EXP430F5529LP_UARTA0/* JDL 第2个 UART e2e.ti.com/.../

我确信我做的事情是极其错误的、或者错过了某个地方的逗号。  

当我运行我的代码时(如下所示)、Board_UART0会打开并正常工作、但 Board_UART1返回一个空指针。

UART_PARAMS_INIT (uartParams);
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.readReturnMode = UART_return_NEWLINE;//字符串被读取,直到到达换行符
uartParams.readEcho = UART_ECHO_OFF;
uartParams.baudrate = 9600;
uartPC = UART_OPEN (Board_UART0、uartParams);
uartParams.baudrate = 38400;//至集电极板
uartCB = UART_OPEN (Board_UART1、uartParams);

我附加了我的项目(我希望它能像我期望的那样工作)。 有关如何让第二个 UART 在 TI-RTOS 中工作的任何线索?

e2e.ti.com/.../6507.uart_5F00_problem_5F00_project.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    哦、人。 粘贴该代码后发现非常难看...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Joel、

    我看了你的代码、似乎你忘记了为新的 UART 实例创建硬件中断(Hwi)。  您需要将以下内容添加到*。cfg 文件中(在第一个 UART 的 Hwi 之后):

    hwiParams.arg = 1;
    halHwi.create (56、"&UARTUSCIA_hwiIntFxn"、hwiParams); 

    最棒的

    伊曼纽尔

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

    有道理。   不过、我将从 UART_OPEN (Board_UART1、&uartParams)获取 NULL。

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

    之所以得到 NULL、是因为您正在尝试将 UART 配置为波特率、而您在板级配置文件的 uartUSCIADDRates 表中没有相应的条目。 如果您转至板级配置文件中的网页、您可以输入所需的波特率、计算器将返回您需要添加到表中的值。

    希望这对您有所帮助、
    伊曼纽尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢! 我不再得到 NULL 了。 让我们看看我是否可以让它说话...