通常,Arduino IDE通过USB下载程序,指定好主板类型和USB的连接端口,就能顺利下载程序,在正式下载时,数字13 pin连接的LED红灯会狂闪。
不过,我的一个项目需要利用蓝牙进行下载,蓝牙的串口已经和AVR芯片的数字0、1pin交叉连接好。大家知道的,除了这两个连接,蓝牙和AVR芯片没有其它连接,不包含USB下载线中DTR到RESET pin的连接(记住它们之间需有一个0.1uF的电容),那通过蓝牙如何下载程序?通过网上查阅资料,原来还可以通过手动按复位(RESET)键触发下载,这和DTR连接RESET pin的作用一样(下载时,USB通过DTR产生一个脉冲,触发复位)。
不过,手动按复位(RESET)键的时机实在不好把握,我几乎搜索了整个网络,在国内的网上有零星2篇提到过,但一笔带过,在国外的网站上找到一些内容,也讨论了按键的时机,但也不完全一致,通过上百次的实验和无数次的失败,最后终于找到规律,这里假设用的是Arduino IDE 1.0.1版本:
1)打开Arduino主板的蓝牙,用电脑的蓝牙扫描到Arduino的蓝牙并配对,指定好COM端口
2)检查配对的COM端口波特率、Arduino主板蓝牙波特率(如何改?举例AT+UART=57600,0,0),
以及Arduino IDE下载波特率(如何查?下载时Overriding Baud Rate对应的波特率),注意波特率一定要一致
3)打开下载时的详细日志,File -> Preferences -> Show verbose output during upload
4)一直按住复位(RESET)键(为什么?让boot loader运行,等待程序下载)
5)单击Upload按钮
6)耐心等待,过了编译,显示“Uploading...”,还不要着急
7)等到日志中出现下载命令,也就是包含“avrdude”和程序的那一行(字体颜色还是白色),松开复位(RESET)键
8)程序开始下载,日志中字体颜色变成黄色,数字13 pin连接的LED红灯会狂闪。
可能面临问题:avrdude: stk500_getsync(): not in sync: resp=0x00
- 如果确认bootloader已经下载和波特率也一致,那还是没把握好按键的时机,重来一次吧
|