--- 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 以内。 --- ## 开发板简介 ### 开发板资源 ![开发板实物图](assets/stm32f103zet6_开发板实物图.png) 我们使用的是一款 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 引脚图](assets/stm32f103zet6_芯片引脚图.png) 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 启动)