STM32 Keil工程手动搭建流程详解:步骤指南(XXXX年最新)

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        # 用户配置头文件(用于选择启用的外设模块)

  • 示例工程和模版(函数使用的范例)
  • 官方评估板示例工程
  • 最底下的两个文件分别为
    1. STM32F10x标准外设库(StdPeriph_Lib)发行说明
    2. 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 才能识别函数库

      

    作者:梦境虽美,却不长

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32 Keil工程手动搭建流程详解:步骤指南(XXXX年最新)

    发表回复