声明
文中内容为观看 BiliBili 视频【STM32入门教程-2023版 细致讲解 中文字幕】后学习并扩展总结。
本文章为个人学习使用,版面观感若有不适请谅解,文中知识仅代表个人观点,若出现错误,欢迎各位批评指正。
一、STM32 简介
STM32 是意法半导体公司(STMicroelectronics)推出的 32 位微控制器(MCU)与微处理器(MPU)系列,以 ARM Cortex-M 内核为基础,凭借其高性能、低功耗、丰富外设及完善生态,成为嵌入式领域的主流选择,是一款经典的嵌入式微控制器。STM32 拥有多种型号及封装,按定位分为五大类:
| 类别 | 代表系列 | 特点 |
|---|---|---|
| 超低功耗 MCU | L0、L4、L5 等 | 极致功耗优化,长续航,适合穿戴设备、传感器节点 |
| 主流 MCU | F0、F1、G0、G4 等 | 平衡性能与成本,外设丰富,适配工业控制、消费电子等 |
| 高性能 MCU | F2、F4、F7、H7 等 | 高主频、大存储、强算力,支持复杂算法与高速接口 |
| 无线 MCU | WB、WL 等 | 集成蓝牙、LoRa 等无线通信模块,适用于物联网终端 |
| 嵌入式 MPU | MP1、MP2 系列 | 多核架构,支持 Linux/Android 系统,用于边缘计算、智能网关 |
二、ARM 介绍
ARM(Advanced RISC Machines)是全球主流的精简指令集(RISC)处理器架构与 IP 授权厂商,以低功耗、高能效、高可扩展性和 IP 授权商业模式为核心,支撑从嵌入式微控制器到超算 / 服务器的全场景计算,ARM 公司设计 ARM 内核,半导体厂商完善内核周边电路并生产芯片。
1984 年,发布第一款 ARM 架构处理器,并以 ARM+ 数字命名(ARM1 ~ ARM11),之后放弃数字命名改为 Cortex 命令 ARM 处理器产品,如 Cortex-A,Cortex-R,Cortex-M。
| 系列 | 特点 | 应用场景 |
|---|---|---|
| Cortex-A 系列 | 高性能 | 手机、平板、智能电视等 |
| Cortex-R 系列 | 实时性 | 汽车、工业控制、医疗设备等 |
| Cortex-M 系列 | 嵌入式 | 传感器、智能家居等 |
三、本次学习使用硬件(STM32F103C8T6)
STM32F103C8T6 是 STM32F1 系列经典入门款 32 位 MCU,搭载 72MHz 的 ARM Cortex-M3 内核,拥有 64KB Flash、20KB SRAM,采用 48 引脚 LQFP 封装,含 37 个可用 GPIO;外设丰富,配备 2 个 12 位 ADC、多类型定时器、3 个 USART、2 个 SPI、2 个 I2C,还有 USB 2.0 全速、CAN 2.0B 接口及 7 通道 DMA,工作电压 2.0V-3.6V,支持睡眠、停止、待机低功耗模式,适配 ST-Link 调试及主流开发环境,以高性价比成为嵌入式入门、低成本工业控制、智能家居节点等场景的主流选择。
- 片上资源 / 外设
| 英文缩写 | 名称 | 英文缩写 | 名称 |
|---|---|---|---|
| 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 主机接口 |
- 芯片的命名规则
| 序号 | 编码位含义 | 规则 / 具体定义 | 示例 |
|---|---|---|---|
| 1 | 产品系列 | 基于 ARM 核心的 32 位微控制器 | STM32 |
| 2 | 产品类型 | 通用类型 | F |
| 3 | 产品子系列 | 101 = 基本型 102 = USB 基本型,USB 2.0 全速设备 103 = 增强型 105 或 107 = 互联型 | 103 |
| 4 | 引脚数目 | T = 36 脚 C = 48 脚 R = 64 脚 V = 100 脚 Z = 144 脚 | C |
| 5 | 闪存存储器容量 | 4 = 16K 字节的闪存存储器 6 = 32K 字节的闪存存储器 8 = 64K 字节的闪存存储器 B = 128K 字节的闪存存储器 C = 256K 字节的闪存存储器 D = 384K 字节的闪存存储器 E = 512K 字节的闪存存储器 | 8 |
| 6 | 封装 | H = BGA T = LQFP U = VFQFPN Y = WLCSP64 | T |
| 7 | 温度范围 | 6 = 常规工业级温度范围,-40℃ ~ 85℃ 7 = 宽温工业级温度范围,-40℃~105℃ | 6 |
四、引脚定义
STM32F103C8T6 采用 LQFP48 封装,共 48 个引脚,整体可按功能划分为电源 / 复位 / 时钟、调试接口、通用 GPIO 及外设复用引脚四大类,各类引脚分工明确且兼顾功能灵活性。其中电源类引脚包含多组数字供电、地、备份电源及 ADC 参考电压引脚,保障芯片供电稳定与模拟采集精度;复位和启动引脚用于芯片复位及启动模式配置,时钟引脚支持外接晶振与时钟输出,调试引脚为 SWD 调试接口,满足程序下载与调试需求;剩余大部分为 GPIO 引脚,均可灵活配置为输入、输出模式,同时支持复用为 UART、I2C、SPI、ADC、TIM、USB 等丰富外设接口,适配各类通信、采集、控制场景,引脚配置可通过寄存器或 HAL 库完成,实际应用中需遵循供电、接地的规范要求,确保芯片稳定工作。下图所示为 STM32F103C8T6 芯片的引脚序号和引脚名称示意图(使用商家配套提供图片)。

