3. STM32 微控制器入门:从选型到最小系统
STM32 这名字,做嵌入式的没人不知道。我最早接触它还是十多年前,那时候 8 位机还是主流。说实话,第一次看到 STM32 的参考手册,我整个人是懵的——一千多页,谁看得完?但后来用顺手了,才发现它的生态是真的好。
这一章,咱们就聊聊 STM32 系列怎么选型、芯片内部长什么样、以及怎么搭一个能跑起来的最小系统。嗯,都是实战里绕不开的东西。
3.1 STM32 系列概览
ST 公司把 STM32 分成了十几个系列。别被吓到,其实核心就几条线:
- 高性能系列:STM32F2/F4/F7/H7。主频高,带浮点运算,适合图像处理、电机控制。
- 主流系列:STM32F0/F1/F3。性价比之王,F1 是经典款,到现在还在大量出货。
- 超低功耗系列:STM32L0/L1/L4/L5。做电池供电设备的首选,我有个项目用 L4,待机电流能到纳安级。
- 无线系列:STM32WB/WL。内置蓝牙或 LoRa,适合 IoT 终端。
核心提示:选型不是越贵越好。我见过有人用 F7 做 LED 灯控,纯粹是浪费。先定需求,再选芯片。
3.2 选型方法:我踩过的坑
选型这事儿,说起来简单,做起来全是细节。我总结了一套自己的流程:
- 算算你需要多少引脚。GPIO、ADC、PWM、通信接口,列个清单。我习惯多留 20% 的余量,方便后期改版。
- 看存储够不够。Flash 放代码,SRAM 放变量。如果你要用 RTOS,RAM 至少 64KB 起步。我曾经在 F103C8T6 上硬塞 FreeRTOS,64KB Flash 差点爆了。
- 确认封装。LQFP 好焊接,适合样机。BGA 省空间,但打样麻烦。个人建议新手先用 LQFP。
- 查供货和价格。别选冷门型号,否则买不到货。我吃过这个亏,项目做到一半芯片涨价三倍,老板差点让我走人。
| 需求场景 | 推荐系列 | 典型型号 | Flash/RAM |
|---|---|---|---|
| 入门学习 | F1 主流 | STM32F103C8T6 | 64KB / 20KB |
| 低功耗传感器 | L4 超低功耗 | STM32L476RG | 1MB / 128KB |
| 电机控制 | F4 高性能 | STM32F407VGT6 | 1MB / 192KB |
| 无线 IoT | WB 无线 | STM32WB55RG | 1MB / 256KB |
我的习惯:先上 ST 官网用 STM32CubeMX 的选型工具筛一遍,再结合立创商城看现货价格。别只看单价,还要看采购量级。
3.3 芯片内部结构:拆开看看
你想想看,一个指甲盖大小的芯片,里面集成了多少东西?我画了一张图,帮你理清 STM32 的内部骨架。
说白了,STM32 就是一颗 ARM Cortex-M 内核,加上一堆可配置的外设,通过总线矩阵连起来。内核负责算,外设负责跟外界打交道。你写代码,其实就是配置这些外设怎么工作。
注意:不同系列的 STM32,外设寄存器地址不一样。别把 F1 的代码直接往 F4 上烧,大概率跑不起来。我刚开始就干过这事儿,debug 了一整天才发现是外设基地址对不上。
3.4 最小系统电路设计
最小系统,就是让芯片能跑起来的最简电路。我画过几十块板子,总结下来就四个部分:
3.4.1 电源电路
STM32 需要 3.3V 供电。我一般用 AMS1117-3.3 做 LDO,输入接 5V 或 USB。注意输入输出各加一个 10μF 电解电容和 0.1μF 瓷片电容,靠近芯片引脚放。
// 电源引脚连接示意
VDD → 3.3V
VSS → GND
VDDA → 3.3V(模拟电源,加 LC 滤波)
VSSA → GND
避坑指南:VDDA 和 VSSA 是模拟电路电源,一定要单独滤波。我曾经偷懒直接短接 VDD,结果 ADC 采样值跳得像心电图。
3.4.2 时钟电路
两种时钟源:
- HSE(高速外部晶振):8MHz,配合两个 20pF 电容。精度高,适合需要精确时序的场景。
- LSE(低速外部晶振):32.768kHz,给 RTC 用。省电,走时准。
如果对时序要求不高,直接用内部 HSI 也行。我有个小项目就省了晶振,省了两毛钱成本。
3.4.3 复位电路
NRST 引脚接一个 10kΩ 上拉电阻到 3.3V,再加一个 0.1μF 电容到 GND。这样上电时自动复位,手动复位就加个按键。
3.4.4 启动模式配置
BOOT0 和 BOOT1 引脚决定芯片从哪里启动:
| BOOT0 | BOOT1 | 启动区域 |
|---|---|---|
| 0 | X | Flash 主存储器(正常模式) |
| 1 | 0 | 系统存储器(ISP 下载模式) |
| 1 | 1 | 内置 SRAM(调试用) |
正常使用时,BOOT0 接地,BOOT1 随意。需要烧录固件时,把 BOOT0 拉高再上电就行。
完整最小系统清单:STM32 芯片 + 3.3V LDO 电源 + 8MHz 晶振 + 复位电路 + BOOT 配置电阻。就这些,不需要别的。
3.5 实战:搭一个 STM32F103C8T6 最小系统
这个型号是入门神器,淘宝上十几块钱一块板子。我自己画过一版,原理图核心部分如下:
// 电源部分
VIN 5V → AMS1117-3.3 输入
AMS1117-3.3 输出 → 3.3V
C1: 10μF 电解 (VIN-GND)
C2: 0.1μF 瓷片 (3.3V-GND)
// 晶振部分
X1: 8MHz 晶振 两端接 PA8/PC14
C3: 20pF (PA8-GND)
C4: 20pF (PC14-GND)
// 复位
R1: 10kΩ (3.3V-NRST)
C5: 0.1μF (NRST-GND)
// 启动
BOOT0 → GND (通过 10kΩ 下拉)
BOOT1 → GND (直接接地)
画 PCB 时注意:晶振走线要短,电容靠近晶振放。电源线加粗,至少 20mil。我第一版板子晶振离芯片太远,死活不起振,后来查了半天才发现是寄生电容太大。
警告:STM32 的 IO 口耐压是 3.3V,别直接接 5V 设备。需要电平转换,否则芯片会烧。我烧过三片才长记性。
好了,这一章的内容就这些。STM32 入门其实不难,关键是动手。找块开发板,焊个最小系统,跑个点灯程序,比看一百页手册都管用。