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

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.xdnf.cn/news/9267.html

相关文章:

  • STM32之IIC(重点)和OLED屏
  • Spring Boot整合JWT实现认证与授权
  • screen开启和删除session会话
  • JSONP跨域原理全解析
  • OpenCV 图像像素的读写操作
  • SNMPv3基础概念
  • 02_MQ常见问题
  • 科研课题验收测试报告:用途与类型深度解析~
  • DFS入门刷题c++
  • 工业级UART数据转发芯片EU104 低功耗多串口芯片 1主4从多串口转发
  • 26、请求处理-【源码分析】-Rest映射及源码解析
  • 机器学习知识体系:从“找规律”到“做决策”的全过程解析
  • 走进黑盒:SQL 是如何在数据库中执行的?
  • Linux基础命令掌握-cut命令
  • 0527漏洞原理:SQL注入笔记
  • CSRF和XSS攻击防御指南
  • 院校机试刷题第十三天:代码随想录算法训练营第七天
  • 调不好分布式锁?HarmonyOS + Redis 分布式锁失效排查全路径
  • Oracle20200714GI_PSU补丁流程及问题收集
  • 一种比较精简的协议
  • python学习day30
  • SSTable(Sorted String Table)结构与用途详解
  • 数据类型(基本类型)day2
  • C-内存函数,动态内存
  • Qt布局连续添加控件
  • Web3怎么本地测试连接以太坊?
  • 封装文档核心知识点总结(通俗版)
  • 利用 MkDocs 和 GitHub 部署个人博客网页
  • LINUX安装运行jeelowcode后端项目(命令行)
  • 【运维自动化-标准运维】如何实现在不同步骤间传递参数