Published
- 17 min read
[学习笔记]从零开始的STM32学习笔记(2)

STM32 学习笔记(2):STM32 简介与开发入门
STM32:嵌入式领域的明星
STM32 是 ST(意法半导体)公司基于 ARM Cortex-M 内核开发的 32 位微控制器。让我们逐个解析这个名字:
- ST: 意法半导体,著名的半导体制造商。
- M: Microcontroller 的缩写,即微控制器,也就是我们常说的单片机。
- 32: 表示这是一款 32 位单片机,相比于传统的 8 位单片机(如 51 单片机),STM32 拥有更强大的性能。ST 公司也有 8 位单片机产品,名为 STM8。
- ARM Cortex-M 内核: 这是 STM32 的核心部分,由 ARM 公司设计。它在 STM32 中扮演着 CPU 的角色,负责执行程序指令、进行运算等。
可以把 ARM 公司类比为电脑领域的 Intel 或 AMD,它们设计 CPU 架构,而 ST 公司则像电脑厂商一样,采用 ARM 的内核来制造自己的芯片产品。其他半导体厂商也可以购买 ARM 内核授权来生产自己的基于 ARM 内核的芯片。
STM32 的广泛应用
STM32 常应用于嵌入式领域,例如:
- 智能车: 制作循迹小车,读取光电传感器或摄像头数据,控制电机运动。
- 无人机: 读取陀螺仪数据,根据控制算法控制电机转速,保持飞行稳定。
- 机器人: 驱动舵机控制机器人关节运动。
- 无线通信: 连接 2.4G 无线模块、蓝牙或 WiFi 模块,实现无线通信功能。
- 物联网: 利用无线模块进行通信,例如通过蓝牙、WiFi 或 NB-IoT 等,驱动继电器控制 220V 电路。
- 工业控制: 在工业自动化领域中,PLC(可编程逻辑控制器)内部的主控芯片很多都是 STM32。
- 娱乐电子产品: 制作 LED 流水灯等趣味电子产品。
STM32 的家族成员
STM32 家族庞大,主要分为四个系列:
- 高性能系列: 如 F2、F4、F7、H7 等,拥有更高的性能,例如 STM32F2 系列具备 398 的 CoreMark 跑分和 120MHz 主频的 Cortex-M3 内核,而 H7 系列更是拥有 3224 的内核跑分和 550MHz 的 Cortex-M7 + 240MHz 的 Cortex-M4 双核配置。
- 主流系列: 如 F1 系列,性能适中,应用广泛。本教程使用的就是 STM32F103C8T6,它具备 177 的内核跑分和 72MHz 的 Cortex-M3 内核。
- 超低功耗系列: 如 L0、L1、L4、L5 等,适用于对功耗敏感的应用。
- 无线系列: 如 WL 和 WB 系列,集成了无线通信功能。
不同的系列针对不同的应用场景,提供了多样化的选择。这些系列都属于 STM32 家族,因此在不同系列之间切换相对容易。
深入了解 ARM
STM32 使用了 ARM Cortex-M 内核,那么 ARM 到底是什么呢?
- ARM 既指 ARM 公司,也指 ARM 处理器内核。 ARM 公司是全球领先的半导体知识产权(IP)提供商,它本身不生产芯片实体,而是设计 ARM 内核架构,并将其授权给各大半导体厂商。
- ARM 的商业模式: 这种只设计 IP,不生产实体的模式,是一种开放合作、利益共享、风险共担的商业模式。全球超过 95% 的智能手机和平板电脑都采用了 ARM 架构,足见其成功之处。
- ARM 内核的优势: ARM 内核性能出色,功耗低,这也是它广受欢迎的重要原因。
- ARM 与半导体厂商的关系: ARM 公司设计内核,半导体厂商则完善内核周边的电路,并生产芯片。可以将 ARM 内核比作芯片的 CPU,而周边的存储器、外设等则由半导体厂商来设计和集成。
ARM 内核家族
ARM 公司针对不同的应用场景,推出了多种内核型号:
-
经典 ARM 处理器: 如 ARM7、ARM9、ARM11 等,是较早期的内核版本。
-
Cortex 系列: ARM11 之后推出的新系列,包括 Cortex-A、Cortex-R 和 Cortex-M 三个子系列,这三个系列的字母组合起来正好是 ARM。
- Cortex-A 系列: A 代表 Application,主要面向高端应用型领域,例如智能手机。苹果、高通、联发科等手机芯片厂商都采用 ARM Cortex-A 系列内核。A 系列性能强大,发展迅速,型号众多。最近,基于 ARM 架构的 M1 芯片更是将 ARM 架构引入了电脑领域。
- Cortex-R 系列: R 代表 Real-time,主要面向实时性要求高的场景,例如硬盘控制器。R 系列应用相对较少,内核型号也不多。
- Cortex-M 系列: M 代表 Microcontroller,主要面向单片机领域。STM32 使用的就是 Cortex-M 系列内核,包括 M0、M1、M3、M4 等型号,不同型号的内核性能也有所差异。
本教程使用的 STM32F103C8T6
本教程将使用 STM32F103C8T6 这款芯片,它的主要参数如下:
- 系列: 主流系列 STM32F1
- 内核: ARM Cortex-M3
- 主频: 72MHz
- RAM: 20K(SRAM)
- ROM: 64K(Flash)
- 供电电压: 2.0~3.6V,标准 3.3V 供电(注意:5V 电压不能直接给 STM32 供电,需要降压到 3.3V)
- 封装: LQFP48(48 个引脚)
片上资源/外设
STM32F1 系列拥有丰富的片上资源,也称为外设(Peripheral)。我们可以通过编程来配置这些外设,实现各种功能。
以下是 STM32F1 系列的主要外设:
英文缩写 | 名称 | 英文缩写 | 名称 |
---|---|---|---|
NVIC | 嵌套向量中断控制器 | CAN | CAN 通信 |
SysTick | 系统滴答定时器 | USB | USB 通信 |
RCC | 复位和时钟控制 | RTC | 实时时钟 |
GPIO | 通用 IO 口 | CRC | CRC 校验 |
AFIO | 复用 IO 口 | PWR | 电源控制 |
EXTI | 外部中断 | BKP | 备份寄存器 |
TIM | 定时器 | IWDG | 独立看门狗 |
ADC | 模数转换器 | WWDG | 窗口看门狗 |
DMA | 直接内存访问 | DAC | 数模转换器 |
USART | 同步/异步串口通信 | SDIO | SD 卡接口 |
I2C | I2C 通信 | FSMC | 可变静态存储控制器 |
SPI | SPI 通信 | USB OTG | USB 主机接口 |
需要注意的是,并非所有 STM32F1 系列的芯片都拥有全部外设。 例如,STM32F103C8T6 就没有 FSMC、SDIO、USB OTG 这三个外设。具体的外设配置需要查阅对应芯片的数据手册。
外设简介:
- NVIC (Nested Vectored Interrupt Controller): 嵌套向量中断控制器,用于管理中断,配置中断优先级等。
- SysTick: 系统滴答定时器,内核中的一个定时器,可以提供定时服务,例如在操作系统中进行任务切换。
- RCC (Reset and Clock Control): 复位和时钟控制,用于配置系统时钟,使能各个模块的时钟。在 STM32 中,外设在上电时默认是不工作的,需要先使用 RCC 使能外设的时钟才能正常使用。
- GPIO (General Purpose Input Output): 通用 IO 口,最基本的功能,用于点亮 LED、读取按键等。
- AFIO (Alternate Function I/O): 复用 IO 口,用于配置复用功能端口的重定义和中断端口。
- EXTI (External Interrupt): 外部中断,配置好后,当引脚电平变化时,可以触发中断。
- TIM (Timer): 定时器,STM32 中最常用、功能最多的外设之一。分为高级定时器、通用定时器和基本定时器三种类型。可以用于定时中断、测量频率、生成 PWM 波形、配置成编码器接口等。
- ADC (Analog-to-Digital Converter): 模数转换器,内置 12 位 ADC,可以直接读取 IO 口的模拟电压值。
- DMA (Direct Memory Access): 直接内存访问,可以帮助 CPU 搬运大量数据。
- USART (Universal Synchronous/Asynchronous Receiver/Transmitter): 同步/异步串口,平时使用的 UART 是异步串口,USART 既支持异步串口也支持同步串口。
- I2C 和 SPI: 两种常用的通信协议,STM32 内置了它们的控制器,可以使用硬件输出时序波形。
- CAN 和 USB: 也是常用的通信协议,CAN 通常用于汽车领域,USB 则应用更加广泛。
- RTC (Real Time Clock): 实时时钟,用于计时,可以接外部备用电池,掉电也能正常运行。
- CRC 校验: 一种数据校验方式,用于判断数据的正确性。
- PWR (Power Control): 电源控制,可以让芯片进入睡眠模式等状态,达到省电的目的。
- BKP (Backup Register): 备份寄存器,系统掉电时仍可由备用电池保持数据。
- 看门狗: 当单片机因为干扰死机或程序设计不合理出现死循环时,看门狗可以及时复位芯片,保证系统稳定。
- DAC (Digital-to-Analog Converter): 数模转换器,可以在 IO 口直接输出模拟电压,是 ADC 的逆过程。
- SDIO (Secure Digital Input/Output): SD 卡接口,用于读取 SD 卡。
- FSMC (Flexible Static Memory Controller): 可变静态存储控制器,用于扩展内存或配置成其他总线协议。
- USB OTG (USB On-The-Go): USB 主机接口,可以让 STM32 作为 USB 主机去读取其他 USB 设备。
芯片命名规则
了解 STM32 芯片的命名规则可以帮助我们快速识别芯片的参数。以 STM32F103C8T6 为例:
字母/数字 | 含义 |
---|---|
STM32 | 基于 ARM 内核的 32 位微控制器 |
F | 通用类型 |
103 | 增强型(还有基本型、USB 型、互联型等) |
C | 48 引脚(还有 36、64、100、144 引脚等) |
8 | Flash 容量 64K(还有 16K、32K、128K、256K 等) |
T | LQFP 封装 |
6 | 温度范围 -40~85 摄氏度 |
例如,STM32F103RCT6 表示 64 引脚、256K Flash、LQFP 封装、温度范围 -40~85 摄氏度的 STM32F103 芯片。
系统结构
STM32F103C8T6 的系统结构比较复杂,我们可以将其分为四个部分:
- 内核 (Cortex-M3): 引出了 ICode 指令总线、DCode 数据总线和 System 系统总线。ICode 和 DCode 主要连接 Flash,用于加载程序指令和数据。System 总线连接到 RAM、FSMC、AHB 系统总线等。
- AHB 系统总线: AHB 的意思是先进高性能总线,上面挂载了最基本的或性能比较高的外设,例如 RCC、SDIO 等。AHB 通过两个桥接连接到 APB2 和 APB1 两个外设总线。APB 的意思是先进外设总线,用于连接一般的外设。
- APB2 和 APB1 总线: APB2 的性能比 APB1 高一些,APB2 的频率通常与 AHB 相同,为 72MHz,而 APB1 通常为 36MHz。APB2 上连接了 GPIO、USART1、SPI1、TIM1、TIM8、ADC、EXTI、AFIO 等,而 APB1 上连接了 USART2/3/4/5、TIM2/3/4/5、DAC、PWR、BKP 等。
- DMA: 可以将其看作 CPU 的小秘书,用于搬运大量数据,减轻 CPU 的负担。DMA 通过 DMA 总线连接到总线矩阵,可以访问外设。
引脚定义
引脚定义对于使用芯片至关重要。通过查阅芯片的数据手册,可以获得详细的引脚定义表。这里列出一些关键引脚:
- 电源相关 (红色标记): VBAT(备用电池供电)、VSS(负极/GND)、VDD(正极/3.3V)。
- 最小系统相关 (蓝色标记): OSC_IN/OSC_OUT(主晶振)、OSC32_IN/OSC32_OUT(RTC 晶振)、NRST(复位)、BOOT0/BOOT1(启动模式配置)。
- IO 口功能 (绿色标记): PA0
PA15、PB0PB15 等,这些引脚可以配置成不同的功能。
需要注意的是:
- PA13 和 PA14 默认是 SWD 调试端口,如果使用 ST-Link 下载调试程序,需要占用这两个 IO 口。
- PA15、PB3 和 PB4 默认是 JTAG 调试端口,但在使用 SWD 调试方式时,可以在程序中将它们配置成普通 IO 口使用。
启动配置
STM32 可以通过配置 BOOT0 和 BOOT1 引脚来选择三种启动模式:
BOOT1 | BOOT0 | 启动模式 | 说明 |
---|---|---|---|
X | 0 | 主闪存存储器 | 从 Flash 启动,执行 Flash 中的程序,这是最常用的模式。 |
0 | 1 | 系统存储器 | 从系统存储器启动,该存储器中存放了 ST 官方的 Bootloader 程序,用于串口下载程序。 |
1 | 1 | 内置 SRAM | 从 SRAM 启动,主要用于程序调试。 |
需要注意的是:
- BOOT 引脚的值在上电复位后的一瞬间有效,之后就无效了。
- 如果将 PA13、PA14、PA15、PB3、PB4 全部配置成了普通 IO 口,会导致无法通过调试端口下载程序,此时需要使用串口下载,并将 BOOT0 配置为 1,BOOT1 配置为 0。
最小系统电路
最小系统电路是指能让单片机正常工作的最基本的电路。STM32 的最小系统电路主要包括:
- 电源电路: 为 STM32 的各个电源引脚 (VDD、VSS、VBAT) 提供稳定的供电。通常需要在 VDD 和 VSS 之间连接滤波电容,以保证供电电压的稳定。如果需要使用 RTC 的掉电保持功能,还需要连接 VBAT 备用电池。
- 晶振电路: 通常使用 8MHz 的主晶振,并为晶振的两个引脚分别连接一个 20pF 的起振电容到地。如果需要使用 RTC 功能,还需要连接 32.768kHz 的 RTC 晶振。
- 复位电路: 由一个 10k 电阻和一个 0.1uF 电容组成,为 STM32 提供复位信号。可以在电容左边并联一个按键,实现手动复位。
- 启动配置电路: 通过跳线帽或拨码开关,配置 BOOT0 和 BOOT1 引脚的电平,选择启动模式。
- 下载电路: 如果使用 ST-Link 下载程序,需要将 SWDIO 和 SWCLK 这两个引脚引出来,方便接线。
最小系统板已经集成了这些电路,可以直接使用。如果自己设计电路,可以参考最小系统板的原理图。
总结
本节学习笔记介绍了 STM32 的基本情况、ARM 内核、片上资源、命名规则、系统结构、引脚定义、启动配置和最小系统电路等内容。这些都是 STM32 开发的基础知识。
在后续的学习笔记中,我们将学习如何使用 Keil 软件进行 STM32 开发,并逐步深入学习各个外设的使用。
感谢大家的阅读,我们下期再见!