| 引脚号 | 引脚名称 | 类型 | I / O 口电平 | 主功能 | 默认复用功能 | 重定义功能 |
|---|---|---|---|---|---|---|
| 1 | VBAT | S | VBAT | |||
| 2 | PC13-TAMPER-RTC | I/O | PC13 | TAMPER-RTC | ||
| 3 | PC14-OSC32_IN | I/O | PC14 | OSC32_IN | ||
| 4 | PC15-OSC32_OUT | I/O | PC15 | OSC32_OUT | ||
| 5 | OSC_IN | I | OSC_IN | |||
| 6 | OSC_OUT | O | OSC_OUT | |||
| 7 | NRST | I/O | NRST | |||
| 8 | VSSA | S | VSSA | |||
| 9 | VDDA | S | VDDA | |||
| 10 | PA0-WKUP | I/O | PA0 | WKKUP / USART2_CTS / ADC12_IN0 / TIM2_CH1_ETR | ||
| 11 | PA1 | I/O | PA1 | USART2_RTS / ADC12_IN1 / TIM2_CH2 | ||
| 12 | PA2 | I/O | PA2 | USART2_TX / ADC12_IN2 / TIM2_CH3 | ||
| 13 | PA3 | I/O | PA3 | USART2_RX / ADC12_IN3 / TIM2_CH4 | ||
| 14 | PA4 | I/O | PA4 | SPI1_NSS / USART2_CK / ADC12_IN4 | ||
| 15 | PA5 | I/O | PA5 | SPI1_SCK / ADC12_IN5 | ||
| 16 | PA6 | I/O | PA6 | SPI1_MISO / ADC12_IN6 / TIM3_CH1 | TIM1_BKIN | |
| 17 | PA7 | I/O | PA7 | SPI1_MOSI / ADC12_IN7 / TIM3_CH2 | TIM1_CH1N | |
| 18 | PB0 | I/O | PB0 | ADC12_IN8 / TIM3_CH3 | TIM1_CH2N | |
| 19 | PB1 | I/O | PB1 | ADC12_IN9 / TIM3_CH4 | TIM1_CH3N | |
| 20 | PB2 | I/O | FT | PB2 / BOOT1 | ||
| 21 | PB10 | I/O | FT | PB10 | I2C2_SCL / USART3_TX | TIM2_CH3 |
| 22 | PB11 | I/O | FT | PB11 | I2C2_SDA / USART3_RX | TIM2_CH4 |
| 23 | VSS_1 | S | VSS_1 | |||
| 24 | VDD_1 | S | VDD_1 | |||
| 25 | PB12 | I/O | FT | PB12 | SPI2_NSS / I2C2_SMBAI / USART3_CK / TIM1_BKIN | |
| 26 | PB13 | I/O | FT | PB13 | SPI2_SCK / USART3_CTS / TIM1_CH1N | |
| 27 | PB14 | I/O | FT | PB14 | SPI2/_MISO / USART3_RTS / TIM1_CH2N | |
| 28 | PB15 | I/O | FT | PB15 | SPI2_MOSI / TIM1_CH3N | |
| 29 | PA8 | I/O | FT | PA8 | USART1_CK / TIM1_CH1 / MCO | |
| 30 | PA9 | I/O | FT | PA9 | USART1_TX / TIM1_CH2 | |
| 31 | PA10 | I/O | FT | PA10 | USART1_RX / TIM1_CH3 | |
| 32 | PA11 | I/O | FT | PA11 | USART1_CTS / USBDM / CAN_RX / TIM1_CH4 | |
| 33 | PA12 | I/O | FT | PA12 | USART1_RTS / USBDP / CAN_TX / TIM1_ETR | |
| 34 | PA13 | I/O | FT | JTMS / SWDIO | PA13 | |
| 35 | VSS_2 | S | VSS_2 | |||
| 36 | VDD_2 | S | VDD_2 | |||
| 37 | PA14 | I/O | FT | JTCK / SWCLK | PA14 | |
| 38 | PA15 | I/O | FT | JTDI | TIM2_CH1_ETR / PA15 / SPI1_NSS | |
| 39 | PB3 | I/O | FT | JTDO | PB3 / TRACESWO / TIM2_CH2 / SPI1_SCK | |
| 40 | PB4 | I/O | FT | NJTRST | PB4 / TIM3_CH1 / SPI1_MISO | |
| 41 | PB5 | I/O | PB5 | I2C1_SMBAI | TIM3_CH2 / SPI1_MOSI | |
| 42 | PB6 | I/O | FT | PB6 | I2C1_SCL / TIM4_CH1 | USART1_TX |
| 43 | PB7 | I/O | FT | PB7 | I2C1_SDA / TIM4_CH2 | USART1_RX |
| 44 | BOOT0 | I | BOOT0 | |||
| 45 | PB8 | I/O | FT | PB8 | TIM4_CH3 | I2C1_SCL / CAN_RX |
| 46 | PB9 | I/O | FT | PB9 | TIM4_CH4 | I2C1_SDA / CAN_TX |
| 47 | VSS_3 | S | VSS_3 | |||
| 48 | VDD_3 | S |
五、启动配置
STM32 的启动配置是芯片上电 / 复位后第一个执行的硬件级配置逻辑,核心作用是指定芯片从哪个存储介质(如片内 Flash、片外 SRAM、系统存储器)读取并执行程序代码,同时初始化堆栈、中断向量表等最基础的运行环境。
设置启动配置的核心必要性在于:
- 适配不同开发场景:开发阶段可能需要从 SRAM 快速调试代码,量产阶段需从 Flash 运行固化程序,启动配置可灵活切换程序执行的存储源;
- 保证程序正确运行:STM32 的中断向量表、堆栈指针等核心数据需与程序存储位置匹配,错误的启动配置会导致程序无法加载、中断异常甚至芯片 "卡死";
- 支持固件升级:通过配置启动模式(如系统存储器模式),可调用芯片内置的 BootLoader 实现串口 / USB 烧录固件,是量产和维护的基础。
在 STM32F10xxx中,可以通过 BOOT[1:0]引脚选择三种不同启动模式:
| BOOT1 | BOOT0 | 启动模式 | 说明 |
|---|---|---|---|
| X | 0 | 主闪存存储器 | 主闪存存储器被选为启动区域 |
| 0 | 1 | 系统存储器 | 系统存储器被选为启动区域 |
| 1 | 0 | 内置 SRAM | 内置 SRAM 被选为启动区域 |
在系统复位后,SYSCLK 的第 4 个上升沿,BOOT 引脚的值将被锁存。用户可以通过设置 BOOT1 和 BOOT0 引脚的状态,来选择在复位后的启动模式。
文中部分知识参考:B 站 ------ 江协科技;百度百科