---
tags: [source-summary]
type: source
source: "尚硅谷嵌入式技术之STM32单片机(基础篇)V1.0.2 — 第1~3章:STM32概述、开发工具、开发板与最小系统"
author: "尚硅谷研究院"
date: 2026-07-15
created: 2026-07-15
---
# STM32概述与开发环境搭建
> **用生活理解**:如果把 STM32 比作一台微型电脑——ARM Cortex-M3 内核就像 CPU,Keil MDK 就是 Visual Studio,开发板就是一台迷你主机,最小系统相当于电脑能开机的最低配置(主板 + CPU + 内存 + 电源)。
---
## STM32概述
### 关于ARM内核
ARM(Advanced RISC Machines)是一家英国芯片设计公司,只出售**知识产权(IP)授权**,不生产芯片。ST(意法半导体)购买了 ARM 的 IP 授权,在 Cortex-M3 内核基础上添加自己的外设(GPIO、USART、I2C、CAN 等),造出了 STM32 系列 MCU。
> **参考**:《Cortex-M3 权威指南》第2章 — Cortex-M3 内核架构
ARM Cortex-M3 核心特性:
- 32位 RISC 处理器(一次处理 32 位数据)
- 3级流水线(取指 → 译码 → 执行)
- Thumb-2 指令集(16/32位混合指令,兼顾代码密度和性能)
- 内置 NVIC(嵌套向量中断控制器),支持 240 个中断源
- 低功耗设计,适合嵌入式应用
### 什么是STM32
- **S**T — STMicroelectronics(意法半导体)
- **T** — 32位微控制器(实际是 ARM Cortex-M 系列内核)
- 基于 ARM Cortex-M 内核的 32 位 MCU 产品线
### STM32应用场景
- 工业自动化(PLC、电机控制)
- 物联网终端(传感器采集、无线通信)
- 消费电子(智能家电、无人机)
- 医疗设备(便携式监护仪)
- 汽车电子(CAN 总线、车窗控制)
### STM32系列MCU命名规则
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 选型速查**:
- 访问 [ST 官网 MCU 选型器](https://www.st.com/en/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus.html)
### STM32开发方式
目前 STM32 开发有三种方式:
| 方式 | 特点 | 适用人群 |
| ----------------------- | ---------------------------------------- | ---------------------- |
| **寄存器** | 直接操作内存地址,代码最小,最深理解硬件 | 学习硬件原理、裸机开发 |
| **标准库(StdPeriph)** | ST 官方封装寄存器操作,函数名规范 | 经典项目,教程最多 |
| **HAL库 + CubeMX** | 图形化配置,移植性好,代码量大 | 快速原型、多平台移植 |
本教程以**寄存器 + HAL 库双版并行**教学,既能深入硬件底层,又能快速实际开发。
---
## 开发环境搭建
### Keil MDK 介绍
KEIL 是 ARM 公司推出的基于 ARM 平台的 C/C++ IDE,支持代码编写、编译、下载、调试一体化。
### 下载与安装
**下载地址**:
### 离线安装芯片支持包
Keil MDK 不内置 STM32 芯片支持,需要手动安装芯片支持包(Device Family Pack):
**下载地址**: 搜索 STM32F103ZE
**安装方式二选一**:
- 在线安装(速度慢,国内不推荐)
- 下载 `Keil.STM32F1xx_DFP.xxx.pack` 后双击离线安装(推荐)
### 编译器版本配置
最新 Keil MDK 默认使用 Compiler version 6,但与旧的 `core_cm3.c` 文件不兼容。
**解决方法**:安装 Compiler version 5
**下载地址**:
解压后放到 Keil MDK 安装目录下的 `ARM/ARMCC/` 文件夹。
然后在 Keil 项目配置中切换编译器版本为 V5。
### 注册
Keil MDK 需要注册(License),否则代码大小限制在 32KB 以内。
---
## 开发板简介
### 开发板资源

我们使用的是一款 STM32F103ZET6 开发板,板载资源包括:
- 主芯片:**STM32F103ZET6**(Cortex-M3, 72MHz, 512KB Flash, 64KB SRAM)
- 4 个 LED(LED1~LED4,其中 LED4 为电源指示灯)
- 多个按键(KEY_UP、KEY_1~KEY_3)
- USB 转串口(CH340G)
- W25Q64 Flash 芯片(SPI 接口)
- 24C02 EEPROM(I2C 接口)
- 引出所有 GPIO 引脚
### STM32最小系统
STM32 正常工作的最小外围电路包括 5 个部分:
| 部件 | 功能 | 原理图位置 |
| ------------- | ----------------------------------- | -------------- |
| **STM32芯片** | 主控制器 STM32F103ZET6 | 原理图第1页 |
| **电源** | 3.3V 供电,USB Type-C → AMS1117-3.3 | 原理图电源部分 |
| **时钟** | 8MHz HSE + 32.768KHz LSE 晶振 | 原理图晶振部分 |
| **复位** | NRST + 按键 + RC 电路 | 原理图复位部分 |
| **下载调试** | SWD 接口(SWDIO/SWCLK) | 原理图调试部分 |
#### 1. STM32F103ZET6芯片

STM32F103ZET6 采用 LQFP144 封装,共有 144 个引脚,包括:
- **I/O 引脚**:多达 112 个通用 I/O(GPIOA~GPIOG,每组 16 个)
- **电源引脚**:VDD/VSS(数字电源)、VDDA/VSSA(模拟电源)、VREF+/VREF-(ADC 参考电压)
- **特殊功能引脚**:BOOT0/BOOT1(启动模式选择)、NRST(复位)
> **参考**:STM32F103ZET6 数据手册 §3(引脚定义与功能表)
#### 2. 电源电路
采用双路供电方案:
**方案一**:USB Type-C(5V)→ AMS1117-3.3 稳压芯片 → 3.3V
**方案二**:ST-Link 直接提供 3.3V 供电
> **参考**:原理图电源部分,AMS1117 数据手册
> **注意**:AMS1117 最大输出电流 800mA,适合大多数应用。
#### 3. 时钟电路
STM32 提供两路外部时钟:
- **HSE(外部高速时钟)**:8MHz 晶振 → PLL 倍频 → 最高 72MHz 系统时钟
- **LSE(外部低速时钟)**:32.768KHz 晶振 → RTC 实时时钟
内部也集成了 RC 振荡器(HSI 8MHz、LSI 40KHz),精度较低但无需外部元件。
> **参考**:原理图晶振部分;参考手册 §7.2(时钟特性)
#### 4. 复位电路
NRST 引脚通过上拉电阻连接到 VCC,按下复位按键将 NRST 拉低使芯片复位。
RC 电路提供上电复位延时(确保电源稳定后再释放复位)。
> **参考**:原理图复位部分;参考手册 §7.1(复位与电源控制)
#### 5. 下载调试电路
支持两种下载方式:
| 方式 | 接口 | 特点 |
| --------------- | -------------------------------- | -------------------- |
| **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`
启动文件的作用:
1. 设置堆栈指针(SP)
2. 初始化中断向量表
3. 调用 `SystemInit()` 配置时钟
4. 跳转到 `main()` 函数
### 标准外设库下载地址
下载标准外设库用于提取启动文件、系统文件和头文件:
### Keil 项目配置要点
1. **添加设备组(Group)**:Start(启动文件)、User(用户代码)
2. **添加源文件**:将启动文件和系统文件添加到对应组
3. **魔术棒(Options for Target)配置**:
- Output:选择输出目录为 Objects
- C/C++:Define 中添加 `USE_STDPERIPH_DRIVER`
- Debug:选择 ST-Link Debugger,配置 SWD 接口
4. **编译器版本**:设置为 V5(与旧版 core_cm3.c 兼容)
---
## 烧录方法
### ST-Link SWD 方式
1. 连接 4 根线:SWDIO、SWCLK、VCC、GND
2. Keil 中配置 Debug → ST-Link Debugger → SWD 接口
3. 点击 Download(快捷键 F8)下载程序
### ST-Link 驱动安装
Keil MDK 安装目录自带的 ST-LINK USB 驱动位置:
`Keil_v5\ARM\STLink\USBDriver\dpinst_amd64.exe`
### ST-Link 固件升级
如果 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线调试接口,支持烧录+调试 | — |
## 常见问题与避坑
1. **芯片支持包在线安装太慢** → 从官网下载 `.pack` 文件后双击离线安装
2. **Keil MDK 需要注册** → 使用注册机生成 License
3. **编译报错 core_cm3.c 不兼容** → 安装 Compiler V5 并切换编译器版本
4. **ST-Link 连接失败** → 检查驱动是否安装、SWD 接线是否正确、固件是否需要升级
5. **启动文件选择错误** → 检查芯片 Flash 容量,选择对应的 `ld/md/hd` 版本
6. **下载后程序不运行** → 检查 BOOT0/BOOT1 跳线(BOOT0=0 从 Flash 启动)