硬件基础与环境搭建:常用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 拉高,重新上电,就能通过串口救回来。
2.1.2 ESP32 的串口烧录原理
ESP32 的烧录逻辑跟 STM32 不太一样。它靠的是 GPIO0 和 EN 引脚:
- 按住 BOOT(GPIO0 拉低),按一下 EN(复位),松开 BOOT——进入下载模式
- 直接上电或复位(GPIO0 浮空或拉高)——正常运行
你想想看,这个操作是不是有点反人类?每次烧录都要手动按两个按钮。好在 ESP32 的官方工具 esptool.py 支持自动复位协议,通过串口的 DTR 和 RTS 信号自动控制 GPIO0 和 EN。
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:共地
2.4 本章知识体系总览
下面这张图把本章的核心逻辑串起来了,你可以对照着看:
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,支持日志高亮
嗯,这一章的内容就到这。硬件基础打好了,后面讲 Bootloader 和 OTA 的时候,你就能把精力放在代码逻辑上,而不是被硬件问题卡住。