【普中STM32F1xx开发攻略--标准库版】-- 第 9 章 STM32 固件库介绍 - 实践

news/2025/11/23 9:43:19/文章来源:https://www.cnblogs.com/ljbguanli/p/19259523

【普中STM32F1xx开发攻略--标准库版】-- 第 9 章 STM32 固件库介绍 - 实践

(1)实验平台:

普中STM32F103朱雀开发板https://item.taobao.com/item.htm?id=620302685024普中STM32F103玄武开发板https://item.taobao.com/item.htm?id=603479028876(2)资料下载:普中科技-各型号产品资料下载链接


前面章节为大家简单介绍了如何使用寄存器点亮开发板上 LED, 这种开发方式显然是不适合大众, 对于 STM32 这样庞大的芯片, 内部寄存器实在太多, 如果操作的外设比较多, 那么就需要花很多时间查询底层寄存器内容, 而且即使程序写好, 如果要换其他端口或者外设的话, 修改起来很麻烦, 而且容易出错, 移植性也差。 基于这些原因, ST 公司推出了一套固件库, 内部已经将 STM32 的全部外设寄存器的控制封装好, 给用户提供一些 API 函数, 用户只需要学习如何使用这些 API 函数即可。 本章将向大家介绍这套固件库, 为后面库函数模板创建做好铺垫。 学习本章可能参考《STM32F1xx 中文参考手册》 、 《Cortex-M3 权威指南》 、 《STM32 固件库使用手册(中文翻译版)》 。 本章分为如下几部分内容:

目录

9.1 CMSIS 标准

9.2 库目录及文件介绍

9.2.1 文件夹介绍

9.2.2 档案介绍

9.3 库帮助文档使用


9.1 CMSIS 标准

ST 公司, 为了处理不同厂家的 Cortex 核芯片软件兼容的问题, ARM 和这些厂家就建立了这套 CMSIS 标准。就是什 么 是 CMSIS 标 准 ? CMSIS 标 准 英 文 全 称 是 Cortex MicroController Software Interface Standard, 翻译为中文意思就是 ARM Cortex 微控制器软件接口标准。 由于基于 Cortex 核的芯片厂商很多, 不只

我们可以借助一个基于 CMSIS 标准的应用程序框图来看其重要性。 如下图所示

从图中行看出, CMSIS 处于中间层, 向上提供给用户程序和实时操作系统所需的函数接口, 向下负责与内核和其他外设通信。 假如没有 CMSIS 标准, 基于Cortex 的芯片厂商就会设计出自己喜欢的风格库函数。 因此 CMSIS 标准就是要强制他们必须按照该标准来设计。

在 CMSIS 核心层又分为 3 个基本功能层:

(1) 核内外设访问层:ARM 公司提供的访问, 定义处理器内部寄存器地址以及功能函数。

(2) 中间件访问层:定义访问中间件的通用 API, 由 ARM 给予, 芯片厂商根据应该更新。

(3) 外设访问层:在该访问层。就是定义硬件寄存器的地址以及外设的访问函数, 比如 ST公司提供的固件库外设驱动档案(stm32f10x_gpio.c 等文件) 就

总的来说其实 CMSIS 就是统一各芯片厂商固件库内函数的名称, 比如在架构初始化的时候应用的是 SystemInit 这个函数名, 那么 CMSIS 标准就是强制所有运用 Cortex 核设计芯片的厂商内固件库系统初始化函数必须为这个名字, 不能修改。 又比如对 GPIO 口输出处理的函数: GPIO_SetBits, 此函数名也是不能随便定义的。 更多关于 CMSIS 标准介绍, 大家可能百度搜索下, 这里就不多解释。

9.2 库目录及档案介绍

上一节我们介绍了 CMSIS 标准, ST 公司按照这个标准设计了一套基于STM32F10x 的固件库, 我们可能直接在 ST 公司的官网进行下载, 在我们光盘“\8--STM32 相关资料\STM32 最新固件库 v3.5” 内也给大家提供了下载好的包,我们提供的固件库包版本是 V3.5。

