Arduino Nano V3 新手上手:CH340 驱动、开发板选项与第一次上传

Cartoon of a blue Arduino Nano V3 board with bare unsoldered gold header holes and a gold Mini-USB socket, a black Mini-USB cable plugged in and one small onboard LED glowing yellow-green, with a black pin header strip and a white breadboard resting smaller beside it

一块 Arduino Nano V3 从开箱到第一次点亮 LED,只有三步:装好 CH340 的 USB 驱动,让板子在电脑上变成一个串口;在 Tools > Board 里选 Arduino Nano;然后到 Tools > Processor 里设定 —— 大部分 CH340 版的 Nano,要选的是 ATmega328P (Old Bootloader)第三个菜单是没人提的那一个,也正是大多数人第一次上传失败的原因。这三步全程都不用焊接。

Nano V3 用的是跟 Arduino Uno 一模一样的 ATmega328P,跑一模一样的程序。差别在身体:它是一条 18.5 × 43 mm 的小板,可以直接插进面包板;USB 口是 Mini-USB,不是 Uno 那个方方的口。

Nano V3 盒子里有什么,还要另外准备什么?

CH340 版的 Nano V3 是以裸板出货的:全部 30 个引脚位置,加上 2×3 的 ICSP 排孔,都是空的沉铜过孔。这是故意的:孔空着,你才可以把针脚往下焊去插面包板、往上焊去接杜邦线,或者焊成 90 度塞进一个薄外壳。所以一套入门配置,是板子加一条 40 针黑色公排针(可以掰出两段 15 针,还有剩)和一块 400 孔面包板。这个尺寸刚刚好:面包板长 85 mm,Nano 长 43 mm,板子占掉大约一半,剩下一半留给电路。

下单之前先把线搞定。Nano 上的口是 Mini-USB Type-B —— 矮矮胖胖、两侧收进去的梯形,跟 micro-USB 和 USB-C 都不是同一个东西。Mini-B 的线不在我们的货品范围内,而这也是这份清单里你最有可能家里已经有的一样东西:以前的小型数码相机、PS3 手柄、旧的移动硬盘盒和 MP3 播放器,用的都是 Mini-B,所以先去翻抽屉。翻到哪一条都可以用,前提是那条线能传数据;而且手机配件店到今天还有 Mini-B 卖。只能充电的线里面没有那对数据线,所以插上去 PWR 灯会亮,但串口一个都不会出现。

Parts list

ItemPriceQty
50g Soldering Wire Lead with Flux Core 1mm Diameter50g Soldering Wire Lead with Flux Core 1mm Diameter50SOTINRM9.90
80W Electronics Soldering Iron with LCD Display Ajustable Temperature Microconstroller Electronic Project80W Electronics Soldering Iron with LCD Display Ajustable Temperature Microconstroller Electronic ProjectASOIRONRM39.95
40pcs Dupont Wire 10cm 20cm 30cm for Breadboard DIY Experiment Jumper Wire Breadboard wire - DUPONT WIRE M-M 20CM40pcs Dupont Wire 10cm 20cm 30cm for Breadboard DIY Experiment Jumper Wire Breadboard wire - DUPONT WIRE M-M 20CMDPWMM20RM3.50
Nano Expansion Shield For Arduino NANO R3Nano Expansion Shield For Arduino NANO R3NANOEXPRM8.95

只有焊接那一步以及之后才用得上 —— 烙铁和焊锡如果你已经有了就跳过。Nano 扩展板是排针焊好之后的另一条路。

怎样让 CH340 变成电脑上的一个串口?

Nano 上的这颗 CH340G 是一座 USB 转串口的桥:ATmega328P 讲的是最普通的异步串口,你的电脑讲的是 USB,CH340 负责翻译。电脑需要一个驱动去认领这颗芯片,把它呈现成一个虚拟 COM 口 —— 没有驱动,板子照样通电、PWR 灯照样亮,然后就没有然后了。

