stm32标准库开发需要的基本文件结构

使用STM32标准库(STM32 Standard Peripheral Library,SPL)开发时,项目中必须包含一些必要的文件,这些文件确保项目能够正常运行并与MCU硬件交互。以下详细说明:


一、标准库核心文件夹说明

使用标准库开发STM32项目时,通常需要以下主要文件和目录结构:

Project
│
├── User(用户应用程序文件夹)
│    ├── main.c                       // 用户程序入口文件,包含主函数main(),编写具体应用逻辑
│    └── stm32f10x_conf.h             // STM32标准库配置文件,选择启用的外设库及相关宏定义
│
├── Libraries(库文件夹,包含所有基础支持文件)
│    │
│    ├── CMSIS(Cortex-M处理器软件接口标准库)
│    │   │
│    │   ├── Include                  // Cortex-M核心库通用头文件
│    │   │   └── core_cm3.h           // Cortex-M3处理器核心寄存器定义,提供NVIC、SysTick等内核功能
│    │   │
│    │   └── Device
│    │       └── ST
│    │           └── STM32F10x
│    │               │
│    │               ├── Include      // STM32F10x MCU硬件寄存器及系统定义头文件
│    │               │   ├── stm32f10x.h 
│    │               │   │             // STM32F10x芯片的寄存器地址定义和位掩码宏,所有外设寄存器的基础定义
│    │               │   └── system_stm32f10x.h
│    │               │                 // 系统时钟初始化函数声明及相关系统频率参数定义
│    │               │
│    │               └── Source       // STM32芯片启动文件与系统初始化源文件
│    │                   ├── system_stm32f10x.c
│    │                   │             // MCU系统时钟配置函数实现,包含SystemInit()函数,负责时钟树初始化
│    │                   └── startup_stm32f10x_md.s
│    │                                 // STM32启动汇编代码,定义中断向量表,堆栈初始化,调用SystemInit()后进入main()
│    │                                 //(注:不同芯片容量版本启动文件可能不同,例如_md适合中等密度芯片)
│    │
│    └── STM32F10x_StdPeriph_Driver(STM32标准外设驱动库)
│         │
│         ├── inc(标准库外设驱动头文件,函数声明)
│         │   ├── stm32f10x_gpio.h     // GPIO外设驱动函数声明及相关结构定义,用于GPIO初始化及控制
│         │   ├── stm32f10x_rcc.h      // RCC(时钟控制)驱动函数声明,提供时钟使能和系统频率配置功能
│         │   ├── stm32f10x_usart.h    // USART串口驱动函数声明,串口通信配置及数据收发函数
│         │   ├── stm32f10x_exti.h     // 外部中断/事件控制驱动函数声明,配置外部中断源和模式
│         │   ├── stm32f10x_tim.h      // 通用定时器驱动函数声明,用于计时器初始化、PWM输出和计数功能
│         │   └── (其他外设头文件,根据项目需求添加)
│         │
│         └── src(标准库外设驱动源文件,函数具体实现)
│             ├── stm32f10x_gpio.c     // GPIO驱动函数实现,包含GPIO引脚模式配置及输入输出控制
│             ├── stm32f10x_rcc.c      // RCC驱动函数实现,提供时钟系统初始化及各外设时钟开启/关闭
│             ├── stm32f10x_usart.c    // USART驱动函数实现,串口通信参数配置及数据发送/接收功能实现
│             ├── stm32f10x_exti.c     // EXTI驱动函数实现,外部中断配置及中断服务处理功能
│             ├── stm32f10x_tim.c      // TIM通用定时器驱动函数实现,包含定时、中断和PWM输出等功能
│             └── (其他外设源文件,根据项目需求添加)
│
└── Project settings(工程配置文件夹,由IDE自动生成,具体文件根据IDE不同有所差异)├── Project.uvprojx               // Keil MDK项目文件,包含工程配置(芯片型号、编译选项等)└── (其他IDE工程文件,根据实际开发环境而定)

二、必备的核心文件说明

开发STM32项目时,必须包含以下文件:

1. 启动文件(startup_xxx.s)
  • 作用:MCU复位后执行的汇编启动代码,负责初始化栈指针(SP),PC指针,异常向量表,中断向量表,调用SystemInit函数后进入main函数。
  • 文件示例startup_stm32f10x_md.s(根据芯片具体型号选择不同文件)
  • 位置
    Libraries/CMSIS/Device/ST/STM32F10x/Source/Templates/TrueSTUDIO/startup_stm32f10x_md.s
    
    (根据不同IDE,可能路径不同,如MDK、IAR、GCC分别不同)

