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
Microsoft Visual C++ 2010 和 Arduino UNO 之间通过 USB 进行串行通信