首页 > 解决方案 > 为什么我们需要在UART通信中延迟读取字节?

问题描述

我们有一个奇怪的问题,由于我不是一个经验丰富的嵌入式系统开发人员,我无法解决这个问题。

我们使用两个具有不同时钟速度的 MCU。我们在它们之间有一个 UART 连接。我们使用了 115200 的波特率,但我们几乎没有错误。我们切换到 9600 并得到更多错误(恕我直言,这很奇怪)。

我们发现来自 MCUfast -> MCUslow 的通信一直正常。但是来自 MCUslow -> MCUfast 的通信出现错误。

现在是我们的解决方案,它正在工作,但我不知道为什么:

在读取每个字节后,我们在 MCUfast 中断处理程序中内置了 1ms 的延迟。现在我们没有任何错误了。

由于在 while 循环中使用延迟并不是一个好的计划,我试图找出导致这种行为的原因,以找出可以接受的修复。

以前有没有人遇到过这样的问题并且可以指出我正确的方向?

提前致谢

编辑

void D10::OnUsartInterrupt(void* Context)
{
    D10* Con = (D10*)Context;

    while ((uint32_t)Con->DataSerial->GetStatus() & (uint32_t)UsartStatus::RXReady)
    {
        Con->Data[Con->Index++] = Con->DataSerial->Receive();
        Con->MessageReady = true;
        PowerManager::DelayMs(1);   
    }   
}

标签: embeddedsystemuart

解决方案


推荐阅读