2. 系统初始化文件(system_stm32f10x.c/.h)
  • 作用:配置系统时钟和PLL,设置系统时钟频率,以及提供SystemCoreClock变量更新函数。
  • 文件示例system_stm32f10x.csystem_stm32f10x.h
  • 位置
    Libraries/CMSIS/Device/ST/STM32F10x/Source/Templates/system_stm32f10x.c
    Libraries/CMSIS/Device/ST/STM32F10x/Include/system_stm32f10x.h
    

3. 芯片头文件与寄存器定义(stm32f10x.h)
  • 作用:定义STM32芯片外设和寄存器地址,定义了大量寄存器结构体,便于底层寄存器操作。
  • 文件示例stm32f10x.h
  • 位置
    Libraries/CMSIS/Device/ST/STM32F10x/Include/stm32f10x.h
    

4. 外设驱动标准库文件(外设驱动函数库)
  • 作用:提供外设API调用,封装了GPIO、USART、RCC、ADC、SPI、I2C等常用外设的函数库。
  • 文件示例
    • GPIO:stm32f10x_gpio.cstm32f10x_gpio.h
    • RCC:stm32f10x_rcc.cstm32f10x_rcc.h
    • USART:stm32f10x_usart.cstm32f10x_usart.h
  • 位置
    Libraries/STM32F10x_StdPeriph_Driver/src/*.c
    Libraries/STM32F10x_StdPeriph_Driver/inc/*.h
    

5. 库配置头文件(stm32f10x_conf.h)
  • 作用:用于选择启用哪些外设驱动模块,并配置库的参数选项。
  • 文件示例stm32f10x_conf.h
  • 位置:通常位于项目的User文件夹(自定义创建)
  • 示例片段:
    /* Define to prevent recursive inclusion -------------------------------------*/
    #ifndef __STM32F10x_CONF_H
    #define __STM32F10x_CONF_H/* Includes ------------------------------------------------------------------*/
    #include "stm32f10x_gpio.h"
    #include "stm32f10x_rcc.h"
    #include "stm32f10x_usart.h"
    // 启用需要的外设库头文件,未启用的库就注释掉/* Exported macro ------------------------------------------------------------*/
    #define assert_param(expr) ((void)0)#endif /* __STM32F10x_CONF_H */
    

6. Cortex-M3/M4 核心库文件(core_cm3.h 或 core_cm4.h)
  • 作用:提供Cortex-M内核基础函数,如NVIC中断、SysTick定时器、系统复位、低功耗管理。
  • 文件示例core_cm3.h
  • 位置
    Libraries/CMSIS/Include/core_cm3.h
    

7. 用户应用程序文件(main.c等)
  • 作用:用户主程序入口,包含用户自定义的功能代码。
  • 位置:自定义放置于项目的User文件夹中,示例如下:
    #include "stm32f10x.h"int main(void)
    {// 用户代码初始化while(1){// 用户应用循环}
    }
    

以上为STM32标准库开发项目所必须使用和包含的文件及目录结构详细说明。实际项目开发时,应根据芯片型号和应用需求适当增减外设驱动文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/73138.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学生管理系统(需求文档)

需求: 采取控制台的方式去书写学生管理系统 分析: 初始菜单: “----------欢迎来到java学生管理系统----------” “1:添加学生” “2:删除学生” “3:修改学生” “4:查询学生” “5:…

Java算法OJ(13)双指针

目录 1.前言 2.正文 2.1快乐数 2.2盛最多水的容器 2.3有效的三角形的个数 2.4和为s的两个数 2.5三数之和 2.6四数之和 3.小结 1.前言 哈喽大家好吖,今天继续加练算法题目,一共六道双指针,希望能对大家有所帮助,废话不多…

SpringBoot分布式定时任务实战:告别重复执行的烦恼

场景再现:你刚部署完基于SpringBoot的集群服务,凌晨3点突然收到监控告警——优惠券发放量超出预算两倍!检查日志发现,两个节点同时执行了定时任务。这种分布式环境下的定时任务难题,该如何彻底解决? 本文将…

MySQL 设置允许远程连接完整指南:安全与效率并重

一、为什么需要远程连接MySQL? 在分布式系统架构中,应用程序与数据库往往部署在不同服务器。例如: Web服务器(如NginxPHP)需要连接独立的MySQL数据库数据分析师通过BI工具直连生产库多服务器集群间的数据同步 但直接…

系统架构书单推荐(一)领域驱动设计与面向对象

本文主要是个人在学习过程中所涉猎的一些经典书籍,有些已经阅读完,有些还在阅读中。于我而言,希望追求软件系统设计相关的原则、方法、思想、本质的东西,并希望通过不断的学习、实践和积累,提升自身的知识和认知。希望…

动态规划-01背包

兜兜转转了半天,发现还是Carl写的好。 看过动态规划-基础的读者,大概都清楚。 动态规划是将大问题,分解成子问题。并将子问题的解储存下来,避免重复计算。 而背包问题,就是动态规划延申出来的一个大类。 而01背包&…

