embedded - 为什么我们需要在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);
}
}
解决方案
推荐阅读
- c++ - pragma omp parallel for 不会加快我的程序
- java - if, else if 循环问题
- python - 如何返回标签的原始值
- python - 如何获得 tf.estimator.predict() 准确性?
- flutter - 如何在颤动中显示右下角的抽屉图标?
- arp - ARP表是自学习的吗?
- java - 查找 + 和 * 操作的组合以达到目标值
- git - 在我的服务器上推送 Heroku 之类的代码时如何自动部署
- sms - 哪些 CRM 允许双向会话 SMS/TXT 消息传递?
- javascript - 如何从我在 ajax 中的输入中获取我在数组中的检查值