「Arduino Nano compatible(Nano 兼容板)」讲的也就是这一颗芯片。一块兼容 Nano 用的是同一颗 ATmega328P、同一颗 16 MHz 晶振、同样的引脚排列、同一套 Arduino 内核;工厂动的是 USB 转串口那颗芯片,用 WCH 的 CH340G 换掉了原厂 Nano 用的 FTDI FT232RL。这篇文章里两个麻烦的步骤,都是这一次替换带出来的:Windows 里没有内建 CH340 驱动,而板子出厂时烧的引导程序(bootloader)也未必是 Arduino 官方那一个。

先把 Arduino IDE 装到电脑上 —— arduino.cc 上的免费桌面版 IDE。1.8.x 或者 2.x 都可以,这篇文章要用到的 Processor 菜单两个版本都有。驱动则看操作系统:

  • Windows —— 装 WCH 官方的 CH341SER,也就是这颗芯片自家的驱动。点 INSTALL(那个对话框上另外两个按钮只有 UNINSTALL 和 HELP),然后把板子重新插一次。
  • macOS —— 什么都不用装:从 macOS 10.14 Mojave 开始,Apple 自己就带了给 CH34x 芯片用的 AppleUSBCHCOM 驱动。串口会以 /dev/cu.usbserial-… 出现;只有当你另外装了 WCH 自家的 Mac 驱动,它才会显示成 /dev/cu.wchusbserial…
  • Linux —— 一样不用装,ch341 就在内核里。串口是 /dev/ttyUSB0;如果 IDE 的列表里找不到它,那是你不在 dialout 群组里。

驱动要验证,不要假设。真正绑上去的驱动会跟着硬件出现和消失,所以测试方法就是拔插一次:盯着 Windows 设备管理器的「端口」那一栏(Mac 和 Linux 就盯 IDE 的串口列表),把 Nano 拔掉,必须有一项消失,插回去以后又回来。板子拔了还留在那里的那一项,是别的东西;出现黄色惊叹号,代表驱动根本没绑上。刚才那个一来一去的就是 Nano,所以在 Tools > Port 里勾它:IDE 是往菜单里选中的那个串口上传,不是往「刚好插着的那个」上传。CH340 不会说出它后面接的是什么板,所以看到的会是光秃秃的 COM5 或者 /dev/cu.usbserial-1420,没有板子名字 —— 少了「Arduino」这个字是正常的,不是故障。我们那篇 板子无法识别的排查指南,在 ESP32 上把同一个毛病走了一遍。

卡通对比三种 USB 插头:矮胖的灰色 Mini-USB Type-B 梯形插头打上青蓝色的勾,箭头指向一块蓝色 Arduino Nano 板上金色的 Mini-USB 插座;旁边是较扁的 micro-USB 插头和椭圆形的 USB-C 插头,各自打上橙色的叉
Mini-USB Type-B 是两侧收进去的矮胖梯形 —— 比 micro-USB 高,跟 USB-C 那个椭圆更是两回事。能插进 Nano 那个金色插座的,只有这一种。

为什么 Nano 要在 Tools > Processor 里选「Old Bootloader」?

引导程序(bootloader)是一小段程序,住在 ATmega328P 闪存最上面一块保留区里,芯片每次复位,它都会先跑那么一下。就在那一瞬间,它在串口上听:如果 IDE 正在讲话,它就把送进来的程序写进闪存;如果没人讲话,它就把控制权交给闪存里原本那个程序。Nano 之所以能靠一条 USB 线烧录、而不用另外一台烧录器,全部原因就在这里。这中间你完全不用去按复位键:IDE 打开串口的时候会把 CH340 的 DTR 线拉低,而一颗小电容把这个下降沿传到 ATmega328P 的复位脚上。同一个电路也解释了另一件事 —— 为什么一打开串口监视器,你的程序就从头再跑一次。

市面上流通着两个引导程序,而它们听的速度不一样。在 Tools > Board > Arduino AVR Boards > Arduino Nano 选好之后,下面的 Processor 菜单会给你 ATmega328PATmega328P (Old Bootloader) 两项。在 Arduino AVR 内核自己的 boards.txt 里,前者以 115200 波特上传,等的是比较新的 Optiboot;后者以 57600 波特上传,等的是比较旧的 ATmegaBOOT。大部分用 CH340 的 Nano 出厂烧的是旧的那一个。

