行业资讯

自制的改进版Arduino uno或更换ATmega328p芯片后的开发板如何烧录bootloader?

发布时间:2026/7/5 1:27:33
自制的改进版Arduino uno或更换ATmega328p芯片后的开发板如何烧录bootloader? 温馨提示本篇文章用于入门教程略显废话敬请谅解。Arduino作为一个开源的电子平台因拥有灵活、易用的硬件和软件因素深受大家的喜欢尤其是有硬件基础的朋友们想必一定自己动手制作过Arduino uno最小系统板或因操作不当烧坏芯片时更换过ARM芯片但是从淘宝或其它渠道购买的芯片不同于我们购买的成品开发板芯片缺少bootloader无法直接烧录程序进行使用需要我们自己先烧录bootloader才能使用Arduino uno烧录bootloader的教程网上很多但是发现一个通病就是他们写教程的时候往往使用的都是购买的成品开发板或者无实物编写使用烧录工具时一次就成功往往忽略了新的芯片不兼容板子时带来的问题导致很多新手在烧录bootloader时一直失败又找不到问题怀疑自己做的板子有问题或者芯片不行今天这篇文章来给大家说一下关于自制的改进版Arduino uno或更换ATmega328p芯片后的开发板如何烧录bootloader。下面这张图左就是我自制的uno开发板在网上成品开发板右的基础上加入更多的5V、3V3、GND接口省去使用面包板接线更方便。首先我们先看一下自制或更换芯片后的板子直接烧录程序时会出现的错误如下图这个错误就是通信失败出现这个其实分为2种情况第一种情况是购买的成品板或有bootloader的板子做功能调试的时候出现这种报错那是因为在上传程序的时候我们开发的IO0、IO1接口接了蓝牙或其它通信设备IO0、IO1接口Arduino uno的硬件串口在上传程序时会使用如果被占用就会出现这个报错处理方法就是上传程序的时候把IO0、IO1的外设先拔掉程序上传完成后再把外设接上第二种就是我们这种自制或更换芯片没有bootloader会通信失败。其次我们来了解一下烧录bootloader的方法我验证了2种可行方案第一种使用AVR USB烧录器进行烧录第二种使用其它成品开发板作为烧录器进行烧录这个今天不做教程分析了其实两种方案操作都一样对比着进行即可。我们今天只说第一种使用AVR USB烧录器通过开发板的ISCP接口进行烧录ICSP接口为在线程序烧录接口一个2*3的排针端子分别对应RESET、SCK、MISO、GND、MOSI、5V具体顺序如下图所示。如果说你自制板子时没有预留这个接口那也没关系因为这6根排针与单片机相连接分别对应RESET、IO13、IO12、GND、IO11、5V接口使用杜邦线连接即可再如果说你画板子的时候只把用的IO口画出来了其他的没预留那也没关系2种终极方案1看芯片引脚找出这6个芯片引脚飞线烧录2把芯片焊接到成品板上烧录后再焊接回来。接下来我们说烧录器在淘宝购买即可10~20元不等我买的13元但是需要必坑我先买了一款左但是我的电脑识别不到这个设备换了三四个电脑都不行一直报未知USB设备设备描述符请求失败所以又买了另外一款右可以正常使用。接下来说烧录软件可以直接使用Arduino ide进行烧录方便快捷也可以使用商家提供的软件基本都是PROGISP但比较繁琐我们先来说使用PROGISP软件烧录使用AVR USB烧录器连接开发板ICSP接口开发板不需要USB再供电ICSP接口有供电插入电脑打开软件按照下图进行设置先确认软件能够识别到我们的烧录器识别成功为1然后在2中选择芯片类型ATmega 328P接下来点击3选择flash文件这个商家没有提供我们电脑中有路径如下但咱们电脑名称不同替换14090C:\Users\14090\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\bootloaders\optiboot打开之后按照步骤4选择328.hex文件然后选择5中的选项点击6编程熔丝按7中进行熔丝设置然后关闭弹窗执行8进行烧录即可我看网上教程都是到这一步说等成功即可但是对于烧录结果无疑是失败的指的是全新的芯片而不是买的成品板进行二次烧录会出现下边这种无法识别的情况。这个时候先不用怀疑你的板子或者烧录器有问题之所以出现购买的成品板可以烧录成功自制或更换芯片后不成功的现象是因为成品板上的芯片出厂前已经提前烧录过16MHz外部晶振熔丝和引导程序适用于板子上的16MHz晶振所以二次烧录会成功但是新买的空白芯片是默认熔丝内部为8MHz RC时钟通信速率低于USBasp烧录器所以烧录时会失败原因知道了那办法就是降低USBasp烧录器的通信速率与空白芯片一致即可怎么降低速度我们后边再说先说使用Arduino ide进行烧录。使用Arduino ide烧录就比较简单了步骤如下使用AVR USB烧录器连接开发板ICSP接口开发板不需要USB再供电ICSP接口有供电插入电脑打开ide软件设置如下点击工具开发板选择Arduino uno编程器选择USBasp然后点击烧录引导程序当然结果也是失败的指的是全新的芯片而不是买的成品板进行二次烧录报错结果如下图原因也是上述通信速率的问题。这里多说一句ide中的端口为灰色这个不用管因为USBasp不是串口通信所以不显示只要我们能在电脑中看到识别USBasp即可。到此为止两种烧录方式讲解完毕接下来我们来讲如何降低USBasp通信速率保证我们能够正常烧录bootloader步骤如下1.按住WINR输入cmd命令然后再输入cd我们Arduino引导程序的位置路径即上边说的328.hex文件存储的位置复制路径在这个界面右键一下自动粘贴防止手动输入错误cd和路径之间有一个空格回车之后便进入到该目录输入dir看到328.hex文件说明目录正确。2.然后输入下边这条命令修改速率14090为安装位置需修改C:\Users\14090\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17\bin\avrdude.exe -C C:\Users\14090\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17\etc\avrdude.conf -c usbasp -p m328p -B 10 -U lfuse:w:0xFF:m -U hfuse:w:0xDE:m -U efuse:w:0x05:m -U flash:w:optiboot_atmega328.hex:i执行命令后可以看到修改参数、烧录进程等待结束即可看到下图提示代表bootloader烧写成功此时我们的烧录就结束了开发板可以正常使用了按一下开发板复位键可以看到IO13接口的指示灯快闪三次如果没有这个指示灯也没有关系回到Arduino ide中再次进行引导程序烧录就可以成功二次烧录了。然后烧录一个我们写的测试程序接入OLED显示屏确认功能没问题。下边我们来对这条修改速率、能够匹配通信的指令进行解析C:\Users\14090\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17\bin\avrdude.exe指AVR单片机官方烧录工具默认放在我们这个路径下用来读写ATmega系列芯片闪存、熔丝位-C C:\Users\14090\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17\etc\avrdude.conf指定配置文件 avrdude.conf-c指编程器类型usbasp-p指目标单片机型号m328p-B指设置ISP通信时钟周期默认USBasp速度快全新芯片出厂内部8MHz时钟高速容易通信失败-B 10降低通信速率提升空白芯片烧录成功率数值越大速度越慢、稳定性越强-U lfuse:w:0xFF:m中U指读写指令格式lfuse低位熔丝位w写入0xFF为UNO标准低位熔丝启用外部16MHz晶振m 从内存写入熔丝-U hfuse:w:0xDE:m中U指读写指令格式hfuse高位熔丝位w写入0xDE为UNO标准高位熔丝启用外部16MHz晶振m 从内存写入熔丝-U efuse:w:0x05:m中U指读写指令格式efuse扩展熔丝位配置BOD掉电检测电压等辅助功能w写入0x05适配UNO电路参数m从内存写入熔丝-U flash:w:optiboot_atmega328.hex:i中U指读写指令格式flash是程序闪存区w写入optiboot_atmega328.hexUNO引导程序Bootloaderi 代表输入文件为Intel Hex格式固件。今天的教程就到此结束了如果有疑问或不同见解可在评论区留言讨论感谢大家。