固件库> tree
Folder PATH listing
Volume serial number is C672-F97B

C:.
└───STM32F10x_StdPeriph_Lib_V3.5.0
    └───STM32F10x_StdPeriph_Lib_V3.5.0
        ├───Libraries
        │   ├───CMSIS
        │   │   ├───CM3
        │   │   │   ├───CoreSupport
        │   │   │   └───DeviceSupport
        │   │   │       └───ST
        │   │   │           └───STM32F10x
        │   │   │               └───startup
        │   │   │                   ├───arm
        │   │   │                   ├───gcc_ride7
        │   │   │                   ├───iar
        │   │   │                   └───TrueSTUDIO
        │   │   └───Documentation
        │   └───STM32F10x_StdPeriph_Driver
        │       ├───inc
        │       └───src
        ├───Project
        │   ├───STM32F10x_StdPeriph_Examples
        │   │   ├───ADC
        │   │   │   ├───3ADCs_DMA
        │   │   │   ├───ADC1_DMA
        │   │   │   ├───AnalogWatchdog
        │   │   │   ├───ExtLinesTrigger
        │   │   │   ├───RegSimul_DualMode
        │   │   │   └───TIMTrigger_AutoInjection
        │   │   ├───BKP
        │   │   │   ├───Backup_Data
        │   │   │   └───Tamper
        │   │   ├───CAN
        │   │   │   ├───DualCAN
        │   │   │   ├───LoopBack
        │   │   │   └───Networking
        │   │   ├───CEC
        │   │   │   └───DataExchangeInterrupt
        │   │   ├───CortexM3
        │   │   │   ├───BitBand
        │   │   │   ├───Mode_Privilege
        │   │   │   └───MPU
        │   │   │       └───Linker
        │   │   │           ├───RIDE
        │   │   │           └───TrueSTUDIO
        │   │   ├───CRC
        │   │   │   └───CRC_Calculation
        │   │   ├───DAC
        │   │   │   ├───DualModeDMA_SineWave
        │   │   │   ├───OneChannelDMA_Escalator
        │   │   │   ├───OneChannel_NoiseWave
        │   │   │   └───TwoChannels_TriangleWave
        │   │   ├───DMA
        │   │   │   ├───ADC_TIM1
        │   │   │   ├───FLASH_RAM
        │   │   │   ├───FSMC
        │   │   │   ├───I2C_RAM
        │   │   │   └───SPI_RAM
        │   │   ├───EXTI
        │   │   │   └───EXTI_Config
        │   │   ├───FLASH
        │   │   │   ├───Dual_Boot
        │   │   │   │   ├───EWARM
        │   │   │   │   ├───HiTOP
        │   │   │   │   │   ├───STM3210X-XL_BANK1
        │   │   │   │   │   │   ├───Objects
        │   │   │   │   │   │   └───Settings
        │   │   │   │   │   └───STM3210X-XL_BANK2
        │   │   │   │   │       ├───Objects
        │   │   │   │   │       └───Settings
        │   │   │   │   ├───MDK-ARM
        │   │   │   │   └───TrueSTUDIO
        │   │   │   │       ├───.metadata
        │   │   │   │       │   └───Link
        │   │   │   │       ├───STM32F10X_XL_BANK1
        │   │   │   │       │   └───.settings
        │   │   │   │       └───STM32F10X_XL_BANK2
        │   │   │   │           └───.settings
        │   │   │   ├───Program
        │   │   │   └───Write_Protection
        │   │   ├───FSMC
        │   │   │   ├───NAND
        │   │   │   ├───NOR
        │   │   │   ├───NOR_CodeExecute
        │   │   │   │   └───binary
        │   │   │   ├───OneNAND
        │   │   │   ├───SRAM
        │   │   │   └───SRAM_DataMemory
        │   │   │       ├───EWARM
        │   │   │       ├───HiTOP
        │   │   │       ├───MDK-ARM
        │   │   │       ├───RIDE
        │   │   │       └───TrueSTUDIO
        │   │   ├───GPIO
        │   │   │   ├───IOToggle
        │   │   │   └───JTAG_Remap
        │   │   ├───I2C
        │   │   │   ├───EEPROM
        │   │   │   ├───I2C_TSENSOR
        │   │   │   └───IOExpander
        │   │   ├───I2S
        │   │   │   ├───Interrupt
        │   │   │   └───SPI_I2S_Switch
        │   │   ├───IWDG
        │   │   │   └───IWDG_Reset
        │   │   ├───Lib_DEBUG
        │   │   │   └───RunTime_Check
        │   │   ├───NVIC
        │   │   │   ├───DMA_WFIMode
        │   │   │   ├───IRQ_Mask
        │   │   │   ├───IRQ_Priority
        │   │   │   └───VectorTable_Relocation
        │   │   │       └───linker
        │   │   │           ├───EWARM
        │   │   │           ├───HiTOP
        │   │   │           │   ├───STM32100B-EVAL
        │   │   │           │   ├───STM32100E-EVAL
        │   │   │           │   ├───STM3210B-EVAL
        │   │   │           │   ├───STM3210C-EVAL
        │   │   │           │   ├───STM3210E-EVAL
        │   │   │           │   └───STM3210X-XL
        │   │   │           ├───RIDE
        │   │   │           └───TrueSTUDIO
        │   │   ├───PWR
        │   │   │   ├───PVD
        │   │   │   ├───STANDBY
        │   │   │   └───STOP
        │   │   ├───RCC
        │   │   │   └───RCC_ClockConfig
        │   │   ├───RTC
        │   │   │   ├───Calendar
        │   │   │   └───LSI_Calib
        │   │   ├───SDIO
        │   │   │   └───uSDCard
        │   │   ├───SPI
        │   │   │   ├───CRC
        │   │   │   ├───DMA
        │   │   │   ├───FullDuplex_SoftNSS
        │   │   │   ├───Simplex_Interrupt
        │   │   │   └───SPI_FLASH
        │   │   ├───SysTick
        │   │   │   └───TimeBase
        │   │   ├───TIM
        │   │   │   ├───6Steps
        │   │   │   ├───7PWM_Output
        │   │   │   ├───Cascade_Synchro
        │   │   │   ├───ComplementarySignals
        │   │   │   ├───DMA
        │   │   │   ├───DMABurst
        │   │   │   ├───ExtTrigger_Synchro
        │   │   │   ├───InputCapture
        │   │   │   ├───OCActive
        │   │   │   ├───OCInactive
        │   │   │   ├───OCToggle
        │   │   │   ├───OnePulse
        │   │   │   ├───Parallel_Synchro
        │   │   │   ├───PWM_Input
        │   │   │   ├───PWM_Output
        │   │   │   ├───TIM10_PWMOutput
        │   │   │   ├───TIM15_ComplementarySignals
        │   │   │   ├───TIM1_Synchro
        │   │   │   ├───TIM9_OCToggle
        │   │   │   └───TimeBase
        │   │   ├───USART
        │   │   │   ├───DMA_Interrupt
        │   │   │   ├───DMA_Polling
        │   │   │   ├───HalfDuplex
        │   │   │   ├───HyperTerminal_HwFlowControl
        │   │   │   ├───HyperTerminal_Interrupt
        │   │   │   ├───Interrupt
        │   │   │   ├───IrDA
        │   │   │   │   ├───Receive
        │   │   │   │   └───Transmit
        │   │   │   ├───MultiProcessor
        │   │   │   ├───Polling
        │   │   │   ├───Printf
        │   │   │   ├───Smartcard
        │   │   │   └───Synchronous
        │   │   └───WWDG
        │   │       └───WWDG_Reset
        │   └───STM32F10x_StdPeriph_Template
        │       ├───EWARM
        │       ├───HiTOP
        │       │   ├───STM32100B-EVAL
        │       │   │   ├───Objects
        │       │   │   └───Settings
        │       │   ├───STM32100E-EVAL
        │       │   │   ├───Objects
        │       │   │   └───Settings
        │       │   ├───STM3210B-EVAL
        │       │   │   ├───Objects
        │       │   │   └───Settings
        │       │   ├───STM3210C-EVAL
        │       │   │   ├───Objects
        │       │   │   └───Settings
        │       │   ├───STM3210E-EVAL
        │       │   │   ├───Objects
        │       │   │   └───Settings
        │       │   └───STM3210E-EVAL_XL
        │       │       ├───Objects
        │       │       └───Settings
        │       ├───MDK-ARM
        │       ├───RIDE
        │       └───TrueSTUDIO
        │           ├───.metadata
        │           │   └───Link
        │           ├───STM32100B-EVAL
        │           │   └───.settings
        │           ├───STM32100E-EVAL
        │           │   └───.settings
        │           ├───STM3210B-EVAL
        │           │   └───.settings
        │           ├───STM3210C-EVAL
        │           │   └───.settings
        │           ├───STM3210E-EVAL
        │           │   └───.settings
        │           └───STM3210E-EVAL_XL
        │               └───.settings
        ├───Utilities
        │   └───STM32_EVAL
        │       ├───Common
        │       ├───STM32100B_EVAL
        │       ├───STM32100E_EVAL
        │       ├───STM3210B_EVAL
        │       ├───STM3210C_EVAL
        │       ├───STM3210E_EVAL
        │       └───STM32L152_EVAL
        └───_htmresc