IDE 没办法自己判断你手上是哪一个,而这正是为什么这一项要你自己动手选、而不是自动完成。引导程序住在 ATmega328P 自己的闪存里,不会对外宣告自己是谁;挡在它前面的 CH340 又只是一座通用串口桥,完全不知道另一边接的是什么。所以上传工具必须被告知要用什么速度去开口讲话;一旦告诉它的是错的那一个,两边就永远对不上。

除此之外,两项其实一模一样 —— 同一个 ATmega328P 编译目标、同样的 2048 字节 RAM、同样 30720 字节的程序上限。这个下拉菜单唯一改动的就是上传工具的波特率,所以失败的样子也非常固定:速度错了,引导程序会用错误的位时序去采样那些本身形状完全正确的电平跳变,解出一堆乱码,永远不会送回上传工具在等的那个同步字节。IDE 会印出十次失败,从第一次开始数:

Warning: attempt 1 of 10: not in sync: resp=0x00

比较旧版本的 Arduino IDE 会把同一个毛病写成 avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00,因为上传工具的措辞中途改过。不管哪一种,not in sync: resp=0x00 这一段才是认人的那一段。

看到这句话其实是好消息。能印得出来,代表 avrdude 已经成功打开了串口 —— 也就是驱动绑上了、线能传数据、串口也选对了。你和一块能用的板子之间,就只剩 Processor 这个下拉菜单。换另一项试试;选错也不会弄坏任何东西。

你看到什么 代表什么 改什么
列表里根本没有任何串口 驱动没绑上,或者用了只能充电的线 装 CH341SER、重新插拔、换一条确定能传数据的线
串口出现了,上传报 not in sync: resp=0x00 引导程序的波特率选错了 把 Tools > Processor 换成另一个 ATmega328P 项
串口出现了,上传到一半又不见了 线或者 USB hub 把连接掉了 直接插电脑本机的口,换一条线
两个 Processor 项都报 not in sync 那边根本没人在听 —— 保留的引导程序区是空的,或者坏了 用另一块 Arduino 当 ISP,从 2×3 的 ICSP 排孔重新烧引导程序,或者来讯问我们
上传显示成功,板子却没反应 上传本身没问题;问题出在程序 把下面那段 blink 程序当作已知能用的参照烧进去

第一个程序该烧什么?

Nano 上有一颗接在 D13 的 LED,丝印写着 L —— 是复位键旁边那四颗小贴片灯之一。它在板子上就已经接到那一脚了,所以第一次上传不用排针、不用面包板、不用任何元件。下面这段程序会让它闪,同时也从串口把话讲回来,所以一次上传就把两个方向的连接都验证了。

// 给 Arduino Nano V3(ATmega328P + CH340)用的第一次上传测试。
// 不用焊接,也不用任何额外零件:它闪的是板子上原本就有的那颗 LED,
// 并且从烧录用的同一条 USB 线把话讲回来。

const uint8_t LED_PIN = LED_BUILTIN;  // Nano 上的 D13 - 板载 L 灯接的就是这一脚
const unsigned long BLINK_MS = 500;   // 亮半秒,灭半秒

unsigned long lastToggle = 0;
bool ledOn = false;
unsigned long beats = 0;

void setup() {
  pinMode(LED_PIN, OUTPUT);
  Serial.begin(9600);   // 串口监视器要设成同样的 9600 波特
  Serial.println(F("Nano is alive. If you can read this, USB, CH340 and the bootloader all work."));
}

void loop() {
  unsigned long now = millis();

  // 用 millis() 而不是 delay():两次闪烁之间,板子还腾得出手做别的事
  if (now - lastToggle >= BLINK_MS) {
    lastToggle = now;
    ledOn = !ledOn;
    digitalWrite(LED_PIN, ledOn ? HIGH : LOW);

    if (ledOn) {                       // 一次完整闪烁印一行,不是两行
      beats++;
      Serial.print(F("blink "));
      Serial.print(beats);
      Serial.print(F("  uptime "));
      Serial.print(now / 1000);
      Serial.println(F(" s"));
    }
  }
}

把串口监视器的波特率选成 9600,跟 Serial.begin(9600) 对上。对不上,你会拿到跟引导程序那个下拉菜单同一类的失败:一行一行整整齐齐的乱码,因为位到达的速度,跟接收端采样的速度不一样。

