第2章 MCU基础选型:主流MCU厂商与选型要素

各位同学,咱们今天聊聊MCU选型这件事。说实话,我见过太多项目因为一开始芯片选型没想清楚,后面改得死去活来。你想想看,一个物联网产品从原型到量产,MCU就像人的大脑,选错了,后面所有外设、协议栈、功耗优化都得跟着遭殃。

这一章,我结合自己这些年踩过的坑,把主流MCU厂商和选型要素给你捋清楚。咱们不搞虚的,直接上干货。

2.1 主流MCU厂商:三足鼎立的格局

目前物联网领域,最常用的就是这三家:ST(意法半导体)的STM32、乐鑫的ESP32、以及国产的GD32。我个人的习惯是,先看项目需求,再在这三家里面挑。

2.1.1 STM32:生态之王

STM32的地位,说白了就是「你几乎找不到它做不了的事」。从低功耗的L0系列到高性能的H7系列,产品线覆盖得密密麻麻。我记得2016年做第一个物联网网关时,用的就是STM32F103,那会儿HAL库刚出来,文档还不全,调试起来真是头大。但现在不一样了,STM32CubeMX一键生成代码,生态成熟得让人感动。

核心优势:
  • 生态最完善:HAL库、LL库、CubeMX、各种中间件
  • 产品线极广:从Cortex-M0到M7,覆盖所有性能段
  • 社区资源丰富:遇到问题基本都能搜到答案
注意:STM32最近几年价格波动较大,尤其是2021年缺芯潮时,一颗F103从几块钱涨到几十块。如果你做的是消费级产品,建议留好备选方案。

2.1.2 ESP32:Wi-Fi/BLE一体化的性价比之王

ESP32这玩意儿,我一开始是瞧不上的。觉得它就是个Wi-Fi模块,性能能好到哪去?直到有一次做智能家居项目,甲方要求「成本控制在30块以内,还要支持OTA」。我算了一下,STM32+外挂Wi-Fi模组,光物料成本就超了。后来换成ESP32,一颗芯片搞定主控+Wi-Fi+蓝牙,成本直接砍半。

ESP32最大的特点就是「集成度高」。它内置了Wi-Fi和BLE,省去了外挂射频芯片的麻烦。而且乐鑫的ESP-IDF框架做得不错,FreeRTOS跑起来很稳。我个人建议,如果你的产品需要无线连接,且对实时性要求不是极端苛刻,ESP32是首选。

我的经验:ESP32的ADC精度是个坑。它的ADC是非线性的,做高精度采集时千万别直接用。我曾经因为这个被坑过一次,后来加了外部ADC才解决。

2.1.3 GD32:国产替代的务实之选

GD32是国产MCU里我最看好的。它和STM32的引脚基本兼容,很多项目可以直接替换。但要注意,GD32的内核是M23/M33,和STM32的M0/M4在指令集上有细微差别。我做过一个项目,把STM32F103的代码直接烧到GD32F103上,结果定时器中断频率不对,查了两天才发现是时钟树配置不一样。

GD32的优势在于「性价比」和「供货稳定」。现在国际形势这么复杂,很多客户都要求国产化。如果你做的是工业控制或者对成本敏感的产品,GD32值得考虑。

对比项 STM32 ESP32 GD32
内核 Cortex-M0/M3/M4/M7 Xtensa LX6/LX7 Cortex-M23/M33
主频 48MHz ~ 480MHz 160MHz ~ 240MHz 72MHz ~ 200MHz
无线能力 需外挂 内置Wi-Fi/BLE 需外挂
价格(批量) ¥5 ~ ¥50 ¥8 ~ ¥20 ¥3 ~ ¥15
生态成熟度 ★★★★★ ★★★★ ★★★

2.2 选型四大要素:功耗、性能、外设、成本

选MCU就像找对象,没有最好的,只有最合适的。我一般按这个顺序来权衡:功耗 > 性能 > 外设 > 成本。为什么把功耗放第一?因为物联网产品大部分是电池供电,功耗决定了产品能用多久。

2.2.1 功耗:决定产品寿命的关键

功耗这块,我踩过最大的坑就是「只看数据手册上的典型值」。你想想看,数据手册上写的「待机电流1μA」,那是所有外设都关掉、时钟停振的理想情况。实际项目中,你总要留几个GPIO做唤醒吧?总要开个RTC吧?这些都会增加功耗。

我建议你关注三个指标:

  • 运行功耗:MCU全速运行时的电流,一般几十mA
  • 睡眠功耗:大部分外设关闭,保留RAM和RTC,一般几μA
  • 深度睡眠功耗:几乎全部关闭,只有唤醒逻辑在工作,一般几百nA

