tags: [source-summary] type: source source: "尚硅谷嵌入式技术之STM32单片机(基础篇)V1.0.2 — 第1~3章:STM32概述、开发工具、开发板与最小系统" author: "尚硅谷研究院" date: 2026-07-15
用生活理解:如果把 STM32 比作一台微型电脑——ARM Cortex-M3 内核就像 CPU,Keil MDK 就是 Visual Studio,开发板就是一台迷你主机,最小系统相当于电脑能开机的最低配置(主板 + CPU + 内存 + 电源)。
ARM(Advanced RISC Machines)是一家英国芯片设计公司,只出售知识产权(IP)授权,不生产芯片。ST(意法半导体)购买了 ARM 的 IP 授权,在 Cortex-M3 内核基础上添加自己的外设(GPIO、USART、I2C、CAN 等),造出了 STM32 系列 MCU。
参考:《Cortex-M3 权威指南》第2章 — Cortex-M3 内核架构
ARM Cortex-M3 核心特性:
STM32 系列命名反映了芯片的各个特性。以我们使用的 STM32F103ZET6 为例:
STM32 F 1 03 Z E T 6
① ② ③ ④ ⑤ ⑥ ⑦ ⑧
| 位置 | 含义 | 我们的值 | 说明 |
|---|---|---|---|
| ① | 产品系列 | STM32 | 标准32位MCU |
| ② | 类型 | F | 通用型(F = 基础型,L = 低功耗,H = 高性能) |
| ③ | 子系列 | 1 | Cortex-M3 内核 |
| ④ | 具体型号 | 03 | 增强型(03 = 增强型,01 = 基本型) |
| ⑤ | 引脚数 | Z | Z = 144脚(L=48,C=48/49,R=64,M=80,V=100,Z=144,I=176) |
| ⑥ | Flash大小 | E | E = 512KB(B=128,C=256,D=384,E=512) |
| ⑦ | 封装 | T | T = LQFP(表贴封装) |
| ⑧ | 温度 | 6 | 6 = -40~85°C(工业级) |
参考:STM32F103xCDE 数据手册 §1(器件概览与选型表) 数据手册命名规则从 ST 官网下载,不同系列命名有所差异。
STM32 选型速查:
目前 STM32 开发有三种方式:
| 方式 | 特点 | 适用人群 |
|---|---|---|
| 寄存器 | 直接操作内存地址,代码最小,最深理解硬件 | 学习硬件原理、裸机开发 |
| 标准库(StdPeriph) | ST 官方封装寄存器操作,函数名规范 | 经典项目,教程最多 |
| HAL库 + CubeMX | 图形化配置,移植性好,代码量大 | 快速原型、多平台移植 |
本教程以寄存器 + HAL 库双版并行教学,既能深入硬件底层,又能快速实际开发。
KEIL 是 ARM 公司推出的基于 ARM 平台的 C/C++ IDE,支持代码编写、编译、下载、调试一体化。
下载地址:https://www.keil.com/download/product/
Keil MDK 不内置 STM32 芯片支持,需要手动安装芯片支持包(Device Family Pack):
下载地址:https://www.keil.arm.com/devices/ 搜索 STM32F103ZE
安装方式二选一:
Keil.STM32F1xx_DFP.xxx.pack 后双击离线安装(推荐)最新 Keil MDK 默认使用 Compiler version 6,但与旧的 core_cm3.c 文件不兼容。
解决方法:安装 Compiler version 5
下载地址:https://developer.arm.com/downloads/view/ACOMP5
解压后放到 Keil MDK 安装目录下的 ARM/ARMCC/ 文件夹。
然后在 Keil 项目配置中切换编译器版本为 V5。
Keil MDK 需要注册(License),否则代码大小限制在 32KB 以内。
我们使用的是一款 STM32F103ZET6 开发板,板载资源包括:
STM32 正常工作的最小外围电路包括 5 个部分:
| 部件 | 功能 | 原理图位置 |
|---|---|---|
| STM32芯片 | 主控制器 STM32F103ZET6 | 原理图第1页 |
| 电源 | 3.3V 供电,USB Type-C → AMS1117-3.3 | 原理图电源部分 |
| 时钟 | 8MHz HSE + 32.768KHz LSE 晶振 | 原理图晶振部分 |
| 复位 | NRST + 按键 + RC 电路 | 原理图复位部分 |
| 下载调试 | SWD 接口(SWDIO/SWCLK) | 原理图调试部分 |
STM32F103ZET6 采用 LQFP144 封装,共有 144 个引脚,包括:
参考:STM32F103ZET6 数据手册 §3(引脚定义与功能表)
采用双路供电方案:
方案一:USB Type-C(5V)→ AMS1117-3.3 稳压芯片 → 3.3V 方案二:ST-Link 直接提供 3.3V 供电
参考:原理图电源部分,AMS1117 数据手册 注意:AMS1117 最大输出电流 800mA,适合大多数应用。
STM32 提供两路外部时钟:
内部也集成了 RC 振荡器(HSI 8MHz、LSI 40KHz),精度较低但无需外部元件。
参考:原理图晶振部分;参考手册 §7.2(时钟特性)
NRST 引脚通过上拉电阻连接到 VCC,按下复位按键将 NRST 拉低使芯片复位。 RC 电路提供上电复位延时(确保电源稳定后再释放复位)。
参考:原理图复位部分;参考手册 §7.1(复位与电源控制)
支持两种下载方式:
| 方式 | 接口 | 特点 |
|---|---|---|
| ST-Link SWD | SWDIO + SWCLK + VCC + GND(4线) | 可调试,速度快 |
| 串口 ISP | USART1(PA9/PA10)+ FlyMcu 软件 | 仅下载,无需专用工具 |
参考:原理图调试部分;STM32 系统存储器启动模式文档
一个典型的 STM32 寄存器/标准库项目目录结构如下:
Project_Name/
├── Start/ # 启动文件 + 内核文件
│ ├── startup_stm32f10x_hd.s # 启动文件(HD = 高密度)
│ ├── stm32f10x.h # 外设寄存器结构体定义
│ ├── system_stm32f1xx.c # 系统初始化(SystemInit)
│ └── core_cm3.h # Cortex-M3 内核定义
├── User/ # 用户代码
│ └── main.c # 主函数
├── Hardware/ # 外设驱动(逐步创建)
│ ├── LED/
│ └── KEY/
├── Library/ # 标准库文件(使用标准库时)
├── System/ # 系统配置文件
└── Objects/ # 编译输出(Keil 自动生成)
启动文件根据芯片 Flash 大小的不同,选择不同的版本:
| 启动文件 | 适用芯片 | 对应 Flash 范围 |
|---|---|---|
startup_stm32f10x_ld.s |
低密度 | 16~32KB |
startup_stm32f10x_md.s |
中密度 | 64~128KB |
startup_stm32f10x_hd.s |
高密度 | 256~512KB |
注意:STM32F103ZET6 的 Flash 是 512KB → 选择
startup_stm32f10x_hd.s
启动文件的作用:
SystemInit() 配置时钟main() 函数下载标准外设库用于提取启动文件、系统文件和头文件:
https://www.st.com/zh/embedded-software/stm32-standard-peripheral-libraries/products.html
USE_STDPERIPH_DRIVERKeil MDK 安装目录自带的 ST-LINK USB 驱动位置:
Keil_v5\ARM\STLink\USBDriver\dpinst_amd64.exe
如果 Keil 提示 ST-Link 固件版本过低,需要升级: Keil → Flash → Configure Flash Tools → Debug → Settings → Firmware Upgrade
| 概念 | 说明 | 参考 |
|---|---|---|
| ARM Cortex-M3 | 32位RISC内核,3级流水线,Thumb-2指令集 | Cortex-M3权威指南§2 |
| STM32F103ZET6 | 144脚,512KB Flash,72MHz | 数据手册§1 |
| 最小系统 | 芯片+电源+时钟+复位+下载调试 | 原理图第1~3页 |
| Keil MDK | ARM平台IDE,含编译/下载/调试 | — |
| startup_hd.s | 高密度芯片的启动文件 | — |
| ST-Link SWD | 4线调试接口,支持烧录+调试 | — |
.pack 文件后双击离线安装ld/md/hd 版本