🎓 总站 🏠 本课目录 01 概述 02 ARM与STM32 03 开发环境 04 最小系统与C 05 GPIO 06 中断 07 串口通信 08 DMA 09 定时器 10 ADC 11 从模块到项目 12 嵌入式OS
智能嵌入式系统设计 · 第3章

STM32 微控制器及开发环境搭建

STM32 命名规范与选型、芯片封装;三种开发方式(寄存器 / 标准外设库 / HAL 库);宿主机-目标机开发模式、J-Link/ST-Link 调试下载工具;Keil MDK 集成环境与 Packs 包安装;标准外设库文件结构与 CMSIS 标准。

📚 学习进度
0%

🎯学习目标

  • 了解 STM32 的性能参数,能进行基本的器件选型;
  • 能从 ST 官网下载数据手册、用户手册等官方文档;
  • 掌握 STM32 的三种开发方式:寄存器、标准外设库、HAL 库;
  • 能独立搭建 STM32 开发环境,掌握 Keil 的调试方法。

STM32 介绍与选型

STM32 = ST + M + 32:ST 意法半导体、M 微控制器、32 位微处理器。

ST 微处理器系列:STM8(8 位,主打低功耗,STM8A 汽车/STM8S 标准/STM8L 超低功耗,3 级流水线哈佛结构);STM32(32 位,STM32F1 主流 Cortex-M3@72MHz、STM32F4/F7 高性能 Cortex-M4/M7)。

STM32 芯片命名规范(以 STM32F103ZET6 为例)

序号符号说明
1STM32ARM Cortex-M3 内核的 32 位微控制器
2F芯片系列
3103增强型系列
4Z144 管脚
5E512K 字节 Flash
6TLQFP 封装
76工作温度 −40~+85℃

常见封装

DIP

双列直插,≤100 引脚,适合中小规模 IC。

SOP

小外型表面贴片,10~40 引脚。

LQFP

薄型 QFP,厚度 1.4mm,大规模 IC。

BGA

球栅阵列,CPU 常用。

PGA

插针网格阵列,有专用插座。

选型参考资料

  • 数据手册 Datasheet:基本配置(Flash/RAM 容量、外设种类数量)、引脚、电气特性、封装、订购代码;
  • 参考手册 Reference Manual:对外设功能详细说明,对寄存器详细描述;
  • 选型手册:对比不同型号。

三种开发方式 ⭐

① 寄存器开发

查阅用户手册,配置寄存器各 bit 位,直接操作寄存器

GPIOB->BSRR = 0x0001;  // PB0 置位

特点:最底层、效率高,但需深入掌握芯片,对开发人员要求高,学习曲线长。

② 标准外设库开发

把底层寄存器操作统一封装成 C 函数(驱动器),调用 API 即可。

遵循 CMSIS 标准(Cortex 微控制器软件接口标准),解决不同厂商 Cortex 芯片的软件兼容性。

特点:无需深入底层,灵活规范,开发效率高。

③ HAL 库开发

硬件抽象层,把硬件抽象化,配合 STM32CubeMX 图形化工具配置引脚/时钟/外设,自动生成代码。

实质仍操作寄存器,只是封装成函数:HAL_GPIO_WritePin()

特点:最易用、跨芯片可移植,需 CubeMX + 编译器。

CMSIS 标准:ARM 与众多芯片/软件厂商共同制定,意在将所有 Cortex 芯片厂商产品的软件接口标准化,解决兼容问题。标准外设库架构遵循 CMSIS。

开发环境 ⭐

宿主机-目标机模式宿主机(通用 PC)安装 Keil 等工具,做代码编辑/编译/链接,生成可执行文件;目标机(开发板)不能直接开发,由宿主机把代码下载/烧写进去再执行。下载工具连接两者。

软件开发四阶段

代码编辑:写源代码
编译:源码 → 目标文件
链接:目标文件 + 库 → 可执行文件
调试 & 下载:仿真调试、烧写进目标机

调试下载工具

J-Link

德国 SEGGER 推出,基于 JTAG 的仿真器。通用工具,支持 ARM7/9/11、Cortex M0~M4、Cortex A5/A8/A9。

与 IAR/Keil 无缝连接,是目前 ARM 开发中最好用的 JTAG 工具。

ST-Link/V2

ST 专门针对 STM8/STM32 的仿真器,USB2.0 接口,SWIM/JTAG/SWD 下载,速度快。

支持全速/单步/断点调试,可查看 IO 状态、变量。

ISP 下载器

串口下载电路,一根 USB 线一键下载。

缺点:只能烧写,不能在线仿真调试。

Keil MDK

Keil MDK(Microcontroller Development Kit)= MDK-Core + ARM 编译器。最新版本 MDK 5.27,使用 Keil μVision5 IDE