举个例子,STM32L0系列在深度睡眠模式下能做到0.3μA,而ESP32因为内置Wi-Fi,深度睡眠也要10μA左右。如果你的产品需要一年换一次电池,那L0系列更合适。

避坑指南:我曾经做过一个温湿度传感器,选的是STM32L051。数据手册上写深度睡眠0.3μA,结果实际测出来是2.1μA。查了半天,发现是GPIO没有配置成模拟模式,漏电了。所以,功耗一定要实测,别信手册。

2.2.2 性能:够用就好,别盲目追求

很多新手喜欢选主频最高的MCU,觉得「性能冗余总比不够好」。其实这是个误区。主频越高,功耗越大,而且高频信号对PCB布局的要求也更高。

我一般这样判断性能需求:

  • 简单传感器采集:几十MHz的Cortex-M0就够了,比如STM32F0
  • 带简单协议栈(如MQTT):100MHz左右的M4,比如STM32F4
  • 需要做音频处理或复杂算法:200MHz以上的M7或ESP32
  • 需要跑Linux或AI推理:那就别选MCU了,上MPU吧

你想想看,一个温度传感器每秒采集一次数据,用72MHz的MCU和用240MHz的MCU,用户体验上根本感觉不出来。但成本可能差了好几倍。

2.2.3 外设:够用且不浪费

外设这块,我建议你「先列需求,再选芯片」。别看到芯片有10个UART就觉得赚了,实际上你可能只需要2个。多出来的外设不仅浪费钱,还占用PCB空间。

常见的物联网外设需求:

  • UART:至少2个,一个接调试串口,一个接通信模组
  • I2C:接传感器,一般1~2个
  • SPI:接显示屏或Flash,至少1个
  • ADC:采集模拟信号,精度至少12位
  • 定时器:做PWM或计时,至少2个

我记得有一次做智能锁项目,选了STM32F103,外设完全够用。但后来客户要求加一个指纹识别模块,需要额外的SPI接口。结果F103只有2个SPI,一个被显示屏占了,一个被Flash占了,最后只能通过GPIO模拟SPI,速度慢不说,还占CPU资源。所以,选型时最好留20%的外设余量。

2.2.4 成本:别只看芯片价格

成本是很多工程师容易忽略的。你以为芯片便宜就省钱?错了。还要考虑:

  • 开发成本:STM32的HAL库上手快,开发周期短;GD32的库虽然兼容,但有些坑要填
  • BOM成本:ESP32集成了Wi-Fi,省去了外挂模组的钱
  • 生产测试成本:有些芯片烧录麻烦,需要专用工具
  • 供货风险:缺芯时,STM32交期长达52周,GD32可能只要8周

我个人的经验是,如果产品量不大(几千台),选STM32最省心。如果量很大(几十万台),那就要仔细算账了,GD32或国产芯片可能更划算。

2.3 常用开发板介绍

学习阶段,我建议你直接买官方开发板。虽然贵一点,但资料全、电路可靠,出了问题也好排查。

2.3.1 STM32 Nucleo系列

Nucleo系列是我最推荐的入门板。它自带ST-Link调试器,插上USB就能用。而且引脚兼容Arduino,可以插各种扩展板。我个人用的是Nucleo-F411RE,主频100MHz,性价比很高。

2.3.2 ESP32-DevKitC

乐鑫官方的开发板,集成了USB转串口芯片,直接插电脑就能烧录。注意,ESP32的供电电流比较大,建议用质量好一点的USB线,否则容易掉电重启。我遇到过好几次,换了根线就好了。

2.3.3 GD32 Colibri系列

GD32的官方板,价格便宜,几十块钱。但要注意,它的调试器是GD-Link,和ST-Link不通用。我第一次用的时候,差点把板子烧了,因为接错了调试接口的电压。

开发板 价格 调试器 推荐指数
Nucleo-F411RE ¥100左右 ST-Link ★★★★★
ESP32-DevKitC ¥50左右 USB转串口 ★★★★
GD32 Colibri-F103 ¥40左右 GD-Link ★★★
我的建议:如果你是初学者,先买一块Nucleo-F411RE,把基础外设(GPIO、UART、I2C、SPI)都跑一遍。然后再买一块ESP32-DevKitC,学Wi-Fi和蓝牙通信。两块板子加起来不到200块,够你玩半年了。

好了,这一章的内容就到这里。下一章咱们开始实战,用STM32点亮第一颗LED。到时候我会把工程模板、代码结构、调试方法都给你讲清楚。咱们下章见。