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.

[参考译文] TM4C1231E6PM:UART 丢失数据

Guru**** 2378650 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/805800/tm4c1231e6pm-uart-losing-data

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

尊敬的 Sirs

我使用 UART5与 ESP8266模块通信。

这是配置

ROM_SysCtlClockSet (SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_INT);

ROM_ExpCtlPeripheralEnable (SYSCTL_Periph_UART5);
ROM_GPIOPinConfigure (GPIO_PE4_U5RX);ROM_GPIOPIN_UART5_UART_UART5_USTRIP

)
;ROM_GPIO_UART5_USTRIP_CLUST_UCTL (GPIO_09600_GPIO_UCT_UCTL)
(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE)); 

我正在池化串行端口、而不是使用中断。 这是功能  

int recvString (char *目标、char *数据、int 超时、bool 检查)
{
int i=0;
char a;
unsigned long start = millis ();


while (millis ()- start <超时)
{
while (ROM_UARTCharsAvail (UART5))
{
A = ROM_UARTCharGet (UART5);
if (a ='\0')
继续;
data[i]= a;
i++;
}
}
if (检查)
{
if (SearchIndexOf (data、target)!=-1)
{
返回1;//break;
}
}


返回0;
} 

我的问题是、我缺少一些接收到的数据。 在某些字节从 缓冲区成功读取后,丢失的数据就在传输的开始。 该错误是一种引起式错误。 并不总是发生。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否在该函数中运行了中断例程? 中断例程是否可能需要很长时间、从而导致您错过一些数据?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你是对的。 中断例程是问题所在。

    我将实现一个循环缓冲器来从 UART 接收数据

    此致

    Ysaac

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可能需要查看中断例程、以查看是否可以将中断例程的某些处理时间移出到主循环中。 如果这不起作用、此器件支持嵌套中断。 您可以有8个级别的中断。 对 NVIC 进行编程、使 UART5的中断级别(编号更低)高于其他例程。 有一个 TivaWare 示例显示了如何在中使用不同级别的中断:
    C:\ti\TivaWare_C_Series-2.1.4.178\examples\boards\ek-tm4c123gxl\interrupts