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 选型方法:我踩过的坑

选型这事儿,说起来简单,做起来全是细节。我总结了一套自己的流程:

  1. 算算你需要多少引脚。GPIO、ADC、PWM、通信接口,列个清单。我习惯多留 20% 的余量,方便后期改版。
  2. 看存储够不够。Flash 放代码,SRAM 放变量。如果你要用 RTOS,RAM 至少 64KB 起步。我曾经在 F103C8T6 上硬塞 FreeRTOS,64KB Flash 差点爆了。
  3. 确认封装。LQFP 好焊接,适合样机。BGA 省空间,但打样麻烦。个人建议新手先用 LQFP。
  4. 查供货和价格。别选冷门型号,否则买不到货。我吃过这个亏,项目做到一半芯片涨价三倍,老板差点让我走人。
需求场景 推荐系列 典型型号 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 内核 AHB/APB 总线矩阵 Flash 存储器 SRAM GPIO / 定时器 USART / SPI / I2C ADC / DAC USB / CAN / DMA 所有外设通过总线矩阵与内核和存储器连接,DMA 可绕过 CPU 直接搬运数据

说白了,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 入门其实不难,关键是动手。找块开发板,焊个最小系统,跑个点灯程序,比看一百页手册都管用。