32 位微控制器概述
Author:余生
引言
在前面的学习中,相信前面学长有给大家介绍什么是嵌入式之类的知识了(没有的话去找他们),这边就不在赘述了。现在,我们就来学习嵌入式的一种重要的设备,STM32。
STM32 是由意法半导体设计、生产并广泛推广的一个基于 ARM Cortex-M 处理器内核的高性能、高集成度、低功耗的 32 位微控制器家族。微控制器 (Microcontroller Unit, MCU) 扮演着核心角色。它集成了处理器核心、存储器、各种输入 / 输出外设以及必要的功能模块于单一芯片上,构成一个完整的微型计算机系统。自推出以来,STM32 凭借其卓越的性能、丰富的产品线、强大的生态系统和出色的性价比,迅速成为工业控制、消费电子、物联网 (IoT)、汽车电子、医疗设备等众多领域的首选微控制器平台之一。
核心架构:ARM Cortex-M
下面的这一部分内容,对一个刚开始学的新生来说,可以算是一个相对枯燥,只有理论没有实践的普及功能,刚开始学的话看不懂很正常。但为了教程的完整性我还是写了,能看懂或者感兴趣的话就看一下,看不懂不想看的你就知道这是一款很好用的微处理器,具有性价比和方便操作的特点,这也是 stm32 为什么这么受欢迎的原因。
大致介绍
STM32 系列的核心是其采用的 ARM Cortex-M 处理器内核。ARM Cortex-M 是 ARM 公司专门为微控制器市场设计的处理器架构系列,具有以下关键特点:
- 32 位 RISC 架构: 提供强大的处理能力和高效的指令执行效率。
- 哈佛总线结构: 指令总线和数据总线分离,允许同时进行取指和数据访问,提高吞吐量。
- 低功耗设计: 提供多种睡眠模式 (Sleep, Stop, Standby),并支持快速唤醒,非常适合电池供电应用。
- 确定性的中断响应 (NVIC): 内嵌的嵌套向量中断控制器提供低延迟、可抢占、优先级管理的中断处理能力,满足实时性要求。
- Thumb/Thumb-2 指令集: 提供高代码密度(减少程序存储空间需求)和良好性能的平衡。
- 可选的内存保护单元 (MPU): 增强系统稳定性和安全性(尤其在高阶型号中)。
STM32 家族覆盖了从入门级到高性能的多个 Cortex-M 子系列内核:
Cortex-M0/M0+: 超低功耗、低成本,适用于对成本和功耗极度敏感的简单应用。
Cortex-M3: 性能与效率的平衡点,提供增强的中断处理、系统滴答定时器 (SysTick) 和更优的代码密度,是经典且广泛应用的系列核心。
Cortex-M4: 在 M3 基础上增加了单精度硬件浮点单元 (FPU) 和 DSP 指令集,显著提升数字信号处理能力,适用于需要复杂计算的应用(如电机控制、音频处理)。
Cortex-M7: 高性能内核,具有更高主频、双精度 FPU、更深的流水线、指令 / 数据缓存 (Cache),支持紧耦合内存 (TCM),适用于图形显示、高级音频、复杂算法等。
Cortex-M33: 融合性能与安全性,提供 TrustZone 硬件安全隔离技术,适用于物联网安全应用。
Cortex-M55 (未来 / 特定系列): 提供更强的 AI/ML 处理能力。
STM32 系列产品的主要特点与优势
STM32 不仅仅是一个内核,而是一个庞大且多样化的产品家族,其共同优势体现在:
- 极其丰富的产品线
- 高性能与高集成度
- 卓越的低功耗特性
- 强大的开发生态系统
- 可靠性与安全性
这边重点讲一下开发生态系统这一点:
stm32 有三种开发方式,分别为寄存器开发,标准库开发,以及 hal 库开发,但无一例外,三种开发方式都是用 c 语言来开发的,调用的库不同而已
寄存器开发(Register-Level)
- 原理:直接操作芯片寄存器(参考《参考手册》寄存器映射表)
- 代码风格:
//c语言
// 示例:点亮PA5引脚LED(F103C8T6)
RCC->APB2ENR |= 1<<2; // 开启GPIOA时钟
GPIOA->CRL &= ~(0xF<<20); // 清除PA5配置位
GPIOA->CRL |= (0x01<<20); // 设置PA5为推挽输出
GPIOA->ODR |= 1<<5; // 输出高电平
2
3
4
5
6
- 优点:
- 代码执行效率极高,无额外开销
- 深入理解硬件工作原理(教学核心价值)
- 缺点:
- 开发效率低(需查阅数百页手册)
- 可移植性差(更换芯片需重写底层)
标准外设库(Standard Peripheral Library, SPL)
- 状态:官方已淘汰(2015 年后停止更新),但老项目仍在使用
- 代码风格:
//c
GPIO_InitTypeDef gpio;
gpio.GPIO_Pin = GPIO_Pin_5;
gpio.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &gpio);
GPIO_SetBits(GPIOA, GPIO_Pin_5);
2
3
4
5
6
- 优点:
- 硬件控制透明化(省去计算寄存器位偏移,但未像 HAL 完全隐藏硬件逻辑)
- 执行效率高(无抽象性调用层,函数调用开销减少)
- 局限:
- 仅支持旧型号(如 F1/F4 系列)
- 外设封装不统一,新功能缺失
硬件抽象层库(Hardware Abstraction Layer, HAL)
- 现代开发主流:ST 官方强力维护,支持全系列芯片
- 开发流程:
- CubeMX 配置生成初始化代码
- 调用 HAL API 实现功能
- 代码风格
//c
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // 一键控制LED
2
- 优势:
- 跨系列兼容(F1/F4/L4/H7 代码通用)
- 集成高级功能(DMA / 中断回调 / 超时管理)
- 降低迁移成本和学习曲线
- 争议点:
- 代码体积较大(可通过 LL 库混合编程优化)
- 过度封装可能掩盖硬件细节
而在这次的基础课程模块中,我们将跟着江科协的视频一起来学习。开发方式我们选择标准库。这里的教程将会作为一个补充,起到一个帮助你预习,复习的作用。如果你有一定的基础,也可以把这个当成一个字典来使用。
感谢
感谢江科协大佬