这是一份非常标准的 STM32F10x 标准外设库 V3.5.0 的目录结构。这是 ST 官方早期最经典的固件库版本,也是很多初学者和老工程师的“启蒙老师”。

这份目录结构的设计非常严谨,遵循了 ARM 的 CMSIS 标准和软件工程的高内聚低耦合原则。

以下我为你详细解析这些目录的含义,以及它们英文命名背后的逻辑(为什么这么取)。

1. 核心库目录 (Libraries)

这是整个固件库的“心脏”,包含了驱动芯片所需的所有底层代码。

  • CMSIS (Cortex Microcontroller Software Interface Standard)

    • 解析:这是 ARM 公司制定的标准,目的是为了让软件能在不同厂商(如 ST、NXP)的 Cortex-M 内核芯片上通用。
    • CM3:代表 Cortex-M3,这是 STM32F10x 系列使用的内核架构。
    • CoreSupport:
      • 含义:内核支持文件。
      • 内容:包含 core_cm3.c/h,这是 ARM 官方提供的,定义了内核寄存器(如 NVIC、SysTick)的访问接口。
    • DeviceSupport -> ST -> STM32F10x:
      • 含义:设备支持文件。
      • 内容:这里存放的是 ST 针对具体型号(STM32F10x)的定义。最重要的是 startup 文件夹。
      • startup:启动文件。里面是汇编代码(.s),按编译器分类(arm 代表 Keil MDK,iar 代表 IAR EWARM,gcc 代表开源编译器)。它的作用是上电后的第一步:初始化堆栈、复制中断向量表,然后跳转到 main 函数。
  • STM32F10x_StdPeriph_Driver (Standard Peripheral Driver)

    • 解析:这是 ST 编写的标准外设驱动库。
    • 命名逻辑:
      • StdPeriph:Standard Peripheral 的缩写,意为“标准外设”。
      • Driver:驱动程序。
    • inc (Include):
      • 含义:头文件目录。
      • 内容:存放 .h 文件(如 stm32f10x_gpio.h)。这些文件定义了外设的寄存器结构体、函数声明和宏定义。
    • src (Source):
      • 含义:源文件目录。
      • 内容:存放 .c 文件(如 stm32f10x_gpio.c)。这是外设功能的具体代码实现。