9.2.1 文件夹介绍

下面就来介绍库文件的目录及文件。 我们打开下载好的固件库包如下图所示:

(1) _htmresc 文件夹:存放 ST 公司的 LOGO 图标, 这个文件夹不用管。

(2) Libraries 文件夹:在该文件夹内有两个子目录, CMSIS 文件夹用于存放符合 CMSIS 标准的文件, 包括 STM32 启动文件、 ARM Cortex 内核文件和对应外设头文件 stm32f10x.h。 STM32F10x_StdPeriph_Driver 文件夹用于存放STM32 外设驱动文件, inc 目录用于存放外设的头文件, src 目录用于存放外设的 源 文 件 。 从 这 些 源 文 件 的 命 名 就 可 以 知 道 对 应 文 件 的 功 能 , 比 如stm32f10x_gpio.c 文件, 具备了对 STM32 的 GPIO 寄存器的操作函数等, 倘若要对 STM32 GPIO 操作可以调用这个记录内的函数, 然而要记得添加对应的头文件,如 stm32f10x_gpio.h。 此文件夹内文档在后面创建库函数模板的时候会重点采用。

(3) Project 文件夹:通过此文件夹下有 2 个目录, STM32F10x_StdPeriph_Examples 文件夹存放的是 ST 公司提供的外设驱动例程,在编写过程中能够借鉴这些例程快速构建自己的外设驱动。 有时间大家行看看, 里面的编程思路对大家还是很有支援的。 STM32F10x_StdPeriph_Templates文件夹存放的是官方的固件库工程模板, 我们后面创建自己工程模板的时候就需要复制此文件夹内的几个资料。

(4) Utilities 文件夹: ST 官方评估板的一些源文件, 这里不需要管。就是此文件夹

(5) stm32f10x_stdperiph_lib_um.chm 文件:通过这个资料是固件库的帮助文档, 能够直接双击打开。 这个文档对于后面学习库函数是特别有帮助的, 只不过这里只有英文版的, 可是里面的英文都很好理解, 如果学习过程中有不明白的单词, 都可能通过百度翻译等软件查询。

9.2.2 文件介绍

在介绍库文件之前先看下它们文件之间的关系, 如下图所示:

core_cm3.h 文件:位于“\STM32 最新固件库v3.5\Libraries\CMSIS\CM3\CoreSupport” 目录下, 说明此记录属于 CMSIS 标准文件, 是用来献出进入 M3 内核的接口文件, 属于 CMSIS 的核心文件, 由 ARM 提供。 对于所有 M3 内核的芯片来说这个文件都是相同的, 不需要我们修改。

stm32f10x.h 、 system_stm32f10x.h 和 system_stm32f10x.c 文件:存放在“\STM32 最新固件库v3.5\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x” 目录下, system_stm32f10x.h 是片上外设接入层环境头文件。 主要是申明设置系统及总线时钟相关的函数。 与其对应的源文件是 system_stm32f10x.c。 这个文件里面有一个非常关键的 SystemInit()函数申明, 这个函数在我们系统启动的时候都会调用, 用来设置系统的整个环境和总线时钟。 而 stm32f10x.h 是 STM32F10x的头文件, 类似于 51 单片机的 reg.51, 在开发 STM32F10x 程序的时候基本上都会调用这个头文件, 可见其重要性。 此文件内部封装了 STM32 的总线、 内存和外设寄存器等, 同时该档案还包含了一些时钟相关的定义和中断相关定义等。

stm32f10x_ppp.c文件:是STM32外设的驱动源文件, 比如stm32f10x_gpio.c文档。 里面已经封装好操作 GPIO 外设底层的内容, 供应给大家使用的是一些 API函数。 stm32f10x_ppp.h 就是对应的头文件。 还有 stm32f10x_rcc.c、 misc.c 和misc.h 文件他们都是存放在“\STM32 最新固件库v3.5\Libraries\STM32F10x_StdPeriph_Driver” 内。