卡通图:一块蓝色 Arduino Nano 板孤零零躺在白色桌面上,引脚孔是裸露未焊的金色孔,一条黑色 Mini-USB 线插进它金色的插座,板上一颗小 LED 发出黄绿色的光,背景是一台没有任何文字的小型银色笔记本电脑
第一次上传的全部家当:一块没焊排针的裸 Nano,一条 Mini-USB 线,还有 D13 上那颗正在闪的板载 L 灯。

排针什么时候才焊?

Nano 的排针是第二步,等板子先证明自己没问题再说。从那条 40 针黑色排针上掰下两段 15 针 —— 每一针之间都有刻痕 —— 然后把面包板当治具用:两段排针都插进面包板,把 Nano 套到露出来的针上,面包板就会替你把全部 30 根针扶得笔直,你只管焊。针直不直不是好不好看的问题;焊歪了的排针,之后根本插不进面包板。烙铁头是几百度,碰到什么就烧什么,所以两个焊点之间要把它放回架子上,绝对不要搁在桌面上。

我们的排针焊接教程讲手法,烙铁与助焊剂怎么选讲工具。这个动作用看的,比用读的有用:

针朝下坐好之后,Nano 是跨在面包板中间那道沟上的。它两排排针相距 0.6 英寸,而两组接点之间那道沟只有 0.3 英寸宽,所以 Nano 永远不可能正中跨在沟上:板身两边都会盖过孔,而且其中一边的孔几乎被压完。一段接点区有十列孔,Nano 会盖掉五列,所以把它往其中一边推到底以后,开阔的那一边每一根针都还有四个接点可以用,被压住的那一边只剩一个。放板子的时候就要把这个偏移选好 —— 整个电路以后都要住在开阔的那一边。接出来用公对公杜邦线;我们那篇杜邦跳线怎么选讲了哪一头配什么。Nano 扩展板是另一条路 —— 它让板子针朝下插进黑色排母,再把每一个 I/O 重新排成一组「地/电源/信号」—— 但它要求排针已经焊好,所以它是第三步,不是绕过第二步的方法。

在那些接点上挂东西之前,先把一件事讲清楚:Nano 的 5V 脚既是输入也是输出,面包板红色电源轨吃的就是它 —— 但它不是无底洞。用 USB 供电时,那条电源轨上所有东西的电,都是从电脑的 USB 口抽出来的,而一个标准的 USB 2.0 口给的是 500 mA,板子和你的电路一起分。用 VIN 供电时,5 V 来自板载的线性稳压器,而它不会把多余的电压转换掉 —— 它是烧掉:输入 12 V 时,你每抽 100 mA,就有 0.7 W 变成热,全部塞在一颗几毫米大的封装里,所以它会很烫,而且远远撑不到任何标称数字就自己缩回去了。3V3 那一脚是低电流的基准输出,不是第二条电源轨。每脚 20 mA 的上限是第三本账,跟前面两本都不同 —— 一个 I/O 脚是去开一颗三极管或者一块驱动板,不是自己去带负载。凡是里面有马达、有发热体、有一长条 LED 灯带的,都要自己另外供电,然后把两边的地接在一起。

卡通两格图:左边一块蓝色 Arduino Nano 正被放到插在白色面包板上的黑色公排针上;右边是焊好之后的 Nano 跨坐在面包板中间那道沟上,旁边空出来的孔里插着彩虹色的杜邦线
把面包板当治具:针插板、Nano 套针、然后焊。坐好之后,Nano 一边留下一大片空的接点,另一边只剩一条。

Nano 还是 Uno —— 到底该买哪一个?

Nano V3 和 Uno R3 用的都是 16 MHz 的 ATmega328P,都是同样的 32 KB 闪存、2 KB SRAM、1 KB EEPROM,每脚都是同样的 20 mA 上限;为其中一块写的程序,拿去编译给另一块,一个字都不用改。要选的是芯片被装进了什么身体,不是能力。

