第二章 主控芯片选型与最小系统设计

做喷洒系统,选主控芯片是第一步。这一步走对了,后面省心不少。走错了?嗯,我见过不少项目因为芯片选型失误,最后不得不推倒重来。

今天咱们聊聊 STM32 和 ESP32 这两款主流芯片。我个人习惯是:先看需求,再选芯片,而不是反过来。

2.1 STM32 vs ESP32:选型对比

先放一张对比表,大家心里有个底:

对比项 STM32F103(经典款) ESP32(WiFi款)
主频 72MHz 240MHz(双核)
RAM 20KB~64KB 520KB
Flash 64KB~512KB 4MB~16MB
无线功能 无(需外挂) WiFi + BLE 内置
ADC精度 12位 12位
定时器 高级定时器(适合PWM) 通用定时器
功耗 低(几十mA) 较高(80mA+)
价格 5~15元 10~20元
开发难度 中等 较低(Arduino生态)

看到这张表,你可能会问:那到底选哪个?

我的建议是:看你的喷洒系统要不要联网

  • 纯本地控制(比如遥控器+飞控):STM32 更稳。它的定时器精度高,做 PWM 控制无刷电机很顺手。我在项目中遇到过用 STM32 驱动 8 路独立喷洒阀门的场景,定时器资源刚好够用。
  • 需要远程监控(比如手机 APP 调参数):ESP32 更省事。WiFi 和蓝牙都集成好了,不用额外加模块。我记得有个客户要求实时查看药箱液位,用 ESP32 直接连 MQTT 服务器,两天就搞定了。

核心结论

  • STM32:适合对实时性、稳定性要求高的场景
  • ESP32:适合需要无线通信、快速原型验证的场景

2.2 最小系统电路设计

选好芯片,接下来就是搭最小系统。说白了,就是让芯片能跑起来的最简电路。我把它拆成四个部分来讲:电源、时钟、复位、调试接口

2.2.1 电源电路

芯片要吃饭,电源就是它的饭。STM32 和 ESP32 的工作电压都是 3.3V,但供电方式有讲究。

我个人习惯用 AMS1117-3.3 这个 LDO。便宜、稳定、好买。电路很简单:

// 电源电路示意(STM32为例)
// 输入:5V(来自电池或USB)
// 输出:3.3V

AMS1117-3.3 引脚连接:
  Vin  → 5V(加10uF+0.1uF滤波电容)
  Vout → 3.3V(加10uF+0.1uF滤波电容)
  GND  → 地

避坑指南

我曾经在 ESP32 上直接用了 3.3V 供电,结果 WiFi 一开就重启。后来发现是瞬间电流不够。ESP32 的峰值电流能到 500mA,LDO 选型时一定要留余量。我现在习惯用 AMS1117-3.3 输出 800mA 的版本,稳得很。

2.2.2 时钟电路

时钟是芯片的心跳。没有它,芯片就是个死物。

STM32 和 ESP32 都支持内部 RC 振荡器和外部晶振。我的建议是:能用外部晶振就别用内部的

  • STM32:常用 8MHz 外部晶振,内部 PLL 倍频到 72MHz。我习惯在晶振两端各加一个 22pF 的负载电容,别问为什么,这是经验值。
  • ESP32:常用 40MHz 外部晶振。注意!ESP32 对晶振精度要求高,别用便宜的晶振,否则 WiFi 连不上。我踩过这个坑,后来换了 ±10ppm 的晶振才解决。
// 晶振电路(STM32为例)
// 8MHz 晶振 + 两个 22pF 电容

OSC_IN  ──┬── 晶振(8MHz) ──┬── OSC_OUT
          │                │
         22pF             22pF
          │                │
         GND              GND

2.2.3 复位电路

复位电路,说白了就是给芯片一个「重新来过」的机会。

最简单的复位电路:一个 10kΩ 上拉电阻 + 一个按键 + 一个 0.1μF 电容。按下按键,复位引脚拉低,芯片复位。

注意

ESP32 的 EN 引脚(使能引脚)不能直接接 3.3V!我见过有人直接短接,结果芯片上电后无法正常启动。正确的做法是:EN 引脚通过 10kΩ 电阻上拉到 3.3V,同时加一个 0.1μF 电容到地。这样上电时有个延迟,芯片才能稳定启动。

2.2.4 调试接口

调试接口是工程师的「眼睛」。没有它,你只能靠猜。

  • STM32:用 SWD 接口(SWDIO + SWCLK),只需要两根线。我习惯把 SWO 也引出来,方便调试时看 printf 输出。
  • ESP32:用 UART 接口(TX + RX),配合自动下载电路。注意!ESP32 的 GPIO0 在下载时要拉低,否则进不了下载模式。
// STM32 SWD 调试接口
// 只需要 4 个引脚:
// 1. SWDIO(PA13)
// 2. SWCLK(PA14)
// 3. 3.3V
// 4. GND

// ESP32 下载电路(自动下载)
// 用 CH340G 串口芯片 + DTR/RTS 控制
// 原理:DTR 控制 EN,RTS 控制 GPIO0

我的习惯

不管用哪个芯片,我都会在 PCB 上预留一个 4 针的调试接口。哪怕量产时不用,开发阶段也省不了。我曾经因为没留调试接口,板子焊好后发现程序烧不进去,只能飞线,那叫一个痛苦。

2.3 完整的最小系统电路图

把上面四个部分拼起来,就是一个完整的最小系统。我画个简图示意:

// STM32 最小系统(简化版)
// ┌─────────────────────────────────────┐
// │  电源:5V → AMS1117 → 3.3V         │
// │  时钟:8MHz 晶振 + 22pF*2          │
// │  复位:10kΩ上拉 + 按键 + 0.1μF     │
// │  调试:SWDIO + SWCLK + 3.3V + GND  │
// └─────────────────────────────────────┘

嗯,这里要注意:去耦电容不能省。每个电源引脚旁边都要放一个 0.1μF 的电容,离引脚越近越好。我见过有人为了省成本,一个电容都不放,结果芯片工作不稳定,时好时坏。

2.4 选型决策树

最后,我给大家一个简单的决策树,帮你快速选型:

  1. 需要无线通信吗?
    • 是 → 选 ESP32
    • 否 → 看第 2 步
  2. 需要高精度 PWM 吗?
    • 是 → 选 STM32
    • 否 → 看第 3 步
  3. 成本敏感吗?
    • 是 → 选 STM32(便宜)
    • 否 → 选 ESP32(功能多)

说白了,没有最好的芯片,只有最合适的。我见过有人用 STM32 做 WiFi 网关,结果外挂 ESP8266 模块,绕了一大圈。也见过有人用 ESP32 做飞控,结果实时性不够,炸机了。

选型时多想想你的应用场景,别盲目跟风。


好了,这一章就到这里。下一章我们聊聊 传感器接口与数据采集,包括流量计、液位传感器、压力传感器的选型与电路设计。到时候我会分享一些我在实际项目中踩过的坑,保证让你少走弯路。