STM32F10x标准外设库(Standard Peripheral Library,简称SPL)是STMicroelectronics为STM32F10x系列微控制器提供的一套固件库,用于简化外设配置和操作。以下是其目录结构及作用详解:
下载STM32F10x标准外设库
https://www.st.com.cn/zh/embedded-software/stm32-standard-peripheral-libraries.html
stm32f103c8t6标准外设库最新版为:
STM32F10x_StdPeriph_Lib_V3.6.0.zip,解压后目录结构如下
一、目录结构
STM32F10x_StdPeriph_Lib_VX.X.X/
├── Libraries/
│ ├── CMSIS/ // Cortex微控制器软件接口标准
│ │ ├── CoreSupport/ // Cortex-M3核心支持文件
│ │ ├── DeviceSupport/ // STM32F10x设备支持文件
│ │ └── Startup/ // 启动文件(汇编)
│ ├── STM32F10x_StdPeriph_Driver/ // 标准外设驱动库
│ │ ├── inc/ // 外设驱动头文件
│ │ └── src/ // 外设驱动源文件
├── Project/
│ ├── STM32F10x_StdPeriph_Examples/ // 外设示例代码
│ ├── STM32F10x_StdPeriph_Template/ // 项目模板
│ └── STM32F10x_StdPeriph_Examples_ADC/ // 具体外设示例(如ADC)
├── Utilities/ // 实用工具(如串口调试)
└── Release_Notes.html // 版本更新说明
二、目录作用详解
1. Libraries/
Libraries 目录详解
Libraries/CMSIS/
├── CM3/
│ ├── CoreSupport/ // Cortex-M3 核心通用文件
│ │ ├── core_cm3.c // Cortex-M3 内核寄存器操作函数
│ │ └── core_cm3.h // Cortex-M3 内核寄存器定义(如 NVIC、SCB)
│ │
│ └── DeviceSupport/ST/STM32F10x/ // STM32F10x 芯片专用文件
│ ├── startup/ // 启动文件(不同 Flash 容量版本)
│ │ ├── startup_stm32f10x_ld.s // 小容量(16~32KB)
│ │ ├── startup_stm32f10x_md.s // 中容量(64~128KB,如 STM32F103C8T6)
│ │ ├── startup_stm32f10x_hd.s // 大容量(256~512KB)
│ │ └── ...
│ │
│ ├── system_stm32f10x.c // 系统时钟初始化函数(SystemInit())
│ └── system_stm32f10x.h // 系统时钟配置头文件
│
└── Documentation/ // CMSIS 规范文档(非必用)
-
CMSIS/
-
CoreSupport/
:提供Cortex-M3核心的通用函数(如NVIC、SysTick配置)。 -
DeviceSupport/
:包含STM32F10x系列设备的特定文件(如system_stm32f10x.c
)。 -
Startup/
:提供启动文件(如startup_stm32f10x_hd.s
),定义中断向量表和初始化堆栈。
-
-
STM32F10x_StdPeriph_Driver/
-
inc/
:外设驱动头文件(如stm32f10x_gpio.h
、stm32f10x_rcc.h
)。 -
src/
:外设驱动源文件(如stm32f10x_gpio.c
、stm32f10x_rcc.c
),提供外设初始化、配置和操作函数。
-
2. Project/
Project/
├── Examples/ // 外设功能示例(可直接运行)
│ ├── ADC/ // ADC 采集示例
│ ├── GPIO/ // LED/按键控制示例
│ ├── TIM/ // 定时器中断/PWM 示例
│ └── ... // 其他外设(CAN, DMA, RTC 等)
│
├── Templates/ // 空白工程模板
│ ├── MDK-ARM/ // Keil 工程模板
│ │ ├── startup/ // 启动文件(与芯片对应)
│ │ └── Template.uvprojx // Keil 工程文件
│ │
│ ├── TrueSTUDIO/ // TrueSTUDIO 工程模板
│ └── main.c // 主函数模板
│
└── ... // 其他支持文件
-
STM32F10x_StdPeriph_Examples/
提供外设使用示例(如GPIO、USART、ADC等),帮助开发者快速上手。 -
STM32F10x_StdPeriph_Template/
提供项目模板,包含基本的工程配置(如Keil、IAR项目文件)。
3. Utilities/
Utilities/
├── STM32_EVAL/ // 官方评估板驱动(如 STM3210B-EVAL)
│ ├── STM3210B-EVAL/ // 针对特定评估板的代码
│ │ ├── stm3210b_eval.c // 板载外设初始化(LCD、按键、LED)
│ │ └── stm3210b_eval.h // 板载外设接口定义
│ │
│ ├── STM3210E-EVAL/ // 其他评估板支持
│ └── ...
│
└── ... // 其他工具(如串口调试助手)
包含实用工具(如串口调试库STM32_EVAL
),用于开发板评估和调试。
4. Release_Notes.html
记录库的版本更新内容、修复的Bug及新增功能。
三、核心文件说明
1. 启动文件(Startup/
)
-
作用:定义中断向量表、初始化堆栈指针、调用
SystemInit()
函数配置系统时钟。 -
示例:
startup_stm32f10x_hd.s
(大容量设备)。
2. 系统初始化文件(system_stm32f10x.c
)
-
作用:配置系统时钟(如使用HSE、HSI或PLL),初始化Flash预取缓冲区。
-
关键函数:
SystemInit()
。
3. 外设驱动文件
-
GPIO:
stm32f10x_gpio.c
-
提供GPIO配置(输入/输出模式、速度、上拉/下拉)和读写操作。
-
-
RCC:
stm32f10x_rcc.c
-
提供时钟配置(HSE/HSI/PLL)、外设时钟使能/禁用。
-
-
USART:
stm32f10x_usart.c
-
提供串口初始化、数据发送/接收、中断配置。
-
-
ADC:
stm32f10x_adc.c
-
提供ADC初始化、通道配置、数据采集。
-
四、使用流程
-
创建工程
-
复制
Project/STM32F10x_StdPeriph_Template/
中的模板文件。 -
添加
Libraries/
中的必要文件(如启动文件、外设驱动)。
-
-
配置外设
-
包含头文件(如
#include "stm32f10x_gpio.h"
)。 -
调用库函数初始化外设(如
GPIO_Init()
)。
-
-
编译与调试
-
使用Keil、IAR或GCC编译工程。
-
通过
Utilities/
中的工具调试程序。
-
五、注意事项
-
库版本兼容性
确保使用的库版本与目标芯片型号匹配(如STM32F103C8T6使用中等容量库)。 -
HAL库替代
STM32F10x标准外设库已逐步被HAL库取代,建议新项目优先使用HAL库。 -
代码优化
标准外设库代码较为冗长,可根据需求裁剪或优化。
总结
STM32F10x标准外设库通过模块化的设计简化了外设操作,适合初学者和中小型项目。开发者应熟悉其目录结构和核心文件,结合示例代码快速上手。对于新项目,建议评估是否迁移至HAL库或LL库。