同一段程序,换块板为什么不一样?|单片机动画课 12

走到这里,你已经认识了 GPIO、消抖、PWM、ADC、UART、I²C、中断、定时器和存储。于是很自然地想:这些概念都有了,Arduino 程序换到 ESP32 或 Blue Pill,是不是只要换一个引脚数字?
有时候改动确实很少,但不能把“函数名字一样”当成所有条件一样。抽象接口帮助复用思路,具体芯片、开发板和软件核心仍然决定实际行为。
本文比较 Uno R3(ATmega328P)、使用 ESP32-WROOM-32E 的经典 ESP32 开发板,以及装有 STM32F103C8T6 的 Blue Pill 类板。GIF 为概念比较,非三块实物的仿真、跑分或实测。市场上同名板的芯片和接线可能不同。
第一层:引脚名字不是物理位置
代码里的 8,需要经过当前开发板定义,才能对应到芯片引脚。Uno 的 D8、ESP32 的 GPIO 编号、STM32 的 PA/PB 端口命名,不能靠“看起来都是八号”来对应。

LED_BUILTIN 也要看所选板型是否定义、定义到哪里,以及灯的驱动方式。有些灯是低电平点亮,有些板上是可寻址 RGB LED;不能因为第一课采用高电平点亮,就把所有板载灯一概这样理解。
同样,一个引脚能做普通输入,不一定能输出;能输出,也不一定能映射到你想用的 ADC、PWM 或通信外设。查引脚功能图比不断尝试数字更可靠。
第二层:高电平和量程会变化
Uno R3 的常用数字 I/O 工作在 5V 逻辑环境;经典 ESP32 和常见 STM32F103 Blue Pill 的 I/O 通常是 3.3V 环境。

HIGH 这个逻辑词可以保留,实际电压、输入门限和允许电压却需要重查。不能把 5V 信号直接当作所有 3.3V 输入都能接受;个别 STM32 引脚的容忍能力也有条件,不意味着整块板每个引脚都支持同样电压。
ADC 也类似。Uno R3 常见 10 位原始读数;另外两类芯片具备不同的 ADC 能力和配置方式。第 06 课已经解释:返回多少位、有效输入范围、怎样校准,是不同问题。更换板子后,直接复用旧换算系数可能得到看似正常却错误的数值。
PWM 的频率和分辨率也不一定跟着同一函数名保持一致。ESP32 的 LEDC、STM32 的定时器通道、AVR 的计数器,各有资源共享与配置限制。
第三层:代码要由正确的工具链解释
同一个 digitalWrite(),在不同 Arduino 核心中会调用不同的实现。你写的上层意图相似,最终机器指令、寄存器操作和时钟配置却不相同。

可以用几个明确数字建立尺度,但别把它们直接当成性能排名:
| 比较对象 | CPU 时钟尺度 | 这里应记住什么 |
|---|---|---|
| Uno R3 / ATmega328P | 16MHz | AVR,板级定义与资源相对固定 |
| ESP32-WROOM-32E | 最高 240MHz | 经典 ESP32;不代表所有 ESP32 家族型号 |
| STM32F103C8T6 | 最高 72MHz | Cortex-M3;实际时钟取决于配置 |
不同架构每条指令、外设和软件开销不同,MHz 比值不是程序速度比值。一个在等待通信的程序,也不会因为 CPU 主频提高就按比例完成得更快。
软件版本同样重要。ESP32 的旧教程可能使用已迁移的 LEDC API;STM32duino 的当前安装说明也有 IDE 版本要求。复用代码时,要把核心版本与教程版本一起对照,而不是看到函数报错就判断芯片坏了。
下载接口也不相同
Uno R3 常见上传路径经过 USB 串口转换和引导程序。ESP32 通常还涉及下载模式与复位控制。Blue Pill 类板则要根据实际配置选择 ST-Link/SWD、串口引导或已安装的 USB 引导程序等方式。
板上有 USB 插座,不等于里面已经有能配合当前工具上传程序的引导程序。这个区别解释了很多“电脑看到了板,但上传失败”的情况。
看完再猜
把第一课的 digitalWrite(8, HIGH) 原样搬到另一块板,能够保证同一个位置的灯点亮吗?
不能。还要确认引脚映射、输出配置、灯的接法和有效电平,以及固件是否正确编译并运行在目标芯片上。
这十二课的价值,就是让你能把一个现象拆成可理解的问题:电平从哪里来,何时读取,谁在计时,数据怎样编码,程序怎样执行,状态又保存在哪里。以后开始动手时,就可以带着这些问题观察,而不必只靠复制代码碰运气。
资料:Uno R3 官方资料、ESP32-WROOM-32E 数据手册、STM32F103x8 数据手册、STM32duino 入门、Espressif LEDC。
发现更多好玩的开源项目
专注 Arduino、开源硬件、端侧 AI 和值得收藏的开发者工具。
长按二维码关注「GitStar」
所有动画为教学原理示意,非芯片仿真、非硬件实测。网页发布:2026-09-21。