Arduino串口初始化时如何防止垃圾数据?
0 855
1

当我使用Arduino Uno时,连接到端口后,我在串行监视器或超级终端中立即收到垃圾数据。这是示例代码:

void setup() {
  // initialize serial:
  Serial.begin(57600);


}

void loop() {

    Serial.println("Test");
}

输出的屏幕截图示例。重新连接端口后,第一个接收到的数据不是Test:

所以我的问题是初始化端口时,收到的第一个数据总是垃圾数据。有办法防止这种情况发生吗?这与引导加载程序的波特率有关吗?我尝试了其他波特率,都存在相同的问题,我想使用57600或115200波特率。

收藏
2021-02-04 16:52 更新 我爱喝牛奶G •  2074
共 1 个回答
高赞 时间
0

可能有多种原因可能导致你出现的问题:

  1. 你尝试在主循环内发送字符串“ Text”,而在println调用之间没有任何延迟。因此,微处理器正在全速运行,并尝试发送字符串“ Text”的速度远远超过了波特率所能容纳的范围。串行接口具有有限的I / O缓冲区,该缓冲区可能非常快地填充并在串行传输的中间覆盖旧值。因此有潜在的垃圾字符。
  2. 即使超级终端未运行,PC和Arduino也在交换串行消息。因此,当你在任意时间启动超级终端时,串行缓冲区中的数据可能与传输的开始或结束并不完全对应。

或者,你可能希望Arduino在开始发送串行数据之前先等待PC发出的串行命令。例如,当使用串行监视器时,你可以向Arduino发送一个按键,然后它会开始发送数据,这样当没有人在PC端监听或没有运行终端程序时,不会丢失任何数据。

最后,刷新串行连接两侧的串行缓冲区可能会帮助你清除部分串行消息。

收藏
2021-02-04 16:54 更新 蝈蝈 •  224