Arduino:禁用USB时传入的USB串行数据软管连接

Posted

技术标签:

【中文标题】Arduino:禁用USB时传入的USB串行数据软管连接【英文标题】:Arduino: Incoming USB serial data when USB is disabled hoses the connection 【发布时间】:2013-12-31 21:20:20 【问题描述】:

我正在为 Arduino Leonardo 写一个草图,它偶尔需要通过 USB 串行进行双向通信,并且还需要节能。为了省电,我想在不需要时禁用 USB。我可以成功地使用 power_usb_disable() 和 power_usb_enable() 来做到这一点,但前提是在禁用 USB 时没有数据发送到 Arduino。

重现问题的方法如下:我在 Leonardo 上运行以下草图,同时它连接到我计算机上的串行通信程序(我在 Linux 中尝试了 Arduino 串行监视器和 Minicom,在 Windows 中尝试了 PuTTY)。它按预期工作,打印出消息,直到我在“禁用 USB ...”消息之后输入一些内容。一旦我这样做了,我将不会收到来自 Leo 的更多数据。有趣的是,TX 和 RX LED 继续闪烁,好像一切正​​常。使连接再次正常工作的唯一方法是重置电路板。

现在,我并不关心在禁用 USB 时丢弃传入的数据,这是意料之中的......但我希望再次启用 USB 后串行连接继续正常工作。

我对 USB 串口的工作原理知之甚少,不知道如何解决这个问题。

#include <avr/power.h>

void setup() 
  Serial.begin(9600);
  delay(3000);


void loop() 
  Serial.println("USB is enabled!");
  delay(1000);

  // If I send characters here, everything is fine.

  Serial.println("Disabling USB...");
  delay(25);
  power_usb_disable();
  delay(1000);

  // If I send characters here, it hoses the USB connection somehow.

  power_usb_enable();
  delay(25);

【问题讨论】:

【参考方案1】:

我想目前这个问题的最佳答案是“不要那样做”。如果连接打开,我可以使用“if (Serial)”来安排不禁用 USB。因此,如果有人打开了串行监视器并且看起来好像他们要输入一些东西,我会启用 USB。似乎工作正常,尽管它没有解决如何在 USB 可能处于的任何状态下稳健地禁用和重新启用 USB 的基本一般问题。我仍然很想听听专家的建议。

【讨论】:

以上是关于Arduino:禁用USB时传入的USB串行数据软管连接的主要内容,如果未能解决你的问题,请参考以下文章

如何通过usb端口通信从arduino将串行数据写入phpmyadmin

将串行从 Raspberry 传递到 Arduino USB HID

将 USB 串行数据解析为可用变量

Microsoft Visual C++ 2010 和 Arduino UNO 之间通过 USB 进行串行通信

串行 Mac OS X 不断冻结/锁定/消失 USB 到 Arduino

PC和Arduino之间通过USB的串行通信