当前位置: 首页 > article >正文

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

  • 示例工程和模版(函数使用的范例)
  • 官方评估板示例工程
最底下的两个文件分别为
  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 才能识别函数库

  

http://www.lryc.cn/news/2387389.html

相关文章:

  • MyBatis 框架使用与 Spring 集成时的使用
  • OpenGL Chan视频学习-7 Writing a Shader inOpenGL
  • 顶会新方向:卡尔曼滤波+目标检测
  • 数据库相关问题
  • 一起学数据结构和算法(二)| 数组(线性结构)
  • Linux基本指令篇 —— touch指令
  • 【后端高阶面经:消息队列篇】23、Kafka延迟消息:实现高并发场景下的延迟任务处理
  • Mac安装MongoDB数据库以及MongoDB Compass可视化连接工具
  • 城市地下“隐形卫士”:激光甲烷传感器如何保障燃气安全?
  • MySQL推出全新Hypergraph优化器,正式进军OLAP领域!
  • 飞牛fnNAS手机相册备份及AI搜图
  • 消费类,小家电产品如何做Type-C PD快充快速充电
  • 连接表、视图和存储过程
  • 人工智能赋能教育:重塑学习生态,开启智慧未来
  • 银河麒麟V10×R²AIN SUITE:用AI重构安全,以国产化生态定义智能未来
  • JavaScript- 3.2 JavaScript实现不同显示器尺寸的响应式主题和页面
  • 15.进程间通信(一)
  • AI 数据采集实战指南:基于 Bright Data 快速获取招标讯息
  • cursor使用mcp
  • 小白成长之路-计算机网络(四)
  • 【Agent】MLGym: A New Framework and Benchmark for Advancing AI Research Agents
  • 5.27 打卡
  • Web安全测试-文件上传绕过-DVWA
  • 织梦dedecms arclist最新发布日期显示红色
  • 现代 CSS 高阶技巧:实现平滑内凹圆角的工程化实践
  • 【运维自动化-标准运维】如何实现在不同步骤间传递参数
  • STM32 UART通信实战指南:从原理到项目落地
  • 基于stm32的 永磁同步电机二电平驱动控制系统设计
  • [AI]主流大模型、ChatGPTDeepseek、国内免费大模型API服务推荐(支持LangChain.js集成)
  • 手机IP地址更换的影响与操作指南