硬件基础与环境搭建:常用MCU平台介绍,串口电路设计要点

做嵌入式开发这么多年,我始终觉得一个道理没变过——硬件是地基,固件是房子。地基没打好,房子盖得再漂亮也得塌。这一章咱们就把地基夯实了。

我会重点聊两个平台:STM32 和 ESP32。为什么选它们?因为这两个芯片几乎覆盖了市面上 80% 的串口烧录和 OTA 升级场景。一个稳如老狗,一个自带无线,正好互补。

2.1 常用MCU平台:STM32 vs ESP32

先看一张对比表,心里有个底:

特性 STM32(以F103为例) ESP32
内核 Cortex-M3 / M4 / M7 Xtensa LX6 双核
主频 72MHz ~ 480MHz 240MHz
SRAM 20KB ~ 1MB 520KB
Flash 64KB ~ 2MB 4MB(外挂)
串口数量 3 ~ 8 个 USART 3 个 UART
无线能力 无(需外挂模块) WiFi + BLE 内置
烧录方式 SWD / UART Bootloader UART / USB / OTA
典型场景 工业控制、电机驱动、仪表 物联网、智能家居、数据采集

我个人习惯是:做有线产品用 STM32,做无线产品用 ESP32。但这不是绝对的——我在一个项目中就遇到过客户非要 STM32 做 OTA,结果硬是外挂了一个 ESP8266 当 WiFi 透传模块。嗯,绕了一大圈。

2.1.1 STM32 的串口烧录原理

STM32 出厂时,ROM 里固化了一段 Bootloader。芯片上电后,检测 BOOT0 和 BOOT1 引脚的电平:

  • BOOT0 = 1, BOOT1 = 0:从系统存储器启动,进入串口烧录模式
  • BOOT0 = 0, BOOT1 = x:从用户 Flash 启动,正常跑你的程序

说白了,就是靠两个引脚的电平组合,决定芯片从哪开始跑代码。这个设计很巧妙——即使你的程序把 Flash 写崩了,只要把 BOOT0 拉高,重新上电,就能通过串口救回来。

我的经验:量产时别让工人手动跳线。我建议用三极管或 MOS 管做自动烧录电路,上位机通过 DTR/RTS 信号控制 BOOT0 和复位引脚。这样一键烧录,效率翻倍。

2.1.2 ESP32 的串口烧录原理

ESP32 的烧录逻辑跟 STM32 不太一样。它靠的是 GPIO0 和 EN 引脚:

  • 按住 BOOT(GPIO0 拉低),按一下 EN(复位),松开 BOOT——进入下载模式
  • 直接上电或复位(GPIO0 浮空或拉高)——正常运行

你想想看,这个操作是不是有点反人类?每次烧录都要手动按两个按钮。好在 ESP32 的官方工具 esptool.py 支持自动复位协议,通过串口的 DTR 和 RTS 信号自动控制 GPIO0 和 EN。

注意:ESP32 的串口电平是 3.3V,绝对不能直接接 5V 的 USB 转串口模块!我曾经见过一个新手直接把 CH340G(5V 输出)接到 ESP32 的 RX 上,结果芯片直接冒烟了。一定要用 3.3V 电平的串口模块,或者加电平转换。

2.2 串口电路设计要点

串口电路看着简单,就 TX、RX、GND 三条线。但实际项目中,我踩过的坑比想象中多得多。下面是我总结的几个关键点:

2.2.1 电平匹配

这是最基础也最容易出问题的地方。常见电平标准:

电平标准 逻辑 0 逻辑 1 典型芯片
TTL(5V) 0V ~ 0.8V 2.4V ~ 5V CH340G、FT232RL(5V 模式)
3.3V CMOS 0V ~ 0.8V 2.0V ~ 3.3V STM32、ESP32、CP2102
RS232 +3V ~ +15V -3V ~ -15V MAX232、SP3232

我的建议是:统一用 3.3V 系统。如果调试器或 USB 转串口模块是 5V 的,中间串一个 1kΩ 电阻限流,或者用 TXS0108E 这样的电平转换芯片。

2.2.2 串口保护电路

很多工程师觉得串口不需要保护,直接连就行。但我在做工业产品时吃过亏——现场工人带电插拔,静电直接把串口引脚打坏了。

现在我习惯加这么几个元件:

  • TVS 管(比如 PESD5V0S1UB):并接在 TX 和 RX 对地,钳位静电
  • 100Ω 串联电阻:限制浪涌电流,也能防止短路
  • 10kΩ 上拉/下拉电阻:防止引脚浮空时误触发