安装要点:① 从 keil.com 下载;② 安装路径最好不要包含中文;③ 安装后需安装对应芯片的 Packs 包(如 Keil.STM32F1xx_DFP.2.2.0.pack)。

界面由菜单栏、快捷工具栏、工程工作空间、编译输出窗口组成。主流 ARM IDE 还有 IAR EWARM

标准外设库结构 ⭐

标准外设库最新版本 v3.5.0,ST 官网下载。解压后含四个文件夹:

  • Libraries:库函数源文件,含系统文件、启动文件、大量头文件;
  • Project:官方例程 + 不同编译器的项目模板(MDK-ARM、EWARM 等);
  • Utilities:评估板示例程序和驱动;
  • _htmresc:ST logo 图片(无用)。
核心思想:库函数架设在寄存器与用户驱动层之间——向下处理寄存器操作,向上提供 API。开发者无需深入了解底层硬件细节,即可灵活规范地使用每一个外设。

关键文件

文件作用
startup_stm32f10x_xx.s汇编启动文件,初始化堆栈/中断向量表,引导进 main,调 SystemInit() 配时钟。hd/md/ld 对应大/中/小容量
core_cm3.c / .hCortex-M3 内核通用文件(NVIC、SysTick),ARM 提供,所有 Cortex-M3 芯片通用
system_stm32f10x.c系统时钟配置,SystemInit() 初始化系统时钟,SystemCoreClock 变量存系统时钟(如 72000000)
stm32f10x.h所有外设寄存器/结构体/位/中断向量表/存储映射定义。__IO = volatile
stm32f10x_ppp.c/.h外设驱动函数(ppp = 外设缩写)
misc.c/.hNVIC 中断管理函数,配置中断时必须加入工程
stm32f10x_it.c存放用户编写的中断服务函数
stm32f10x_conf.h固件库配置文件,选择启用哪些外设头文件

库文件与命名规则

启动文件按容量选择

  • startup_stm32f10x_hd.s:大容量,Flash ≥ 256K;
  • startup_stm32f10x_md.s:中容量,Flash 64K~256K;
  • startup_stm32f10x_ld.s:小容量,Flash < 32K。

命名规则

  • 源文件和头文件以 "stm32f10x_" 开头;
  • PPP 表示任一外设缩写;
  • 常量用大写英文字母命名;单文件常量定义于该文件,多文件常量在头文件定义;
  • 寄存器作为常量处理,用大写命名。

重点例题

例1 STM32F103ZET6 各字段含义?
答案
STM32(Cortex-M3 32位MCU) + F(系列) + 103(增强型) + Z(144脚) + E(512K Flash) + T(LQFP封装) + 6(温度−40~+85℃)。
例2 三种开发方式的区别和适用场景?
答案
寄存器:最底层效率高但要求高,适合学习底层;标准外设库:封装寄存器为 API,遵循 CMSIS,开发效率高,最常用;HAL 库:硬件抽象+CubeMX 图形化生成,最易用、可移植,适合快速开发。
例3 CMSIS 标准的作用?
答案
由 ARM 与厂商共同制定,将所有 Cortex 芯片厂商产品的软件接口标准化,解决不同厂商芯片的软件兼容性问题。
例4 启动文件如何按容量选择?
答案
hd(Flash≥256K大容量)、md(64K~256K中容量)、ld(<32K小容量)。根据芯片片内 Flash 大小选择对应启动文件。
例5 SystemCoreClock = 72000000 表示什么?
答案
系统时钟为 72MHz。SystemCoreClock 变量存储系统时钟频率,单位 Hz。

🎯自测(点击展开)

STM32 命名中 STM32F103 的 103 代表什么?
103 表示增强型系列。
标准外设库遵循什么标准?
遵循 CMSIS(Cortex 微控制器软件接口标准),由 ARM 与厂商共同制定,标准化所有 Cortex 芯片的软件接口。
宿主机和目标机分别指什么?
宿主机=通用 PC,装 Keil 做编辑/编译/链接生成可执行文件;目标机=开发板,由宿主机下载代码后执行。
ST-Link 和 ISP 下载器的区别?
ST-Link 支持在线仿真调试(全速/单步/断点);ISP 只能烧写下载,不能在线调试。
core_cm3.c 的作用?
Cortex-M3 内核通用文件,操作内核外设寄存器(NVIC、SysTick),由 ARM 提供,所有 Cortex-M3 芯片通用。
stm32f10x.h 头文件包含什么?
所有外设寄存器和结构体定义、位定义、中断向量表、存储空间地址映射等,含大量结构体和宏定义。
__IO 宏代表什么?
__IO = volatile,定义在 core_cm3.h 中,表示读写权限,防止编译器优化掉对寄存器的访问。

📝强化题库

选择题点选即时判分;填空题输入后"检查"或"显示答案"。

已答 0/0答对 0正确率
已答 0/0答对 0