不知你有没有注意到过,Arduino下载程序是自动的,不像其它ISP软件,需要上电写入或按Reset键写入,秘密在于Arduino板上的这个小部件——电容。每当串口建立连接,与USB链接的芯片会发一个短的脉冲,相当于手动按了Reset键。系统从bootloader开始执行,如果此时有sketch上传,则执行ISP功能。
这个复位初看一下没什么问题,可如果在不能中断的控制系统中,硬件意外重启必须严格避免!
具体方法参考这里:Disabling Auto Reset,其实非常简单,就是给Reset管脚跟VCC串个电阻,电容不足以把点位拉低到Reset,就不会自动重启!
接下来做个试验:准备一个Arduino(Leonardo 除外)和一个嗡鸣器,以下几种皆可:
随便接到两个输出管脚上,比如7和4,7接+ 4接-。
写一小段代码,在setup()里面设置输出。
// the setup function runs once when you press reset or power the board
void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT);
pinMode(4, OUTPUT);
pinMode(7, OUTPUT);
digitalWrite(4, LOW);
digitalWrite(7, HIGH);
delay(500);
digitalWrite(7, LOW);
}
// the loop function runs over and over again forever
void loop()
{
Serial.print(\'.\');
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(200); // wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(100); // wait for a second
}
接下来,使用Arduino串口工具打开串口,你就发现每次打开串口的时候都会“滴”。。。
这个复位在实际应用中,尤其是需要跟计算机通信时要特别注意!
实测,重启在以下几种情况下发生:
1. 打开串口调试界面(有些串口工具不会reset,原因参考附录)
2. 在有外接电源的情况下,拔插USB线。
3. 如果USB线连在HUB上,拔插HUB上的其它USB设备也可能导致重启。
4. 重启电脑。
附录参考 http://playground.arduino.cc/Main/ArduinoReset
|