电路结构大概是这样:

MCU_TX ----[100Ω]----+---- 接插件 TX
                      |
                     [TVS]
                      |
                     GND

MCU_RX ----[100Ω]----+---- 接插件 RX
                      |
                     [TVS]
                      |
                     GND
核心原则:串口电路设计要遵循「能保护就保护,能隔离就隔离」。成本增加几毛钱,但能省掉返厂维修的几千块。

2.2.3 自动烧录电路

前面提到过,量产时手动跳线或按按钮是不现实的。这里给出一个我常用的 STM32 自动烧录电路:

USB转串口模块          STM32
DTR ----[三极管]----> BOOT0
RTS ----[三极管]----> NRST

原理很简单:上位机通过 DTR 和 RTS 的电平变化,控制 BOOT0 和复位引脚,实现自动进入烧录模式。具体电路参数我建议:

  • NPN 三极管(如 S8050),基极串 1kΩ 电阻
  • 集电极上拉到 3.3V,通过 10kΩ 电阻
  • 发射极直接接地

ESP32 的自动烧录电路类似,只是控制的是 GPIO0 和 EN 引脚。很多现成的 ESP32 开发板(比如 NodeMCU)已经集成了这个电路,直接用就行。

2.3 开发板与调试器连接

这部分我直接说干货,不绕弯子。

2.3.1 常用调试器

调试器 接口 支持平台 价格
J-Link SWD / JTAG STM32、NXP、Nordic ¥300 ~ ¥3000
ST-Link SWD STM32 全系列 ¥20 ~ ¥100
DAP-Link SWD ARM Cortex 全系列 ¥15 ~ ¥50
USB 转串口 UART 所有带串口 Bootloader 的芯片 ¥5 ~ ¥30

我个人习惯:调试用 J-Link 或 ST-Link,烧录用 USB 转串口。为什么?因为调试器适合单步跟踪、设断点,但量产烧录时串口更简单、更稳定。

2.3.2 接线方式

以 STM32 为例,SWD 接口只需要 4 根线:

  • SWDIO:数据线
  • SWCLK:时钟线
  • GND:地线
  • 3.3V:可选,给目标板供电(小功率场景)

串口烧录需要 3 根线:

  • TX:调试器发,MCU 收
  • RX:MCU 发,调试器收
  • GND:共地
千万注意:TX 和 RX 要交叉连接!调试器的 TX 接 MCU 的 RX,调试器的 RX 接 MCU 的 TX。我第一次做项目时就接反了,折腾了半天才发现是线序问题。

2.4 本章知识体系总览

下面这张图把本章的核心逻辑串起来了,你可以对照着看:

硬件基础与环境搭建知识体系 硬件基础与环境搭建 · 知识体系 MCU 平台选择 串口电路设计 调试器与连接 STM32:Cortex-M 内核 ESP32:Xtensa 双核 + WiFi 电平匹配(3.3V / 5V) 保护电路(TVS + 电阻) 自动烧录电路(DTR/RTS) J-Link / ST-Link / DAP-Link USB 转串口(CH340 / CP2102) 核心目标:搭建稳定可靠的串口烧录与调试环境 为后续的 Bootloader 开发和 OTA 升级打下硬件基础

2.5 开发环境快速搭建

最后,我简单说一下开发环境的搭建步骤。这部分不展开,因为后面每一章都会用到具体的工具链。

2.5.1 STM32 环境

  • IDE:STM32CubeIDE(免费,官方推荐)或 Keil MDK(收费,但调试体验好)
  • 烧录工具:STM32CubeProgrammer(支持串口和 SWD)
  • 串口助手:Putty、SecureCRT 或 MobaXterm

2.5.2 ESP32 环境

  • 框架:ESP-IDF(官方)或 Arduino-ESP32(入门快)
  • 烧录工具:esptool.py(命令行)或 ESP Flash Download Tool(图形化)
  • 串口助手:同上,推荐 MobaXterm,支持日志高亮
一个小建议:刚开始学的时候,先用现成的开发板(比如 STM32F103C8T6 最小系统板、ESP32-DevKitC),把串口烧录跑通。别一上来就自己画板子,容易把问题复杂化。等烧录流程走通了,再考虑定制硬件。

嗯,这一章的内容就到这。硬件基础打好了,后面讲 Bootloader 和 OTA 的时候,你就能把精力放在代码逻辑上,而不是被硬件问题卡住。