摘要
通过将一块Arduino Uno设置成ISP模式作为烧录器,从而实现为Arduino Pro Mini空白的ATMega328PB芯片直接烧录程序。
烧录方式
查阅相关资料,常见的烧写方式有4种:
- 使用USBtinyISP编程器烧录
- AVR USB编程器烧录
- AVRASP编程器烧录
- 使用Arduino作为ISP烧录
我对第4种烧录方式进行了实验,使用了Arduino IDE和Ardudess这2种软件,均可实现程序正常运行。
操作过程
准备工作
需要用到的东西包括一块Arduino uno开发板、一根USB数据线、目标开发板、杜邦线若干,你的电脑要提前安装好Arduino IDE和Ardudess这2款软件。
将Arduino uno设置为烧录器
我使用的是第4种烧录方式,即将Arduino uno作为烧录器。首先设置好开发板参数,当然每台电脑端口都不一样,具体看你连接后电脑提示的是哪了个端口,我的电脑如图:
打开官方示例程序Arduino ISP,将程序上传至开发板,如图:
烧录器和目标板电路连接
主要采用SPI连接方式,接线原理如下:
Uno | 数字接口序号 | 目标板 |
---|---|---|
VCC | VCC | |
GND | GND | |
SS | 10 | RESET |
MOSI | 11 | MOSI |
MISO | 12 | MISO |
SCK | 13 | SCK |
因为烧录器是Arduino uno开发板,所以大家知道引脚序号,目标板型号太多,需要具体型号具体确定引脚序号,我使用的是Arduino Pro Mini开发板,其使用的MCU是Atmega328PB,与Arduino uno使用的Atmega328P没有太大的区别,引脚序号可以延用。
网上别人的连接图[1]是这样的:
我的连接图是这样的:
^_^
开玩笑,实际上是这样的[2]:
添加第三方库
请参阅博主唐唐爸爸的为ATMega328pb芯片烧录Arduino bootloader
设置参数
我买的Arduino Pro Mini板是3.3V8MHz的版本,采用Atmega328PB芯片,实物如图:
相应的设置参数如图:
解释一下,COM3端口是刚才Arduino Uno的端口,因为目标板是通过SPI方式与Arduino Uno板连接的,实际上与电脑连接的就只有Arduino Uno板。波特率随便选。BOD(Brown out detection)因为使用的是3.3V工作电压,所以设置成2.7V低电压保护。Bootloader可以选择不使用,这样每次都需要烧写板进行程序烧写,但我选的是使用UART0口,主要还是考虑后续可以直接用Arduino Pro Mini板连接电脑下载程序。晶振使用的是3.3V外源8MHz。Variant应设置成328PB,这很重要,必须要根板子上的芯片型号一致,否则后续可能程序烧写成功,但就是会出现各种各样意外的错误。
程序烧写
关于这一部分,我使用了2种方法。
使用Arduino IDE进行烧写
使用Ardudess进行烧写
首先导出程序的Hex文件:
而后使用Ardudess加载并点击Go按钮写入:
以上部分,虽然看似2种方法,归根结底还属于1种,无论是Arduino IDE,还是Ardudess,它们的底层都是调用的Avrdude程序。
但是还是建议使用Arduino IDE进行烧写,因为空白的芯片在正式烧程序前要先烧录熔丝位和加密位。