大部分玩 Arduino 的朋友,都还是从 UNO板子上开始玩,而这些板子的共性,就是都是用了 DIP(直插)28 脚封转的主芯片。而转为 Nano 的话,其实芯片核心并没有变化,但是封装从 DIP28 改为 TQFP32,兼容版的UNO用的和nano版是同样的芯片,软件方面都不需要变动,程序都是通用的。硬件方面又有什么不同呢?32 – 28 = 4,多了4个引脚。
如上图,多了 VCC 和 GND,没什么好说,而多的 ADC6 和 ADC7,就是是之前 DIP 封转的芯片所没有的东西了,为了兼容UNO原版,兼容版这两个引脚也是没有引出的,而在 nano 中是把这2个ADC引脚引出来了。
上图很明显,在A6,A7引脚上有个红色的惊叹号,说明需要我们注意,大家注意看datasheet中的管脚定义,就会发现这 ADC6 和 ADC7 实际上和 ADC0-ADC5 是不太一样的。ADC0-ADC5 其实是作为 PC0-PC5 的第二功能存在的,分别对应 Arduino 定义 A0-A5。也正因为次,在 Arduino 的官方指南中提到,“The analog input pins can be used as digital pins, referred to as A0, A1, etc. ”。说的是,模拟输入口可以当数字口一样用。对于A0-A5来说,确实不错。但对于第一功能就是ADC(模数转换)而不兼有普通 IO 口功能的 ADC6 和 ADC7 来说。这句话就要打折扣了。A6 和 A7 只能作为模拟输入使用,不要把它当成 类似于 PC PB 这样的 IO口去使用。
而且,这本并不是 Arduino 内核的问题,而是硬件本身的设计就是这个样子。A6 和 A7 确少作为 标准IO口 所需的必要硬件配置。
实测中确实是这样,在 A6、A7 引脚上,想运行 Blink 例程,使用 pinMode(A6, OUTPUT),digitalWrite(A6, HIGH) 都不会得到你所需要的效果。更崩溃的是,你可能改变了芯片内部你原本不想改变的寄存器配置,没准会有诡异意外发生。玩 Nano,或者是贴片AVR的 Arduino 朋友们,可要注意。
总结来说,就是在nano版中,A6,A7只能用作ADC转换用,而不能用作数字口来使用。