STM32 Keil工程搭建 (手动搭建)流程 2025年5月27日07:42:09
STM32 Keil工程搭建 (手动搭建)流程
觉得麻烦跳转到最底部看总配置图
1.获取官方标准外设函数库
内部结构如下:
文件夹功能分别为
- 图标(用不上)
- 库函数(重点)
Libraries/ ├── CMSIS/ # ARM Cortex-M Microcontroller Software Interface Standard │ ├── CoreSupport/ # 包含ARM Cortex-M内核通用头文件,如core_cm3.h │ └── DeviceSupport/ # 包含STM32系列芯片的系统初始化文件和头文件 │ └── STM32F10x/ # 具体芯片型号支持(以STM32F10x为例) │ ├── system_stm32f10x.c # 系统初始化源文件,设置系统时钟等 │ └── stm32f10x.h # 芯片寄存器映射头文件 │ └── STM32F10x_StdPeriph_Driver/ # STM32标准外设驱动库├── inc/ # 外设头文件(.h),定义结构体、宏、函数原型等│ ├── misc.h # 通用中断配置等辅助功能│ ├── stm32f10x_adc.h # ADC外设头文件│ ├── stm32f10x_bkp.h # 备份寄存器相关│ ├── stm32f10x_can.h # CAN总线通信│ ├── stm32f10x_crc.h # CRC校验模块│ ├── stm32f10x_dma.h # DMA数据传输控制│ ├── stm32f10x_exti.h # 外部中断/事件控制器│ ├── stm32f10x_flash.h # Flash编程与擦除操作│ ├── stm32f10x_gpio.h # GPIO输入输出控制│ ├── stm32f10x_i2c.h # I2C通信协议│ ├── stm32f10x_iwdg.h # 独立看门狗定时器│ ├── stm32f10x_pwr.h # 电源管理模块│ ├── stm32f10x_rcc.h # 时钟控制(Reset and Clock Control)│ ├── stm32f10x_rtc.h # 实时时钟模块│ ├── stm32f10x_sdio.h # SD卡接口│ ├── stm32f10x_spi.h # SPI通信协议│ ├── stm32f10x_tim.h # 定时器模块│ ├── stm32f10x_usart.h # 串口通信模块│ └── stm32f10x_wwdg.h # 窗口看门狗定时器│└── src/ # 外设实现源文件(.c)├── misc.c # 通用中断配置实现├── stm32f10x_adc.c # ADC外设实现├── stm32f10x_bkp.c # 备份寄存器相关实现├── stm32f10x_can.c # CAN总线通信实现├── stm32f10x_crc.c # CRC校验模块实现├── stm32f10x_dma.c # DMA数据传输控制实现├── stm32f10x_exti.c # 外部中断/事件控制器实现├── stm32f10x_flash.c # Flash编程与擦除操作实现├── stm32f10x_gpio.c # GPIO输入输出控制实现├── stm32f10x_i2c.c # I2C通信协议实现├── stm32f10x_iwdg.c # 独立看门狗定时器实现├── stm32f10x_pwr.c # 电源管理模块实现├── stm32f10x_rcc.c # 时钟控制实现├── stm32f10x_rtc.c # 实时时钟模块实现├── stm32f10x_sdio.c # SD卡接口实现├── stm32f10x_spi.c # SPI通信协议实现├── stm32f10x_tim.c # 定时器模块实现├── stm32f10x_usart.c # 串口通信模块实现└── stm32f10x_wwdg.c # 窗口看门狗定时器实现
CMSIS/ └── DeviceSupport/└── STM32F10x/├── startup/ # 启动文件(汇编)│ ├── arm/│ ├── gcc_arm/│ ├── iar/│ └── ... # 不同编译器对应的启动文件│├── system_stm32f10x.c # 系统初始化源文件,设置系统时钟、SysTick等├── stm32f10x.h # 芯片寄存器映射和核心外设定义├── stm32f10x_map.h # 外设寄存器地址映射(一般由stm32f10x.h引用)├── stm32f10x_type.h # 数据类型定义(如 uint32_t 等,适用于不支持C99的编译器)└── stm32f10x_conf.h # 用户配置头文件(用于选择启用的外设模块)
- 示例工程和模版(函数使用的范例)
- 官方评估板示例工程
最底下的两个文件分别为
- STM32F10x标准外设库(StdPeriph_Lib)发行说明
- STM32F10x标准外设库(StdPeriph_Lib)使用手册
2.创建工程文件夹(名字自由命名)
1.创建主文件夹
2.复制标准函数库中 库函数文件夹到STM32A文件夹下
3.在STM32A中创建两个文件夹用于放置开发相关文件 和keil 工程文件
3.打开keil
新建项目,选择手动建立的 文件夹
选择魔法棒 设置关键路径
1.
2.
3.
5.
CMSIS/
└── DeviceSupport/└── STM32F10x/└── startup/└── arm/├── startup_stm32f10x_cl.s # 用于 Connectivity Line 系列(如 STM32F105xx / F107xx),支持 USB OTG FS、CAN├── startup_stm32f10x_hd.s # 用于 High-density 系列(如 STM32F103xE/F/G),Flash ≥ 256KB├── startup_stm32f10x_hd_vl.s # 用于 High-density Value Line(如 STM32F100xE/F),低功耗高密度型├── startup_stm32f10x_ld.s # 用于 Low-density 系列(如 STM32F101xB/C),Flash < 64KB├── startup_stm32f10x_ld_vl.s # 用于 Low-density Value Line(如 STM32F100xB/C),小容量低成本型├── startup_stm32f10x_md.s # 用于 Medium-density 系列(如 STM32F103xB/C),Flash = 64~128KB├── startup_stm32f10x_md_vl.s # 用于 Medium-density Value Line(如 STM32F100xB/C),中等容量价值线└── startup_stm32f10x_xl.s # 用于 XL-density 系列(如 STM32F103xC/D/E/Z/I),Flash ≥ 512KB
6. 按需求选择对应的启动文件
我的单片机型号:STM32F103C6T6 芯片
对应启动文件为
startup_stm32f10x_md.s # 用于 Medium-density 系列(如 STM32F103xB/C),Flash = 64~128KB
7.添加必要的库
CMSIS/
└── DeviceSupport/└── STM32F10x/├── system_stm32f10x.c # 系统初始化源文件(时钟、SysTick)├── system_stm32f10x.h # 系统头文件(宏定义、函数声明)└── stm32f10x.h # 芯片寄存器映射与基础定义
CMSIS/
└── CoreSupport/├── core_cm3.c # Cortex-M3 内核操作函数实现(如 SysTick、NVIC 等)└── core_cm3.h # Cortex-M3 寄存器定义、结构体、宏、内联函数声明
8. 在MyProjects 中创建 main.c
由于库版本比较低,所以会出现关于 core_cm3.c 代码报错
如果只是使用 STM32 标准外设库(如
stm32f10x_xxx.c
),而没有直接使用 CMSIS 提供的SysTick_Config()
等函数:
从项目中移除
core_cm3.c
文件;自行实现系统滴答定时器或其他中断处理逻辑;
只保留
core_cm3.h
,它是必须的头文件。
总的配置图示
USE_STDPERIPH_DRIVER 功能是启用外设函数库
添加这句之后得先编译一遍 ,keil 才能识别函数库