第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,覆盖所有性能段
- 社区资源丰富:遇到问题基本都能搜到答案
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是首选。
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系列更合适。
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 | ★★★ |
好了,这一章的内容就到这里。下一章咱们开始实战,用STM32点亮第一颗LED。到时候我会把工程模板、代码结构、调试方法都给你讲清楚。咱们下章见。