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.

[参考译文] MSP430F6779A:无法从 RX 读取所有数据、UART_READ 的读取超时不起作用。

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/834446/msp430f6779a-unable-to-read-all-data-from-rx-and-the-readtimeout-of-uart_read-is-not-working

器件型号:MSP430F6779A
主题中讨论的其他器件: MSP-TS430PEU128

尊敬的专家:

我正在使用电路板 MSP-TS430PEU128在 MSP430F6779A 上测试 UART。

我的问题是读取 UART、无法从 RX 获取所有数据、下面是我如何执行该操作的代码、

void echoFxn (UArg arg0、UArg arg1)
{
字节缓冲器[10];
字符输入;
int readSize = 1;

UART_Handle UART;
UART_Params uartParams;

UART_PARAMS_INIT (uartParams);
uartParams.readMode = UART_MODE_BLOCKING;
uartParams.writeMode = UART_MODE_BLOCKING;
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.readReturnMode = UART_return_full;
uartParams.readEcho = UART_ECHO_OFF;
uartParams.readTimeout = 1;
uartParams.baudrate = 115200;
UART = UART_OPEN (1、uartParams);/* P3.4、5 = USCI_A1 TXD/RXD *

if (UART == NULL){
System_abort ("打开 UART 时出错");
}

while (1){
UART_READ (UART、INPUT、READSize);//一次性读取1
System_printf ("%c\n"、输入);System_flush ();
}
} 

我正在使用访问端口工具发送数据"1234567890"、运行后、我只有"1"和"0"、它们是第一个和最后一个字符。 我所设置的波特率是多少、只能接收到这两个波特率。

哪里出了问题?

我还尝试了另一种读取 RX 数据的方法、即读取块:

 

void echoFxn (UArg arg0、UArg arg1)
{
字节缓冲器[10];
字符输入;
int readSize = 1;

UART_Handle UART;
UART_Params uartParams;

UART_PARAMS_INIT (uartParams);
uartParams.readMode = UART_MODE_BLOCKING;
uartParams.writeMode = UART_MODE_BLOCKING;
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.readReturnMode = UART_return_full;
uartParams.readEcho = UART_ECHO_OFF;
uartParams.readTimeout = 1;
uartParams.baudrate = 115200;
UART = UART_OPEN (1、uartParams);//打开 PM_UCA1

if (UART == NULL){
System_abort ("打开 UART 时出错");
}

while (1){
UART_READ (UART、&buffer、10);//一次性读取10
System_printf ("%s\n"、(char *) buffer);System_flush ();
}
} 

我使用相同的工具发送数据"1234567890"、并获取所有数据"1234567890"、而不会丢失。 但问题是、如果我发送的数据小于10、那么我永远不会从 UART_READ 返回。 readTimeout 设置似乎不起作用,为什么会发生这种情况?

非常感谢您的参与。

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

    尊敬的 Patrick:

    在第一个 POST 代码中、当您从 UART 接收到一个字节时、您将 通过 System_printf 函数打印到控制台面板中、但此时 UART 仍在传输数据。 当 System_printf 函数被 UART_Read 执行并读取下一个数据时、已发送中间数据(23456789)、因此它将丢失。

    对于 POST 的第二个代码、 UART_READ (UART、&buffer、10)函数将等待直到接收10个字节的数据、您可以查看此函数的详细信息。

    您可能能够尝试使用中断读取数据。

    此致

    Johnson

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

    你(们)好,约翰逊

    感谢您快速回复。

    关于第2个代码、不管 readTimeout 的值是多少、UART_Read 都必须接收10字节的数据? 那么、该值到底做了什么?

    谢谢。

    Patrick

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

    尊敬的 Patrick:

    此函数以寄存器为基础进行封装、允许用户准确读取已知字节数的数据。 但实时性和灵活性较差、建议您使用我们提供的寄存器级别或驱动程序库。 您可以参阅以下链接:

    http://dev.ti.com/tirex/explore/node?node=AOusg7YgtR4yzFYky92.QA__IOGqZri__LATEST

    此致

    Johnson

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

    尊敬的 Johnson:

    在 F6779A 上的 TI-RTOS 驱动程序上遇到困难后、是的、我必须按照您的建议开始使用寄存器级别。

    链接非常有用、谢谢。

    Patrick