01-STM32概述与开发环境搭建.md 11 KB


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

  • ST — 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 选型速查

STM32开发方式

目前 STM32 开发有三种方式:

方式 特点 适用人群
寄存器 直接操作内存地址,代码最小,最深理解硬件 学习硬件原理、裸机开发
标准库(StdPeriph) ST 官方封装寄存器操作,函数名规范 经典项目,教程最多
HAL库 + CubeMX 图形化配置,移植性好,代码量大 快速原型、多平台移植

本教程以寄存器 + HAL 库双版并行教学,既能深入硬件底层,又能快速实际开发。


开发环境搭建

Keil MDK 介绍

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 开发板,板载资源包括:

  • 主芯片: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 引脚图

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() 函数

标准外设库下载地址

下载标准外设库用于提取启动文件、系统文件和头文件:

https://www.st.com/zh/embedded-software/stm32-standard-peripheral-libraries/products.html

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 启动)