2. 工程与示例目录 (Project)

这个目录是“教科书”,教你如何写代码。

  • STM32F10x_StdPeriph_Examples

    • 含义:标准外设库的示例代码集合。
    • 结构:里面按外设功能分类(如 GPIO, USART, TIM 等)。
    • 作用:如果你想用串口,就进 USART 文件夹找例子。这是学习库函数用法最直接的地方。
  • STM32F10x_StdPeriph_Template

    • 含义:工程模板。
    • 作用:这是一个已经配置好的空工程框架。当你需要开发新项目时,直接复制这个文件夹,就不用自己去手动添加成百上千个库文件了,省时省力。

3. 工具与评估板目录 (Utilities)

  • STM32_EVAL
    • 含义:ST 官方评估板(Evaluation Board)的专用驱动。
    • 内容:包含针对特定开发板(如 STM3210E_EVAL)上外设的驱动,比如板载的 LCD 屏幕、SD 卡插槽、按键和 LED 的驱动代码。
    • 注意:如果你用的是自己画的板子,这个目录通常用不上。

4. 命名逻辑总结表

为了让你更清楚为什么这么命名,我整理了以下表格:

英文缩写/单词 全称 中文含义 命名原因/逻辑
CMSIS Cortex Microcontroller Software Interface Standard 微控制器软件接口标准 ARM 制定的行业标准,确保代码在不同 Cortex 芯片间可移植。
CoreSupport Core Support 内核支持 存放支持 Cortex-M3 内核核心功能的文件(如中断控制器)。
DeviceSupport Device Support 设备支持 存放具体芯片型号(STM32F10x)特有的文件(如启动文件、寄存器映射)。
StdPeriph Standard Peripheral 标准外设 对应“寄存器开发”,这是官方封装好的标准库函数。
inc Include 包含文件 C 语言工程惯例,存放 .h 头文件,用于被代码 #include。
src Source 源代码 C 语言工程惯例,存放 .c 源文件,包含具体的函数实现。
startup Startup Code 启动代码 汇编语言惯例,存放系统上电复位后最先执行的代码。
EVAL Evaluation 评估/评测 电子行业惯例,指官方推出的用于测试芯片性能的“评估板”。
Template Template 模板 软件工程惯例,指预先搭好的框架,用于快速开始新项目。

💡 给你的建议

在实际开发中,你通常的操作流程是:

  1. 复制 Project\STM32F10x_StdPeriph_Template 文件夹作为你新工程的根目录。
  2. 参考 Project\STM32F10x_StdPeriph_Examples 里的代码,把你需要的外设功能(如 GPIO 点亮 LED)复制到你的 main.c 中。
  3. 编译时,编译器会去 Libraries 目录里寻找底层实现。

理解了这个结构,你就理解了 STM32 开发的基本骨架。