STM32 ARM Cortex-M单片机嵌入式开发实战 - 第1节

1. 课程导入与开发环境搭建

做嵌入式开发这么多年,我接触过不少内核。从 8 位的 51 到 16 位的 MSP430,再到各种 ARM7/9。但真正让我觉得「顺手」的,还是 Cortex-M 系列。

说白了,Cortex-M 就是 ARM 专门为单片机打造的核。它不像 Cortex-A 那样跑 Linux,也不像 Cortex-R 那样搞实时控制。它的定位很明确——低功耗、低成本、高能效的微控制器。

我最早用 Cortex-M3 做一个工业采集器,那会儿还在想:这玩意儿能替代 8 位机吗?结果项目做完,性能绰绰有余,功耗还更低。嗯,从那以后我就再没碰过老架构了。

1.1.1 Cortex-M 家族谱系

ARM Cortex-M 家族目前主要分三代:

系列 架构 位宽 典型主频 代表芯片
Cortex-M0/M0+ ARMv6-M 32-bit 16~48 MHz STM32F0
Cortex-M3 ARMv7-M 32-bit 24~120 MHz STM32F1
Cortex-M4 ARMv7E-M 32-bit 24~180 MHz STM32F4
Cortex-M7 ARMv7E-M 32-bit 16~480 MHz STM32F7/H7
Cortex-M33 ARMv8-M 32-bit 最高 200 MHz STM32L5

你想想看,M0 和 M7 虽然都叫 Cortex-M,但性能差距能有几十倍。选型的时候千万别搞混了。

我的习惯: 做简单传感器采集,我首选 M0+,省电又便宜。需要做 FFT 或 PID 运算,至少上 M4。M7 嘛,一般跑图形界面或复杂算法才用。

1.2 STM32 选型指南

STM32 是意法半导体基于 Cortex-M 内核推出的 MCU 系列。市面上型号多到让人眼花缭乱。我记得刚入行那会儿,光看数据手册就看了三天。

其实选型没那么玄乎。抓住几个关键点就行:

1.2.1 按性能需求选

  • 简单控制(LED、按键、继电器):STM32F0 系列,M0 内核,够用
  • 中等复杂度(传感器采集、Modbus 通信):STM32F1 系列,M3 内核,经典款
  • 高性能计算(音频处理、电机控制):STM32F4 系列,M4 内核,带 DSP 和 FPU
  • 极致性能(图形界面、AI 推理):STM32H7 系列,M7 内核,双核都有
我曾经踩过的坑: 选型时只看了主频,没注意 Flash 和 RAM 大小。结果程序写了一半,发现 Flash 不够用。后来我学乖了——先估算代码体积,再留 30% 余量。

1.2.2 按外设需求选

STM32 的外设资源差异很大。我列几个常用的:

外设 说明 选型建议
USART/UART 串口通信 至少 2 路,方便调试和通信分离
SPI 高速外设接口 驱动 LCD、Flash 等需要
I2C 传感器总线 温湿度、加速度计常用
ADC 模拟量采集 注意分辨率和采样率
Timer/PWM 定时与脉宽调制 电机控制、呼吸灯必备
DMA 直接存储器访问 大数据传输时必选

举个例子:你要做一个 4 路电机驱动器,那至少需要 4 路 PWM 输出,外加编码器接口。这时候 STM32F103 的通用定时器就够用。但如果你要同时采集 8 路模拟信号,那得看 ADC 通道数够不够。

1.3 开发板与工具链

选好芯片型号,接下来就是开发板和工具链了。我个人建议新手从官方开发板入手,稳定可靠,资料也多。

1.3.1 常见开发板

  • Nucleo 系列:ST 官方出品,带 ST-Link 调试器,价格亲民。我推荐 Nucleo-F103RB 或 Nucleo-F411RE
  • Discovery 系列:功能更全,带屏幕或传感器,适合评估特定功能
  • 第三方的板子:正点原子、野火等,资料丰富,适合系统学习

我的建议: 第一块板子别买太贵的。Nucleo 系列 100 块左右,够你玩半年。等把基本外设都调通了,再考虑上 Discovery 或自己画板子。

1.3.2 工具链选择

STM32 的开发工具链,我这些年换了好几套。现在基本固定下来了:

工具 用途 我的推荐
IDE 代码编辑、编译、调试 STM32CubeIDE(免费,官方出品)
编译器 代码编译 ARM GCC(免费)或 IAR(商业)
调试器 下载与调试 ST-Link(Nucleo 板载)或 J-Link
配置工具 引脚分配、时钟配置 STM32CubeMX(图形化,自动生成代码)

你想想看,以前我们写 STM32 程序,得手动配寄存器,一个时钟树就要折腾半天。现在 CubeMX 点几下就生成了。效率提升不是一星半点。

避坑指南: 我曾经用 CubeMX 生成的代码直接跑,结果发现 SPI 时钟极性配反了。后来我养成了一个习惯——生成代码后,先看一遍生成的初始化函数,确认配置对不对。工具是辅助,别完全依赖它。

1.4 本章知识体系

下面这张图,是我自己总结的 STM32 入门知识结构。你跟着这个脉络走,不会乱。

STM32 入门知识体系 STM32 嵌入式开发知识体系 STM32 开发 硬件基础 内核架构 外设驱动 工具链 电源与时钟 复位与启动 GPIO 电路 寄存器模型 中断与异常 存储器映射 UART/SPI/I2C ADC/DAC 定时器/PWM IDE 配置 调试技巧 工程管理 学习路径建议 先掌握硬件基础和工具链配置 → 理解内核架构 → 逐个攻克外设驱动 每学一个外设,都动手写代码验证。光看不练,等于白学。

这张图把 STM32 开发分成了四大块。硬件基础是地基,内核架构是骨架,外设驱动是血肉,工具链是武器。四者缺一不可。

最后说一句: 嵌入式开发没有捷径。我见过太多人上来就啃数据手册,结果越看越懵。我的建议是——先动手,再理论。买个开发板,点个灯,跑个串口,慢慢你就找到感觉了。