首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我怎么能强迫Arduino Leonardo用AVRDUDE重置?

我怎么能强迫Arduino Leonardo用AVRDUDE重置?
EN

Stack Overflow用户
提问于 2017-03-25 13:33:33
回答 7查看 7.5K关注 0票数 10

我想自己在莱昂纳多的董事会上编译和传输一个阿杜诺程序。

在Arduino官方IDE中,一切都很好。我已经为编译和字节码传输启用了详细模式。

我可以看到每个命令行。

我想理解每一行。

除了最后一步,一切都很好:使用AVRDUDE进行传输。如果键入完全相同的命令,则会得到一个错误:

代码语言:javascript
运行
复制
.avrdude: butterfly_recv(): programmer is not responding

如果我用Arduino IDE上传代码,则不存在此错误。

我看到了一个不同之处- Arduino IDE在AVRDUDE调用之前显示了这一行:

强制使用1200 bps打开/关闭端口/dev/cu.usbmodem1431重置

如何通过命令行进行重置?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2017-03-25 20:32:11

好吧,答案是你自己写的。

您需要以1200波特的速度打开到Arduino的串行连接,然后关闭连接。然后Arduino将引导到SAM,并重新设置自己,现在准备好了一个新的程序。

票数 0
EN

Stack Overflow用户

发布于 2017-09-04 15:41:47

我在macOS上也有同样的问题,我想出了下面的Bash脚本:

代码语言:javascript
运行
复制
# Find the Arduino port
ARDUINO_UPLOAD_PORT="$(find /dev/cu.usbmodem* | head -n 1)"

# Reset the Arduino
stty -f "${ARDUINO_UPLOAD_PORT}" 1200

# Wait for it...
while :; do
  sleep 0.5
  [ -c "${ARDUINO_UPLOAD_PORT}" ] && break
done

# ...upload!
avrdude "${OPTIONS[@]}"

while循环就是诀窍!一旦Arduino端口恢复在线,它就会继续进行。

这是我为项目芝麻编写的Makefile的一部分。

票数 12
EN

Stack Overflow用户

发布于 2017-06-29 10:54:08

为了从Windows上传,我为AVRDUDE制作了一个bat文件包装器。

它用WMI标识Leonardo端口,使用模式命令将这个COM端口重置为1200个波特,标识引导加载器COM端口并调用AVRDUDE。

固件应该放在firmware.hex中,但可以更改为从命令行提供。

代码位于GitHub存储库https://github.com/p1ne/arduino-leonardo-uploader中。

或以下:

代码语言:javascript
运行
复制
@echo off
setlocal

for /f "tokens=1* delims==" %%I in ('wmic path win32_pnpentity get caption  /format:list ^| find "SparkFun Pro Micro"') do (
    call :resetCOM "%%~J"
)

:continue

:: wmic /format:list strips trailing spaces (at least for path win32_pnpentity)
for /f "tokens=1* delims==" %%I in ('wmic path win32_pnpentity get caption  /format:list ^| find "Arduino Leonardo bootloader"') do (
    call :setCOM "%%~J"
)

:: end main batch
goto :EOF

:resetCOM <WMIC_output_line>
:: sets _COM#=line
setlocal
set "str=%~1"
set "num=%str:*(COM=%"
set "num=%num:)=%"
set port=COM%num%
echo %port%
mode %port%: BAUD=1200 parity=N data=8 stop=1
goto :continue

:setCOM <WMIC_output_line>
:: sets _COM#=line
setlocal
set "str=%~1"
set "num=%str:*(COM=%"
set "num=%num:)=%"
set port=COM%num%
echo %port%
goto :flash

:flash
avrdude -v -C./avrdude.conf -patmega32u4 -cavr109 -P%port% -b57600 -D -V -Uflash:w:./firmware.hex:i
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43016993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档