[Arduino Mega2560在连续两次调用AnalogWrite之后重启

问题描述 投票:0回答:2

为什么此代码导致Arduino Mega2560不断重置?

void setup() {
  Serial.begin(9600);
  Serial.println("SETUP");
  delay(500);             //without this line Serial prints "SESESESESE"
  analogWrite(10, 100);
  analogWrite(11, 50);    //reboots after this line
}

void loop() {
  Serial.println("LOOP"); //doesn't reach here
}

Arduino串行输出以下内容:

SETUP
SETUP
SETUP
SETUP
SETUP
SETUP
SETUP
SETUP

注意事项:

1)如果我将10和11引脚替换为其他引脚(例如8和9),则Arduino不会重新启动,但也会通过12和13引脚重新启动(我想10-13引脚会有些特殊)。

2)如果我在对analogWrite的调用中使用相同的值(例如100和100),则Arduino无法重新启动。

arduino avr atmega pwm
2个回答
1
投票

如果将引脚设置为:,则不会发生此行为:

 void setup() {
    pinMode(10, OUTPUT);  // sets the pin as output
    pinMode(11, OUTPUT);  // sets the pin as output

这种复位通常是电源故障,噪声或连接不良,(原型板不良)或LED引脚不良(例如,电阻太小或损坏或引脚受损等)。如果您的巨型计算机没有硬件缺陷,并且有足够的电源或附加的硬件导致此缺陷,则它应该可以正常工作。


0
投票

显然,应该归咎于编译器的优化。在程序的开头添加了这两行之后,它终于可以正常工作了:

void setup() __attribute__((optimize("-O1")));
void loop() __attribute__((optimize("-O1")));
© www.soinside.com 2019 - 2024. All rights reserved.