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.

[参考译文] CC3200:UART、数据不按顺序

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1033070/cc3200-uart-data-is-not-in-order

器件型号:CC3200

您好!
我正在使用2个 UART (UART-0和 UART-1)、基本上 UART-1将从另一台计算机或系统接收数据(请求)并发回响应、在 UART-00的帮助  下、我只关注数据流(打印接收到的/传输的数据)。 UART-0与 DMA 搭配使用、工作正常、但我面临 UART-1问题(我不使用 DMA 处理此问题)、问题是、我接收的数据与我发送的数据顺序不同。  例如:

第一次迭代  

我发送:01-23-45-67-89-AB-CD-ef

我收到:01

第二次迭代

我发送:01-23-45-67-89-AB-CD-ef

我收到:23-45-67-89-AB-CD-ef-01

 第三次迭代

我发送:01-23-45-67-89-AB-CD-ef

我收到:23-45-67-89-AB-CD-ef-01

 

这是我的代码的一部分:

引脚多路复用中的 UART1配置

MAP_PRCMPeripheralClkEnable(PRCM_UARTA1, PRCM_RUN_MODE_CLK);
MAP_PinTypeUART(ucPin_RS485TX, PIN_MODE_2);
MAP_PinTypeUART(ucPin_RS485RX, PIN_MODE_2);
MAP_UARTConfigSetExpClk(UARTA1_BASE, MAP_PRCMPeripheralClockGet(PRCM_UARTA1),
                        9600, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
                        UART_CONFIG_PAR_NONE));
                        
//MAP_UARTFlowControlSet(UARTA1_BASE, UART_FLOWCONTROL_NONE);
MAP_UARTFIFODisable(UARTA1_BASE);
UARTIntRegister(UARTA1_BASE, vUartHandleIsr);
MAP_IntPrioritySet(INT_UARTA1, IRQ_PRIORITY_UART1); //IRQ_PRIORITY_UART1 = INT_PRIORITY_LVL_1
UARTIntClear(UARTA1_BASE, UART_INT_RX);
UARTIntEnable(UARTA1_BASE, UART_INT_RX);

vUartHandleIsr 函数:

static void vUartHandleIsr(void)
{
	unsigned long IrqStatus;
	unsigned char ucReceivedByte;
	
	IrqStatus = UARTIntStatus(UARTA1_BASE, true); //0
	UARTIntClear(UARTA1_BASE, IrqStatus);

	//If new char had been received
	if((IrqStatus & UART_INT_RX) && MAP_UARTCharsAvail(UARTA1_BASE))
	{
		ucReceivedByte = (unsigned char)(MAP_UARTCharGetNonBlocking(UARTA1_BASE));
		
		vPrintf("%x\r\n", ucReceivedByte);
	
		// <call function to store received data in buffer>
	}
}

我认为此代码非常接近 UART 示例、我不确定是什么导致 UART 在我第一次发送数据时错过其余数据(它仅接受第一个字节)、然后对于我发送的下一个数据数组、 始终第一个字节成为最后一个字节。 希望我能在这里找到帮助、

此致、

哈比卜

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

    一旦我将 UART 配置的位置更改为 pinmux (我在另一个地方执行配置、因为我希望设置可以编辑、例如波特率等)、并且通过将配置的代码行更改为 pinmux 文件、它可以正常工作、 我将删除此帖子、但我找不到"删除"按钮、因此至少我将留下一个答案、以便没有人会感到困惑。