STM32固件库介绍

目录

1. CMSIS 标准

2. 库目录及文件介绍

2.1 文件夹介绍

2.2 文件介绍

3. 库帮助文档使用


STM32 芯片十分庞大,内部寄存器非常多,如果同时操作多个外设时, 那么就需要花很多时间查询底层寄存器内容,而且即使程序写好,如果要换其他 端口或者外设的话,修改起来非常麻烦,而且容易出错,移植性差

基于这些原因,ST 公司推出了一套固件库,内部已经封装好将STM32 的全部外设寄存器的控制,给用户提供一些 API 函数,用户只需要学习如何使用这些 API 函数即可

学习STM32固件库可以参考《STM32F1xx 中文参考手册》、《Cortex-M3 权威指南》、《STM32 固件库使用手册(中文翻译版)》

STM32103C8T6手册 https://pan.baidu.com/s/1QW5qer_xGiMZMolMGR7fow?pwd=7gnz 

STM32中文参考手册 https://pan.baidu.com/s/1GDaMNNC3eKiT6KTV-NDs0w?pwd=je2x 

1. CMSIS 标准

 CMSIS 标准英文全称是 Cortex MicroController Software Interface Standard,翻译为中文意思就是 ARM Cortex 微控制器软件接口标准

由于基于 Cortex 核的芯片厂商很多,不只是 ST 公司,为了解决不同 厂家的 Cortex 核芯片软件兼容的问题,ARM 和这些厂家就建立了这套 CMSIS 标准

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

从图中可以看出,CMSIS 处于中间层,向上提供给用户程序和实时操作系统所需的函数接口,向下负责与内核和其他外设通信

假如没有 CMSIS 标准,基于Cortex 的芯片厂商就会设计出自己喜欢的风格库函数,因此 CMSIS 标准就是要强制他们必须按照这个标准来设计

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

(1)核内外设访问层

ARM 公司提供的访问,定义处理器内部寄存器地址以及功能函数

(2)中间件访问层

定义访问中间件的通用 API,由 ARM 提供,芯片厂商根据需要进行更新

(3)外设访问层

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

总的来说其实 CMSIS 就是统一各芯片厂商固件库内函数的名称,比如在系统初始化的时候使用的是 SystemInit 这个函数名,那么 CMSIS 标准就是强制所有使用 Cortex 核设计芯片的厂商内固件库系统初始化函数必须为这个名字,不能修改

2. 库目录及文件介绍

2.1 文件夹介绍

ST 公司按照这个 CMSIS 标准设计了一套基于STM32F10x 的固件库,可以直接在 ST 公司的官网进行下载 https://www.stmcu.com.cn/

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

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

Libraries 文件夹:在这个文件夹内有两个子目录

CMSIS 文件夹 用于存放符合 CMSIS 标准的文件,包括 STM32 启动文件、ARM Cortex 内核文件和对应外设头文件 stm32f10x.h

STM32F10x_StdPeriph_Driver 文件夹 用于存放STM32 外设驱动文件,inc 目录用于存放外设的头文件,src 目录用于存放外设的源文件。

从这些源文件的命名就可以知道对应文件的功能,比如stm32f10x_gpio.c 文件,包含了对 STM32 的 GPIO 寄存器的操作函数等,如果要对 STM32 GPIO 操作可以调用这个文件内的函数,但是要记得添加对应的头文件,如stm32f10x_gpio.h 此文件夹内文件在后面创建库函数模板的时候会重点使用

Project 文件夹:此文件夹下有 2 个目录

STM32F10x_StdPeriph_Examples 文件夹 存放的是 ST 公司提供的外设驱动例程, 在开发过程中可以借鉴这些例程快速构建自己的外设驱动。有时间大家可以看看,里面的编程思路对我们还是很有帮助的

STM32F10x_StdPeriph_Templates 文件夹 存放的是官方的固件库工程模板,后面创建自己工程模板的时候就需要复制此文件夹内的几个文件

Utilities 文件夹:此文件夹是 ST 官方评估板的一些源文件

stm32f10x_stdperiph_lib_um.chm 文件:这个文件是固件库的帮助文档,可以直接双击打开。这个文档对于后面学习库函数是非常有帮助的,但是只有英文版的

2.2 文件介绍

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

(1)core_cm3.h文件

位于“\STM32最新固件库v3.5\Libraries\CMSIS\CM3\CoreSupport”目录下,此文件属于CMSIS标准文件,用来提供进入M3内核的接口文件,属于CMSIS的核心文件,由ARM提供。

对于所有M3内核的芯片来说这个文件都是相同的,不需要修改

(2)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的总线、内存和外设寄存器等,同时该文件还包含了一些时钟相关的定义和中断相关定义等

(3)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”内

(4)stm32f10x_it.c文件

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

5)stm32f10x_conf.h文件

配置文件,用于删减使用的外设头文件,比如使用GPIO外设,那么就需要调用stm32f10x_gpio.h头文件,如果不使用GPIO外设,可以将此头文件注释掉

一般情况下我们不会对这个配置文件操作,因为如果不使用一个外设,可以在工程内不调用即可。这几个文件存放在“\STM32最新固件库v3.5\Project\STM32F10x_StdPeriph_Template”内

(6)Application.c文件

用于存放用户编写的应用程序,文件名可以任意命名。通常命名为main.c,表示存放我们的主函数代码

在后面我们创建工程模板时,添加这些文件还不够,还要将STM32的启动文件添加进来,否则系统不能启动

ST固件库提供的启动文件有很多,需根据使用的STM32芯片来选择,因为开发板上使用的是中容量的STM32F1芯片,所以选择startup_stm32f10x_md.s

启动文件startup_stm32f10x_md.s 存放在“\STM32最新固件库

v3.5\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm”内

3. 库帮助文档使用

在进行库函数开发时,会遇到各种函数不知其含义以及使用方法的困扰,ST公司提供了一套库函数使用说明文档,但是是英文的,没关系,因为函数的使用方法介绍比较简单,也就是那么些专业词语,大家多查几遍就认识了

这个在前面介绍固件库文件夹时也提到过,为 stm32f10x_stdperiph_lib_um.chm,我们可以直接打开,如下图所示:

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

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

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

这里给大家介绍的是使用库函数帮助文档来查找函数功能说明等信息,还可以通过固件库源码来查找,其实库函数帮助文档就是从固件库源码转换过而来

通过固件库查找在后面创建工程模板的时候会给大家介绍

还可以参考《STM32固件库使用手册(中文翻译版)》文档
下载链接:https://pan.baidu.com/s/10m425Lp9M3s5RGaoEMdY0w?pwd=5ldw 
该文档是上面固件库的中文翻译版,有些函数没有,还有些地方可能与实际固件库函数有点差别,大部分还是一样的,完全可以借鉴,后面在编写程序的过程中,会经常使用到它。

  • 21
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值