STM32 微控制器及开发环境搭建
STM32 命名规范与选型、芯片封装;三种开发方式(寄存器 / 标准外设库 / HAL 库);宿主机-目标机开发模式、J-Link/ST-Link 调试下载工具;Keil MDK 集成环境与 Packs 包安装;标准外设库文件结构与 CMSIS 标准。
🎯学习目标
- 了解 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 为例)
| 序号 | 符号 | 说明 |
|---|---|---|
| 1 | STM32 | ARM Cortex-M3 内核的 32 位微控制器 |
| 2 | F | 芯片系列 |
| 3 | 103 | 增强型系列 |
| 4 | Z | 144 管脚 |
| 5 | E | 512K 字节 Flash |
| 6 | T | LQFP 封装 |
| 7 | 6 | 工作温度 −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 + 编译器。
③开发环境 ⭐
软件开发四阶段
调试下载工具
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。
界面由菜单栏、快捷工具栏、工程工作空间、编译输出窗口组成。主流 ARM IDE 还有 IAR EWARM。
⑤标准外设库结构 ⭐
标准外设库最新版本 v3.5.0,ST 官网下载。解压后含四个文件夹:
- Libraries:库函数源文件,含系统文件、启动文件、大量头文件;
- Project:官方例程 + 不同编译器的项目模板(MDK-ARM、EWARM 等);
- Utilities:评估板示例程序和驱动;
- _htmresc:ST logo 图片(无用)。
关键文件
| 文件 | 作用 |
|---|---|
| startup_stm32f10x_xx.s | 汇编启动文件,初始化堆栈/中断向量表,引导进 main,调 SystemInit() 配时钟。hd/md/ld 对应大/中/小容量 |
| core_cm3.c / .h | Cortex-M3 内核通用文件(NVIC、SysTick),ARM 提供,所有 Cortex-M3 芯片通用 |
| system_stm32f10x.c | 系统时钟配置,SystemInit() 初始化系统时钟,SystemCoreClock 变量存系统时钟(如 72000000) |
| stm32f10x.h | 所有外设寄存器/结构体/位/中断向量表/存储映射定义。__IO = volatile |
| stm32f10x_ppp.c/.h | 外设驱动函数(ppp = 外设缩写) |
| misc.c/.h | NVIC 中断管理函数,配置中断时必须加入工程 |
| 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 表示任一外设缩写;
- 常量用大写英文字母命名;单文件常量定义于该文件,多文件常量在头文件定义;
- 寄存器作为常量处理,用大写命名。
⭐重点例题
答案
答案
答案
答案
答案
🎯自测(点击展开)
STM32 命名中 STM32F103 的 103 代表什么?
标准外设库遵循什么标准?
宿主机和目标机分别指什么?
ST-Link 和 ISP 下载器的区别?
core_cm3.c 的作用?
stm32f10x.h 头文件包含什么?
__IO 宏代表什么?
📝强化题库
选择题点选即时判分;填空题输入后"检查"或"显示答案"。