Nano V3 Uno R3
体积 18.5 × 43 mm —— 塞得进大部分项目外壳 53 × 69 mm —— 通常要自己占一个盒子
面包板 针朝下直接插进去 放在旁边,用杜邦线接过去
到手能不能用 USB 以外的任何玩法,都要先焊排针 排母已经焊好,永远不用焊
扩展板(shield) 没有 —— 板型对不上 shield 格式 整个 Uno shield 生态都能用
模拟输入 8 个(A0–A7) 6 个(A0–A5)
USB 插头 Mini-USB Type-B 方方大大的 Type-B 打印机插头

多出来那两个模拟输入是有条件的。A6 和 A7 只存在于 Nano 用的那种贴片封装 ATmega328P 上,而且它们是直接接到模数转换器的多路开关,不经过任何端口寄存器。它们用 analogRead() 读得好好的,除此之外什么都不能做 —— 没有 digitalWrite()、没有 digitalRead()、也没有 INPUT_PULLUP。把它们当传感器输入,不要当备用脚。

所以:小体积、要插面包板、要装进盒子的,选 Nano;宁愿一点焊都不焊就能开工,或者项目本来就是围着 shield 做的,选 Uno。想比的是整个开发板家族?我们那篇 ESP32 vs ESP8266 vs Uno 对比讲的是那一层。

我们看到的常见错误

把 Processor 菜单的毛病算到驱动头上。驱动的毛病,是根本没有串口可以选;Processor 的毛病,是串口在、avrdude 也打得开,只是同步失败。看得到串口,就别再重装驱动了。

用了只能充电的 Mini-B 线。里面少了那对数据线,PWR 灯照样亮,看起来就像连上了。破绽是:串口永远不会出现。

第一次上传之前就先把排针焊了。这样你就失去了最干净的那一次测试:一块裸板连 blink 都跑不起来,那是到手就有问题,中间没有你焊的东西可以争论。

排针焊反了方向。一段公排针有长的一端和短的一端。长针那端朝下插进面包板,所以黑色塑料隔条会被夹在 Nano 和面包板之间,你焊的是从板子上面穿出来的短针那一端。装反了,板子底下剩下的那截针就不够长,根本够不到接点。

指望 A6 或 A7 去带东西。digitalWrite(A6, HIGH) 编译起来一声不吭,而那一脚永远不会动,因为它背后根本没有数字输出的硬件 —— AVR 内核的引脚表只做到 A5,A6 和 A7 连一条记录都没有。

常见问题

Arduino Nano V3 用哪一种线?

Mini-USB Type-B —— 矮胖的梯形,不是 micro-USB,也不是 USB-C。以前的小型数码相机、PS3 手柄和旧的移动硬盘盒用的都是这个头。它必须能传数据;只能充电的线不会生出串口。

不焊排针就不能用 Nano 吗?

第一次上传不用。D13 上那颗 L 灯在板子上就已经接好了,所以光靠一条 USB 线,blink 就跑得起来。排针只有在你要用到 I/O 脚的时候才需要 —— 面包板、杜邦线,或者扩展板。

为什么我的 Nano 说「not in sync: resp=0x00」?

几乎一定是 Processor 下拉菜单。大部分 CH340 版 Nano 用的是比较旧的 ATmegaBOOT 引导程序,它听的是 57600 波特,而单写 ATmega328P 的那一项是用 115200 上传。把 Tools > Processor 换成 ATmega328P (Old Bootloader)。

Arduino Nano 的性能跟 Uno 一样吗?

完全一样 —— 同样 16 MHz 的 ATmega328P、同样 32 KB 闪存、2 KB SRAM、1 KB EEPROM,同样的程序。Nano 多了只能做模拟读的 A6 和 A7;Uno 多的是 shield 兼容性和已经焊好的排母。

Nano 可以用电池供电,不用 USB 吗?

可以。往 VIN 灌 7–12 V,板载稳压器就会做出 5 V 电源轨 —— 一颗 9 V 电池或者一个六节 AA 电池盒都合用。四节的电池盒是最常见的失手:6 V 标称已经在这个范围以下,而且只会往下掉,稳压器没有足够的余量把 5 V 撑住。也绝对不要把 VIN 那 7–12 V 灌进 5V 脚,那一脚是在稳压器之后的。

最后更新:2026 年 8 月。有问题?WhatsApp 联系我们

Leave a Reply

Your email address will not be published. Required fields are marked *