STM32 嵌入式常见名词解释(入门版)
适合刚开始学习 STM32 时查阅。先理解名词在做什么,再结合实验反复理解;不需要一次记住全部。
1. 整体认识
- 嵌入式系统(Embedded System):嵌入产品中、专门完成某项功能的计算机系统,例如电饭煲控制板、智能手环和无人机飞控。
- 单片机(MCU):把处理器、存储器和常用外设集成到一颗芯片中的微型计算机。STM32 是一大类单片机。
- STM32:意法半导体(ST)推出的 32 位 ARM 单片机系列。不同型号的引脚数、存储容量和外设数量不同。
- 开发板:将 MCU、电源、下载接口、按键、LED 等连接好的电路板,用于学习和原型开发。
- 芯片型号:芯片的完整名称,例如
STM32F103C8T6。其中通常包含系列、内核、Flash 容量和封装等信息。 - 数据手册(Datasheet):说明芯片电气参数、封装、引脚功能和使用限制的文档。
- 参考手册(Reference Manual):详细说明芯片内部外设、寄存器和工作机制的文档。
2. 电路基础
电压、电位和电流
- 电位:某一点相对参考点的电势高低。单片机电路通常把 GND(地) 当作 0 V 参考点。
- 电压(Voltage):两点之间的电位差,单位是伏特(V)。例如
3.3 V表示该点比 GND 高 3.3 V。 - 高电平 / 低电平:数字电路用一定范围的电压表示逻辑值。一般接近 3.3 V 为高电平(逻辑
1),接近 0 V 为低电平(逻辑0)。具体阈值以数据手册为准。 - 电流(Current):电荷流动的快慢,单位是安培(A)。电流必须有闭合回路才能流动。
- 电阻(Resistor):限制电流或分压的元件,单位是欧姆(
ohm,符号为Ω)。LED 前常串联限流电阻,避免电流过大。 - 功率(Power):电能消耗或转换的速度,常用关系式为
P = U x I,单位是瓦特(W)。 - VCC / VDD:电源正端的常见标记。STM32 的数字电源通常标为 VDD。
- GND / VSS:地线或电源负端的常见标记。模块通信时通常需要共地,即 GND 相连。
- 3.3 V 与 5 V:常见供电电压。许多 STM32 GPIO 工作在 3.3 V 逻辑,是否允许 5 V 输入必须查对应型号的数据手册。
常见连接方式
- 短路:本不应直接相连的两点被低阻连接。例如电源正负极直接相连,可能损坏电源或电路。
- 断路:电路没有形成闭合通路,电流无法正常流动。
- 上拉(Pull-up):通过电阻把信号线连接到高电平;无人驱动时,信号默认读为高电平。
- 下拉(Pull-down):通过电阻把信号线连接到低电平;无人驱动时,信号默认读为低电平。
- 悬空(Floating):引脚没有可靠接高电平或低电平。悬空输入容易受干扰,读数不确定。
- 去耦电容:放在芯片电源脚附近的电容,用来稳定瞬间变化的供电电压、滤除干扰。常见值为
0.1 uF。 - 复位(Reset):让 MCU 回到初始状态并重新开始运行。STM32 常有专用的
NRST复位引脚。
3. GPIO 与引脚模式
- 引脚(Pin):芯片与外部电路连接的物理端点。一个引脚常可复用为多种功能。
- 端口(Port):GPIO 的分组名称,例如
GPIOA、GPIOB;PA0表示 A 端口的第 0 号引脚。 - GPIO(General Purpose Input/Output):通用输入输出接口。它可以读取按键状态,也可以控制 LED、继电器等。
- 输入(Input):MCU 读取外部电平的模式,例如读取按键是否按下。
- 输出(Output):MCU 主动向外输出高、低电平的模式,例如控制 LED 点亮或熄灭。
- 模拟输入(Analog Input):让引脚接收连续变化的电压,通常交给 ADC 测量,例如读取电位器电压。
- 复用功能(Alternate Function,AF):把 GPIO 交给某个外设使用。例如把
PA9配置为 USART1 的发送脚。 - 推挽输出(Push-pull Output):引脚内部既能主动输出高电平,也能主动输出低电平。常用于 LED 和普通数字信号。
- 开漏输出(Open-drain Output):引脚只能主动拉低,不能主动拉高;要得到高电平,需要外接或启用上拉电阻。常见于 I2C。
- 开漏为什么要上拉:开漏输出高电平时相当于不驱动;没有上拉时线路会悬空,无法稳定读到逻辑
1。 - 输出速度(GPIO Speed):GPIO 电平翻转边沿的快慢,不是程序执行速度。边沿过快会带来更强的电磁干扰。
- 输入上拉 / 输入下拉:GPIO 输入模式中可启用芯片内部电阻,避免按键等信号线悬空。
4. MCU 的核心资源
- CPU 内核:负责执行指令的核心。许多 STM32 使用 ARM Cortex-M 系列内核,如 Cortex-M3、M4、M0+。
- 32 位:CPU 一次可高效处理 32 位宽的数据和地址;不等于所有变量都必须是 32 位。
- 寄存器(Register):芯片内部保存控制信息或状态的高速存储单元。配置 GPIO、定时器等外设,本质上就是读写相应寄存器。
- Flash:非易失性程序存储器。编译后的程序下载到这里,断电后内容仍保留。
- RAM / SRAM:运行时临时存储器,用于变量、数组和栈等;断电后内容丢失。
- 栈(Stack):用于函数调用、局部变量和返回地址的一块 RAM 区域。栈太小可能导致程序异常。
- 堆(Heap):用于动态内存分配的一块 RAM 区域,例如 C 语言的
malloc。初学阶段应谨慎使用动态分配。 - 程序计数器(PC):保存 CPU 下一条要执行的指令地址。
- 启动文件(Startup File):定义中断向量表、初始化栈并跳转到
main函数的底层文件。 - 固件(Firmware):运行在 MCU 内部的程序,通常就是编译并下载到 Flash 的代码。
5. 时钟与时间
- 时钟(Clock):周期性变化的节拍信号,CPU 和外设依靠它同步工作。可以把它理解为 MCU 的节拍器。
- 时钟频率:每秒产生多少个时钟周期,单位为赫兹(Hz)。
72 MHz表示每秒约 7200 万个周期。 - 系统时钟(SYSCLK):MCU 的主时钟来源,是 CPU 和许多总线时钟配置的基础。
- 外部高速时钟(HSE):来自芯片外部晶振或外部时钟源的高速时钟,通常更准确。
- 内部高速时钟(HSI):芯片内部 RC 振荡器产生的高速时钟,使用方便但精度通常低于外部晶振。
- 晶振(Crystal Oscillator):利用晶体振荡提供稳定频率的器件,例如 8 MHz 晶振。
- PLL(锁相环):可将较低频率的时钟倍频,得到更高的系统时钟。例如将 8 MHz 倍频到 72 MHz。
- 分频(Prescaler / Divider):把时钟频率按比例降低。例如 72 MHz 经 72 分频后得到 1 MHz。
- AHB / APB 总线:连接 CPU、存储器和外设的内部数据通道。STM32 常将外设分在 APB1、APB2 等总线上。
- 外设时钟使能:大多数外设默认不供时钟以节能。使用 GPIO、USART、TIM 等前,通常必须先开启对应时钟。
- 滴答定时器(SysTick):Cortex-M 内核自带的定时器,常用于产生 1 ms 系统节拍和延时。
- 延时(Delay):让程序等待一段时间。延时期间 CPU 可能无法处理其他任务;复杂项目更倾向使用定时器或 RTOS 调度。
6. 常见片上外设
- 定时器(TIM,Timer):按时钟计数的外设,可用于定时、计数、测频和产生 PWM 等。
- 计数器:定时器内部不断加或减的数值。达到设定值时可产生事件或中断。
- 预分频器(PSC):定时器的分频设置,用于降低进入计数器的时钟频率。
- 自动重装载值(ARR):定时器计数的上限。计数到该值后可重新从零开始。
- PWM(脉冲宽度调制):周期不变、通过改变高电平持续时间来调节平均能量的信号。常用于调光、调速和舵机控制。
- 占空比(Duty Cycle):一个 PWM 周期中高电平所占比例。例如 20% 占空比表示一个周期中 20% 时间为高电平。
- ADC(模数转换器):将连续变化的模拟电压转换为数字值,例如读取电位器的电压。
- 分辨率:ADC 可区分的等级数。12 位 ADC 的结果范围通常为
0到4095。 - DAC(数模转换器):把数字值转换为模拟电压。并非所有 STM32 型号都有 DAC。
- DMA(直接存储器访问):在外设和内存之间搬运数据,减少 CPU 重复搬运数据的负担。
- 看门狗(Watchdog):防止程序跑飞的硬件定时器。程序必须定期喂狗;若长时间未喂狗,芯片会自动复位。
- RTC(实时时钟):用于保存日期和时间,通常可由后备电池持续供电。
7. 中断、异常与程序流程
- 轮询(Polling):CPU 在循环中不断检查某个状态。例如反复读取按键引脚是否为低电平。实现简单,但会占用 CPU 时间。
- 中断(Interrupt):事件发生时,硬件暂停当前程序,转去执行对应的中断服务函数;处理完后再返回原程序。
- 中断服务函数(ISR):响应中断时执行的函数。在 STM32 工程中常见名称如
USART1_IRQHandler。 - 中断向量表:保存各种中断服务函数入口地址的表,由启动文件建立。
- 中断优先级:多个中断同时到来时的处理顺序。配置时应参考当前芯片和工程的规则。
- NVIC:Cortex-M 内核中负责管理中断使能和优先级的控制器。
- 回调函数(Callback):库在某个事件发生后自动调用的用户函数,例如 HAL 的定时器周期回调函数。
- 状态机:用有限个状态及其切换规则描述程序流程的方法,常用于按键、通信协议和设备控制。
8. 常见通信接口
- 串口(UART / USART):常用的异步串行通信接口,至少使用 TX、RX 和共地 GND。常用于打印调试信息。
- TX / RX:发送(Transmit)和接收(Receive)引脚。两个设备相连时通常 TX 接对方 RX,RX 接对方 TX。
- 波特率(Baud Rate):串口通信速率,常见为
9600、115200。通信双方必须设为一致。 - I2C:两线同步通信总线,使用 SCL(时钟线)和 SDA(数据线),两条线一般都需要上拉电阻。适合连接多个低速传感器。
- SPI:同步串行通信接口,常见信号有 SCK(时钟)、MOSI(主发从收)、MISO(主收从发)和 CS(片选)。速度通常比 I2C 高。
- CAN:抗干扰能力较强的差分通信总线,常用于汽车和工业场景;通常需要 CAN 收发器才能连接总线。
- USB:通用串行总线。STM32 可作为设备、主机或其他角色,配置相对复杂。
- 协议(Protocol):通信双方共同遵守的数据格式、时序和规则。串口只是传输方式,数据如何组织仍需要协议规定。
9. 开发、下载与调试
- IDE(集成开发环境):编写、编译、下载和调试代码的软件,例如 Keil MDK、STM32CubeIDE。
- 编译(Compile):把 C/C++ 源代码转换为机器可执行代码的过程。
- 链接(Link):把各个编译后的文件和库组合起来,生成最终程序文件的过程。
- 工程(Project):源代码、配置、库文件和构建规则的集合。
- 库(Library):厂商或他人提供的可复用代码。STM32 常见有标准外设库、HAL 库和 LL 库。
- HAL:ST 提供的硬件抽象库,接口较易理解,适合入门和快速开发。
- LL:比 HAL 更接近寄存器的底层库,代码更轻量,控制更直接。
- 寄存器开发:直接读写外设寄存器的开发方式。学习硬件原理很有帮助,但需要更熟悉参考手册。
- STM32CubeMX:ST 的图形化配置工具,可配置时钟、引脚和外设,并生成工程初始化代码。
- 烧录 / 下载:把编译生成的程序写入 MCU 的 Flash。
- ST-Link:ST 常用的下载和调试器,可通过 SWD 接口连接 STM32。
- SWD:ARM 的两线调试接口,常用 SWDIO、SWCLK 和 GND;可下载程序、单步执行和查看变量。
- 断点(Breakpoint):调试时让程序运行到某一行暂停,便于查看变量和执行流程。
- 单步执行:暂停后按语句或按函数逐步运行程序的调试方式。
- 串口打印:通过
printf等方式把变量和运行信息输出到串口助手,是最常用的调试手段之一。
10. 一个 LED 实验会用到什么
以“每隔一秒闪烁一次 LED”为例,可以把上述概念串起来:
- MCU 配置系统时钟,让 CPU 和外设有统一的工作节拍。
- 开启 LED 所在 GPIO 端口的外设时钟。
- 将 LED 引脚配置为推挽输出。
- 输出高或低电平,改变 LED 两端的电压,使其点亮或熄灭。不同开发板的 LED 可能是低电平点亮,应以原理图为准。
- 用 SysTick、定时器或延时函数等待约 1 秒后翻转一次引脚电平。
11. 入门时的实用原则
- 不确定引脚能否接 5 V 时,先查数据手册,不能只凭开发板丝印判断。
- 两个模块通信不正常时,先检查是否共地,再检查电源电压、连线和波特率。
- GPIO 输入不要悬空;按键常使用上拉或下拉配置。
- 使用一个外设前,先确认时钟是否开启、引脚是否正确配置、对应中断是否使能。
- 遇到看不懂的代码时,先问三个问题:它在配置哪个外设?写入的是什么状态?这个事件何时发生?
12. 推荐学习顺序
- LED、按键、蜂鸣器:认识 GPIO、电平、上拉下拉和推挽输出。
- 定时器与 PWM:认识时钟、计数、频率和占空比。
- 串口:认识 TX/RX、波特率和中断。
- ADC:认识模拟量、电压和采样。
- I2C / SPI:连接传感器,理解总线和通信协议。
- DMA、中断、RTOS:在已有基础上学习更高效的程序结构。