stm32f10x_it.c 文件:通过用于存放中断函数, 不过中断函数也能够放在其他工程文件内, 所以这个档案很少操作, 对应的 stm32f10x_it.h 文件是它的头文件。

stm32f10x_conf.h 档案:是配置文件, 用于删减我们采用的外设头文件,比如使用 GPIO 外设, 那么就需要调用 stm32f10x_gpio.h 头文件, 如果不运用GPIO 外设, 可以将此头文件注释掉, 一般情况下我们不会对这个配置文件执行,因为如果不使用一个外设, 可以在工程内不调用即可。 这几个档案存放在“\STM32最新固件库 v3.5\Project\STM32F10x_StdPeriph_Template” 内。

Application.c 文件:用于存放用户编写的应用程序, 文件名可以根据个人爱好命名。 我们通常会命名为 main.c, 表示存放我们的主函数代码。

在后面大家创建工程模板时, 添加这些文件还不够, 还要将 STM32 的启动资料添加进来, 否则系统不能启动。 ST 固件库给出的启动资料有很多, 需根据使用的 STM32 芯片来选择, 因为开发板上运用的是高容量的 STM32F1 芯片, 因此选择 startup_stm32f10x_hd.s。 启动文件 startup_stm32f10x_hd.s 存放在“\STM32 最新固件库v3.5\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm” 内。

9.3 库协助文档使用

在进行库函数开发时, 难免会遇到各种函数不知其含义以及使用方法的困恼, 幸好 ST 公司提供了一套库函数应用说明文档, 但是英文的, 没关系, 因为函数的利用方法介绍比较简单, 也就是那么些专业词语, 大家多查几遍就认识了。 这个在前面介绍固件库文件夹时也提到过, 为stm32f10x_stdperiph_lib_um.chm, 我们可以直接打开, 如下图所示:

学习 STM32 库函数时所必备的, 所以要学会如何在该帮助文档内查找函数。 我们使用的库函数全部都在下图所示列表下:就是由于 STM32 库函数非常多, 我们不可能把所有的外设函数都记住, 那么这个帮助文档就

通过 GPIO 所有操控的库函数如下图所示:就是要查找哪个外设的库函数, 只需要找到对应的外设名称即可。 比如要查找对GPIO 外设操控的库函数, 我们能够在该列表下往下拉找到 GPIO 栏, 其中 IO Functions 列表下就

假如我们先在要查找 GPIO_Init 函数的特性说明及使用技巧, 许可在下拉列表中点击这个函数名即可进入。 在函数介绍内就有函数的原形、 作用简介、 参数说明、 函数返回值等信息。 如下图所示:

这里给大家介绍的是使用库函数援助文档来查找函数功能说明等信息, 还可能借助固件库源码来查找, 其实库函数帮助文档就是从固件库源码转换过而来。利用固件库查找在后面创建工程模板的时候会给大家介绍, 非常简单。 如果对英文感冒的朋友, 还可以参考《STM32 固件库使用手册(中文翻译版)》 文档, 该文档是上面固件库的中文翻译版,只不过有些函数没有, 还有些地方可能与实际固件库函数有点差别一样的, 完全可以借鉴, 后面在编写程序的过程中, 我们就会经常使用到它。就是, 不过大部分还

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

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

相关文章

详解Mysql的 sql_mode(SQL 模式)

详解Mysql的 sql_mode(SQL 模式) 详解 MySQL 的 sql_mode(SQL 模式) 一、sql_mode 核心概念 sql_mode 是 MySQL 中语法校验、数据校验、行为兼容的核心配置,它定义了 MySQL 对 SQL 语法的解析规则、数据有效性的…

字符串函数的运用

<!DOCTYPE html> <html lang="zh - CN"><head><meta charset="UTF - 8"><meta name="viewport" content="width=device-width, initial - scale=1.0&q…

关于字符

