为什么启动串行监视器会重新启动草图?


31

如果我上载了任何发送串行数据的草图,一旦上载了草图,我会立即看到TX / RX LED闪烁。如果然后启动串行监视器,则草图似乎会重新启动。

最小的草图显示了这种行为:

void setup()
{
    Serial.begin(9600);
    Serial.println("Setup");
}

void loop()
{
  Serial.println("Loop");
  delay(1000);
}

在多个开发板以及Mac和Windows版本的IDE上进行了测试。

输出示例-当我打开串行监视器时,它会返回到“设置”:

重新开始

为什么是这样?


5
我从未见过使用串行的草图不执行此操作,因此实际上任何草图都不会。
Cyber​​gibbons



我有一个单独的问题。Arduino leostick(及其他)不再自动重置。我该如何忍受呢?
CMCDragonkai

Answers:


33

Arduino使用RTS(请求发送)(我认为DTR(数据终端就绪))信号进行自动重置。如果获得的串行终端可以更改流控制设置,则可以更改此功能。

Arduino终端没有很多选择,这是默认设置。其他将允许您配置更多。将流控制设置为none将使您无需重置板就可以与串行连接/断开连接。当您希望能够仅插入连接器并查看输出而无需重新开始草图时,它对于调试非常有用。

禁用自动复位的另一种方法是在复位引脚上放置一个上拉电阻。

在串行连接上禁用自动重置


2
Arduino Unos可以通过RESET和GND之间的10 µF电容器进行固定。到目前为止,它适用于我使用过的一个安装……
scruss

1
我尝试使用PuTTY,连接到Arduino出现的COM端口(在我的情况下为COM16)。如果“连接/串行”中的“流控制”设置为“无”(其他选项为“ XON / XOFF”,“ RTS / CTS”和“ DSR / DTR”),它仍在重置Arduino。我使用的是PuTTY 0.60版本。
彼得·莫滕森

-cont:在Arduino Uno R3上尝试过。
彼得·莫滕森

Duemilanove和Uno具有标记为“ EN RESET”的轨迹,可控制此行为。取消该跟踪以禁用自动重置。将电线焊接在焊盘上以重新启用它。
mhopeng '16

12

事实总是存在于数据表,原理图和代码中:

Arduino UNO实际上使用该/DTR行触发重置,如以下数据表所示:

重置原理图


原理图图像的链接已断开。
linhartr22 '16

1
谢谢,我修好了!我实际上以为SO是在缓存图像,但是看起来好像不是,所以我将确保始终打开它。
zmo

再一次,它坏了。也许您可以使用StackExchange的imgur选项将其添加为图像?只需点击编辑器工具栏中的“图片”选项即可。

做完,谢谢你的提示(我实际上做了10天的停机,因为我正在做一些维护,这只是暂时的)
zmo 2015年

1
是的,但是实际上会发生什么?是由于ATmega16U2的编程方式(通过程序打开COM端口时将PD7设置为低电平)吗?还是遵循DTR的某些标准?)。C5的含义是什么?-是否会在两次转换(从低到高以及从高到低)时重置主处理器?主处理器的复位引脚上的大概脉冲宽度(以微秒为单位)是什么样子?
Peter Mortensen

1

这解决了问题

import os
import sys
import termios
import fcntl

        self.fd = sys.stdin.fileno()

        # Stop resetting the arduino on serial connect

        self.newattr = termios.tcgetattr(self.fd)
        self.newattr[2] = self.newattr[2] & ~termios.HUPCL
        termios.tcsetattr(self.fd, termios.TCSANOW, self.newattr)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.