Arduino Sketch上传问题 - avrdude:stk500_recv():程序员未响应

172
我有一个带有ATmega328的Arduino Duemilanove。我正在使用Ubuntu 12.04(Precise Pangolin)操作系统,Arduino IDE的版本是1.0。最近,我尝试上传一些示例代码,例如Blink。然而,我的所有尝试都失败了,并且每次尝试时都会出现相同的错误:

avrdude: stk500_recv(): programmer is not responding.

我已在菜单工具串口下启用了/dev/ttyUSB0。我也从列表中选择了正确的板子(ATmega328的Duemilanove)。但是,我仍然无法解决问题。我也在网上搜索了一些解决方案,但似乎都不适用于我。为什么会出现这个问题,如何解决?
我还尝试了翻转板载ATmega并插入另一个方向。现在,上传没有问题,但之后什么也没发生。板载LED也似乎没有闪烁。

将Arduino uno板上的RST与GND断开连接。我按照这个教程操作,忘记撤销了这个步骤。 - ArtiomLK
这可能是因为波特率设置为错误的值(可能太高)。 - Konrad Gajewski
40个回答

3

这对我在10.10上也起作用了。在那篇文章之后,我不必执行步骤4、5或6。现在我可以使用Arduino IDE多次更新脚本而不会出现错误。 - dbainbridge

3
在Windows 7上,我遇到了这个问题多次,每次都有不同的错误消息。基本上,IDE发送到了错误的端口。
要解决这个问题,只需转到菜单 "工具" → "端口" → [选择你的板子所在的COM端口]。
确保仔细检查你的板子的端口:
1. 启动 设备管理器 2. 确保你的Arduino驱动程序列在与IDE端口设置相匹配的端口下面(上面提到过) 3. 我的板子在端口 COM1 下列出。如果你想,可以在驱动程序的高级设置中更改端口。

3

感谢@hoipolloi提供了正确的解决方向。

无论如何,我需要采取一些不同的步骤来修复问题。

在我的情况下,Arduino Uno一直工作正常,但在玩弄几个程序后突然停止。我总是收到stk500_recv(): programmer is not responding的错误,什么都不起作用。然后我注意到我的板子上LED 13始终处于开启状态。看起来好像有一些硬件循环的程序一直在板子上运行,并阻止任何对板子的输入。不确定,这只是我的猜测。

我试图在所有可能的时刻点击RESET按钮,但没有任何结果,突然尝试了以下步骤:

  1. 拔下板子。
  2. 按住RESET键。
  3. 再次插入板子。
  4. 等待几秒钟。
  5. 松开RESET键。

此后,我注意到板子上的13号LED灯熄灭了一秒钟,然后又重新点亮了。看起来在实际重置板子时有一个短暂的重置时间窗口。接着,就像@hoipolloi的解决方案那样,在发送三个数据包之前捕捉到了“重置”的时刻,这样就成功了。

如果其他解决方案都无效,我希望这能帮助您找出问题所在。

提示。如果在上传程序时控制台中没有看到三个Send: 0 [30] [20]行,请执行以下操作:

  1. Click "Upload" in your Arduino IDE.
  2. Look at the log window. You will be able to find a line like this:

    E:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CE:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -carduino -PCOM3 -b115200 -D -Uflash:w:C:\Users\Sergey\AppData\Local\Temp\build44ca75bc60fd83cc8ef41e35d4d83388.tmp/sketch_sep07a.ino.hex:i
    
  3. Looks like it swallows line break or space symbols like here -CE:\Program Files.... It should be -C E:\Program Files. Copy this like into Notepad, add missing spaces to make the line this:

    E:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -v -v -v -v -C "E:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf" -patmega328p -carduino -PCOM3 -b115200 -D -U flash:w:C:\Users\Sergey\AppData\Local\Temp\build44ca75bc60fd83cc8ef41e35d4d83388.tmp/sketch_sep07a.ino.hex:i
    
  4. Add 4 -v instructions like I did above.

  5. Open the Command Line, paste the command into it and run.
现在,由于4个-v参数的使用,您将看到更加详细的内容。原来,Arduino Studio只使用一个参数。

双击重置按钮可能是必要的技巧(在某些系统中,它将进入约8秒钟的引导加载程序)。或者按照答案所述长时间按住它可能会产生相同的效果。 - Peter Mortensen
虽然这可能不适用于Arduino Duemilanove。 - Peter Mortensen

3
请进行以下检查:

1- 上传代码时,请确保您的arduino的TX和RX没有接线。
2- 每个引脚之间没有焊接的针脚。
3- 如果1和2都没问题,那么您必须使用另一个arduino重新安装bootloader,您可以在YouTube上搜索如何操作,有很多视频介绍。


1
上传代码时,我的Arduino的TX和RX没有任何线缆连接——这对我起作用了。 - BENN1TH
谢谢,我的TX和RX上有电线,断开后它就可以工作了。 - Yunus Kulyyev

2
如果您正在通过一个USB集线器连接Arduino,请尝试直接将其连接到Mac上的一个USB端口。
这对我有用。

是的,对于Arduino Leonardo,我曾经不得不使用D-Link USB集线器(型号DUB-H7)的额外电流USB端口。 直接连接Arduino也可以工作。 - Peter Mortensen

2

我在我的Mac上运行Arduino时遇到了这个问题。 我的两个Arduino(Arduino Uno和连接FTDI的Arduino Pro)都出现了这种情况。

对于Uno,我将电缆连接到计算机并按上传按钮,然后开始计数,直到“TX”LED闪烁。 然后重复上传,但在TX LED闪烁之前,按下复位按钮,上传成功。

后来我发现更换USB电缆解决了这个问题。


1
更换USB电缆对我来说解决了问题。 - Paul Bailey

1
我尝试将我的舵机连接到Arduino的5V引脚,但是由于处理器的原因,我遇到了这个错误:

avrdude: stk500_recv(): programmer is not responding

解决方案:购买一个新的Arduino和外部5V电源来为舵机供电。

和我一样(使用的是Nano而不是2009,但规格基本相同)。猜猜看?“输入电压7-12V”是指VIN接受的电压,而不是数字引脚。只要设备最终仍然可以通过USB被检测到...我想那可能只是FTDI USB转TTL转换器,不知何故幸免于硬烧。 - mirh

1

您可以尝试以下方法:

  • 检查 preferences.txt 中的 serial.debug_rate: serial.debug_rate=9600
  • 否则,尝试在上传时按下Arduino的复位按钮。
  • 或者,在Arduino IDE菜单 工具 中选择另一个卡片,然后重新选择您的卡片。

1

以上答案的组合解决了我的问题:

  • 执行Java更新:

    sudo apt-get install default-jdk

  • 然后杀死Arduino IDE并重新启动它

  • 我的正确板子现在显示出来了 (Arduino Mega 2560,之前只有Mega 1280选项)

  • 对于驱动程序,我做了这个:

    sudo chmod a+rw /dev/serial/by-id/usb-Arduino__www.arduino.cc__(一堆数字)

之后,我的Arduino IDE在工具/串行端口菜单中显示/dev/ttyACM0

现在,一切都很好!


谢谢!在我的情况下,JDK没有引起问题,但是sudo chmod a+rw /dev/serial/by-id/usb-Arduino**********解决了问题。 - Artur Barseghyan

1

这里有一个解决方案,适用于我在MacBook Pro(台式机)上运行时有效。

我遇到了同样的错误,后来发现是因为我将USB连接到了外围设备(我的显示器)而不是PC本身的USB。这立即停止了任何错误,并且是一个简单的解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接