如何烧录 arduino 的 bootloader?

如何烧录 arduino 的 bootloader?,第1张

为了恢复Arduino的功能,必须得重新给ATMega328P单片机里烧写bootloader(其实Arduino就是在AVR单片机中预置了一个bootloader程序,这样再配合Arduino开发环境就是所谓的Arduino了,但Arduino这个词本身只留给官方使用)。当然在淘宝上也能买到已经烧写好的AVR单片机,只是自己手上已经有了AVR单片机,就没必要去花那冤枉钱了。

于是马上打开万能的百度,输入关键字“Arduino bootloader”果然,一大堆乱七八糟相关的问题就出来了,经过一轮的筛选,发现许多说的也并不是很清晰,不过让我明白了个大概:一个普通的AVR单片机确实能烧写bootloader之后作为Arduino使用。那么问题来了,如何把bootloader烧录到AVR单片机中去了?这的确是个问题,反正对于不懂AVR开发的我来说是个问题。不过还好之前在淘宝上买了一个USBASP下载器,跟之前擦除bootloader一样,也要用到progisp软件(因为此时的ATMega328P只是一个普通的AVR单片机,用Arduino开发软件是烧写不进去的)。

既然要烧录bootloader,那么什么是bootloader呢?正如你所想,bootloader当然是一个程序,既然要烧录到单片机中去,应该是一个.HEX之类的文件。但是,bootloader文件从哪来呢?继续百度。。。找到了,在Arduino软件安装目录中的hardware\arduino中。此文件夹下的“boards.txt”文件很重要,是很重要,其他的或许都可以在百度上找到,但因为这个文件折腾了我大半个晚上,百度上也没有明确的说明。打开文件,找到自己对应的Arduino版本,因为我的是“Arduino Uno”,于是锁定“uno.name=Arduino Uno”区域的说明,因为看上去很乱,一定要仔细去看。找到“uno.bootloader.low_fuses=0xff"指编程熔丝低位为FF,”uno.bootloader.high_fuses=0xde“指编程熔丝高位为DE,”uno.bootloader.extended_fuses=0x05“指扩展位为05。这三个值非常重要,是决定你烧录bootloader成功的关键。至于这三个值具体是什么意思,我也不是很不清楚,但AVR单片机的烧录时需要设置熔丝位,而且不能乱设置,这也是AVR跟51单片机的不同之处。

用progisp软件把这三个熔丝位的值写入到AVR单片机中,然后继续浏览”boards.txt“文件往下看,找到”uno.bootloade旦长测短爻的诧痊超花r.path=optiboot“这就是说要烧录的bootloader文件在bootloaders\option文件夹中,“uno.bootloader.file=optiboot_atmega328.hex”文件名就是optiboot_atmega328.hex,这就是接下来需要烧录到AVR单片机中的程序。用progisp软件调入此文件,然后直接写入到AVR单片机中就行了,一个支持Arduino的AVR就做好了。。。

其实这个问题本身不难,但对于没接触过AVR的人来说,还是要花许多时间的,中间也会存在许许多多各种各样的问题。至于progisp的使用方法很简单,百度上的教程也很多,还有手上必须有一块可以烧录AVR单片机的下载器。我当时就是忽略了那三个熔丝位的值,所以反反复复也没有成功,百度上面也没有对”boards.txt“文件做详细的解释。没设置熔丝位程序是可以正常的烧录进去,但Arduino是不能用的,所以必须要按照官网给出的说明 *** 作。我当时大多数时间主要花在两个问题上,一个是.HEX文件具体位置,因为Arduino有不同的版本,所以.HEX文件也不同,还有一个就是熔丝位上。

电脑连接usb串口然后转透传模块(蓝牙、无线串口模块),arduino串口连接对应透传模块,然后波特率设置成115200。在电脑上点击烧写,然后迅速按下arduino的reset键就可以用电脑无线给arduino烧写程序了

这里有两种烧写bootloader的方式

1.  用一块arduino板给另一块烧bootloader:

直接上接线图:

其接线方式就是:

Programmer                Being programmed

Vcc           ------>        Vcc

GND          ------>        GND

Pin 10         ------>        pin 1 (RESET)

Pin 11         ------>        pin 11(MOSI)

Pin 12         ------>        pin 12(MISO)

Pin 13         ------>        pin 13(SCK)

接好线之后将作为Programmer的那块板连接电脑,然后打开Arduino的IDE(一般用1.0以上的版本就可以了):

(1). 打开Arduino的示例文件ArduinoISP将其上传到作为Programmer的那块板(假设你已经知道怎么上传了);

(2). 上传完毕后,选择工具 -->程序员-->Arduino as ISP,因为用的是中文版,程序员选项就是工具栏中倒数第二个,最后点击工具栏中最后一个选项”烧录引导程序”,然后等待烧录完成就好了,如果顺利的话。

2. 直接用一个串口适配器来烧:

这个方法是Aduino官网上提供的,接线就像这样:

那个串口适配器的接口就是这样:

连接好线路,之后的 *** 作方法与方法一有点类似,不过这里不用这里不用上传ArduinoISP程序,直接选择好要烧录的板和芯片的类型,在工具栏里的程序员项中

选择USBasp选项,之后点击烧录引导程序选项,等待烧录完毕。

可能出现的问题及解决方法:

要是出现烧录不成功的情况的话,先检查一下是不是板什么选错了,要是觉得板没错,就看看你的芯片,假如你在IDE中选择的芯片ATmega328,要是你实际使用的

芯片是ATmega328-PU,那么你可以这么办:

进入Arduino IDE的安装文件备份其中的avrdude.conf文件;

用记事本打开avrdude.conf文件;

找到其中的”0x1e 0x95 0x0F”这一行,将其替换为”0x1e 0x95 0x14”

保存更改,重启IDE,再烧一次。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11955423.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存