char存储的就是字符 比较 ‘0’ 计算-‘0’这是很重要的 最后的结果也一定要取模 int main() { int n;scanf("%d",&n); char g[n+2][20];int found=0; int qq[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4…

云数据仓库十年架构演进与技术革新

本文深入解析某中心云数据仓库服务十年的技术演进历程,涵盖分布式架构设计、存储计算分离、智能自治优化、多数据源集成等核心技术突破,详细介绍了系统如何通过持续创新实现性能提升和成本优化。云数据仓库十年架构演…

实用指南:QXmlStreamReader、QXmlStreamWriter和QDomElement区别

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

基础电气知识点梳理

2025/11/23电气基础知识点 交直流与安全 1. 交流电(AC) 电流特性:双向周期性变化 安全电压:36V(适配轻微潮湿环境)、42V(干燥环境上限,依据 GB/T 3805-2008) 摆脱电流:10mA(通用参考上限,成人男性均值约 1…

深入解析:缓存查询逻辑及问题解决

深入解析:缓存查询逻辑及问题解决2025-11-23 09:32 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !impo…

HTML 图片的放大和缩小

<!DOCTYPE html> <html><head><meta charset="utf-8"><title>童心少年</title></head><body><input type="text" onkeydown="keydown(e…

在Odoo中使用阿里云对象存储(OSS)

本章我们来看一下如何在odoo中使用阿里云对象存储(OSS)服务,将Odoo中的附件转存到阿里云对象存储上,以节省我们的服务器硬盘容量。 什么是对象存储 首先我们来了解一下什么是对象存储。 对象存储(Object Storage) 是…

数据科学团队领导指南-全-

数据科学团队领导指南(全)原文:zh.annas-archive.org/md5/0049e7ab941adb9b191a34ead7211805 译者:飞龙 协议:CC BY-NC-SA 4.0第一章:介绍 领导一个数据科学团队面临许多挑战。与组织的其他职能相比,数据科学往…

HTML 大写转小写

<!DOCTYPE html> <html><head><meta charset="utf-8"><title>童心少年</title><script>function asd(){var str=document.getElementById("fname");st…

图片3:字符串属性表

属性描述constructor 返回创建字符串属性的函数length 返回字符串的长度prototype 允许你向对象添加属性和方法

DC-01靶场渗透 - fish666

DC-01靶场渗透 首先,要将靶机和攻击机均设为NAT模式 kali IP 192.168.236.129 开始探寻靶机的ip 192.168.236.130 开启了 22 80 111的端口开始查询资料???111端口,rpcbind 记住一下 下一步,开始访问靶机…

图片2:字符串方法表

Method(方法)描述charAt() 返回指定索引位置的字符charCodeAt() 返回指定索引位置字符的Unicode值concat() 连接两个或多个字符串,返回连接后的字符串fromCharCode() 将指定的Unicode值转换为字符串indexOf() 返回字…

一种45度机翼的重力作用点和气流作用点合一的喷气式飞机

一种45度机翼的重力作用点和气流作用点合一的喷气式飞机 喷气式飞机以高灵活性,高速度而在各种类型的飞机中一枝独秀,要想使一个飞机具有超高速,必须具备大推力的涡扇发动机,以及优秀的外观气动布局。下面介绍一种…

反物质维持下的虫洞

反物质维持下的虫洞虫洞是爱因斯坦在广义相对论中提到的一个概念,又称爱因斯坦-罗森桥。它是指空间向外膨胀,向内塌陷,造成空间中相距很远的两点相互连接到一起。这就像苹果里面有一个虫洞,把苹果表面的两点连到了…

大模型基础(四):transformers库(上):pipline、模型、分词器 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

快速上手大模型:深度学习1(初识、神经网络基础) - 详解

快速上手大模型:深度学习1(初识、神经网络基础) - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

完整教程:【AI智能体】Coze 打造励志图文智能体应用实战操作详解

完整教程:【AI智能体】Coze 打造励志图文智能体应用实战操作详解2025-11-23 08:46 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !im…