使用VS2022编译CEF

前提 选择编译的版本 CEF自动编译,在这里可以看到最新的稳定版和Beta版。 从这里得出,最新的稳定版是134.0.6998.118,对应的cef branch是6998。通过这个信息可以在Build requirements查到相关的软件配置信息。 这里主要看Windows下的编译要…

C++20:玩转 string 的 starts_with 和 ends_with

文章目录 一、背景与动机二、string::starts_with 和 string::ends_with(一)语法与功能(二)使用示例1\. 判断字符串开头2\. 判断字符串结尾 (三)优势 三、string_view::starts_with 和 string_view::ends_w…

智能飞鸟监测 守护高压线安全

飞鸟检测新纪元:视觉分析技术的革新应用 在现代化社会中,飞鸟检测成为了多个领域不可忽视的重要环节。无论是高压线下的安全监测、工厂内的生产秩序维护,还是农业区的作物保护,飞鸟检测都扮演着至关重要的角色。传统的人工检测方…

ADC噪声全面分析 -04- 有效噪声带宽简介

为什么要了解ENBW? 了解模数转换器 (ADC) 噪声可能具有挑战性,即使对于最有经验的模拟设计人员也是如此。 Delta-sigma ADC 具有量化和热噪声的组合,这取决于 ADC 的分辨率、参考电压和输出数据速率 (ODR)。 在系统级别,额外的信…

STM32单片机uCOS-Ⅲ系统10 内存管理

目录 一、内存管理的基本概念 二、内存管理的运作机制 三、内存管理的应用场景 四、内存管理函数接口讲解 1、内存池创建函数 OSMemCreate() 2、内存申请函数 OSMemGet() 3、内存释放函数 OSMemPut() 五、实现 一、内存管理的基本概念 在计算系统中,变量、中…

考研课程安排(自用)

文章目录 408数据结构(王道)计算机组成原理(王道)操作系统(王道)计算机网络(湖科大版) 数学一高等数学(微积分)线性代数和概率论 408 数据结构(王…

ultraiso制作u盘启动

UltraISO制作U盘启动盘的方法 UltraISO是一款功能强大的工具,可以帮助用户将ISO镜像文件写入U盘,从而制作成可启动的系统安装盘。以下是详细的步骤和注意事项: 1. ‌准备工作‌ ‌硬件准备‌:一个容量至少为8GB的U盘&#xff0…

C语言-发布订阅模式详解与实践

文章目录 C语言发布订阅模式详解与实践1. 什么是发布订阅模式?2. 为什么需要发布订阅模式?3. 实际应用场景4. 代码实现4.1 UML 关系图4.2 头文件 (pubsub.h)4.3 实现文件 (pubsub.c)4.4 使用示例 (main.c) 5. 代码分析5.1 关键设计点5.2 实现特点 6. 编译…

蓝桥杯2023年第十四届省赛真题-异或和之差

题目来自DOTCPP: 思路: 什么是异或和? ①题目要求我们选择两个不相交的子段,我们可以枚举一个分界线i,子段1在 i 的左边, 子段2在 i 的右边,分别找到子段1和子段2的最大值、最小值。 ②怎么确…

Linux作业2——有关文件系统权限的练习

1、创建/www目录,在/www目录下新建name和https目录,在name和https目录下分别创建一个index.html文件,name下面的index.html文件中包含当前主机的主机名,https目录下的index.html文件中包含当前主机的ip地址。 #创建/www目录&…

leeCode 70. 爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 阶 示例 2&#x…

算法题(105):小猫爬山

审题: 本题需要我们找出将n个小猫放在有限重的缆车上运下山所需的最小缆车数 时间复杂度分析:本题的数据量小于等于18,所以我们在做好剪枝的前提下可以使用深度优先搜索解题 思路: 方法一:dfs 搜索策略:将小…

第十六章:Specialization and Overloading_《C++ Templates》notes

Specialization and Overloading 一、模板特化与重载的核心概念二、代码实战与测试用例三、关键知识点总结四、进阶技巧五、实践建议多选题设计题代码测试说明 一、模板特化与重载的核心概念 函数模板重载 (Function Template Overloading) // 基础模板 template<typename…

多协议兼容+高并发处理:EasyCVR如何破解AI安防规模化落地难题?

随着AI技术在安防领域的深入应用&#xff0c;规模化部署面临两大核心挑战&#xff1a;设备协议碎片化导致的接入壁垒与海量视频流并发带来的性能瓶颈。TSINGSEE青犀视频的EasyCVR平台通过“多协议兼容高并发处理”双引擎驱动&#xff0c;结合云边端协同架构与智能算法优化&…