STM32基于固件库编程——初识固件库

目录

CMSIS标准及库层次关系

 CMSIS文件夹

内核相关文件

启动文件:

stm32f10x.h

system_stm32f10x.c

 stm32f10x_it.c、stm32f10x_conf.h和system_stm32f10x.c文件

库各文件间的关系


初识固件库

CMSIS标准及库层次关系

因为基于Cortex系列芯片采用的内核都是相同的,区别主要为核外的片上外设的差异,这些差异却导致软件在同内核,不同的外设芯片上移植困难。为了解决不同的芯片厂商生产的Cortex微控制器的兼容性问题,ARM与芯片厂商建立了CMSIS标准(Cortex MicroController Software Interface Standard)。

所谓CMSIS标准,实际是建立了一个软件抽象层。见图CMSIS架构。

 CMSIS标准中最主要的就是CMSIS核心层,它包括了:

  • 内核函数层:其中包含用于访问内核寄存器的名称、地址定义,主要由ARM公司提供
  • 设备外设访问层:提供了片上的核外外设的地址和中断定义,主要由芯片生产商提供。

可见CMSIS层位于硬件层与操作系统或用户层之间,提供了与芯片厂商无关的硬件抽象,可以为接口外设、实时操作系统提供简单的处理器软件接口,屏蔽了硬件差异,这对软件的移植时由极大的好处的。STM32的库,就是按照CMSIS标准建立的。

2.库目录、文件简介

STM32标准路可以从官网获得,以下内容为大家打开STM32标准库文件

解压后文件进入其目录:

STM32F10x_StdPeriph_Lib_V3.5.0\

软件库各文件夹内容说明见下图:

Libraries:文件夹下时驱动库的源代码及启动文件,这个非常重要,我们要使用的固件库就是在这个文件中。

Project:文件夹下是用驱动库写的例子和工程模板,其中那些为每个外设写好的例程对我们非常有用,我们在学习的时候就可以参考这里面的例程,非常全面,简直就是穷尽了外设的所有功能

Utilities:包含了基于ST官方实验板的例程,不需要用到,略过即可。

stm32f10x_stdperiph_lib_um.chm:库帮助文档这个很有用,不喜欢直接看源码的可以在合理查询每个外设的函数说明、非常详细。

 CMSIS文件夹

STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS文件夹内容展开见下图所示CMSIS文件夹内容,

 其中黄色框框主要是我们需要用到的内容:下面我们讲解这几个文件的作用:

内核相关文件

在CoreSupport文件夹中有core_cm3.c和core_cm3.h两个文件。Core_cm3.h头文件中实现了内核的寄存器映射,对应外设头文件stm32f10x.h,区别就是一个针对内核的外设,一个针对片上(内核之外)的外设。core_cm3.c文件中实现了一个操作内核外设寄存器的函数,用的比较少。

我们还需要了解的是core_cm3.h头文件中包含了"stdint.h"头文件,这是一个ANSI C文件,是独立于处理器之外的,就像我们熟知的C语言头文件"位于stdio.h"文件一样,位于MDK软件的安装目录下,主要作用是提供一些类型的定义。

启动文件:

启动文件放在startup/arm这个文件夹下,这里面启动文件有很多个,不同型号的单片机用的启动文件不一样,有关每个启动文件的详细说明见表:

启动文件区别
startup_stm32f10x_ld.sld:low-density小容量,FLASH容量在16-32K之间
startup_stm32f10x_md.smd:medium-density中容量,FLASH容量在64-128K之间
startup_stm32f10x_hd.shd:high-density大容量,FLASH容量在256-512K之间
startup_stm32f10x_xl.sxl:超大容量,FLASH容量在512-1024K之间
以上四种都属于基本型,包括STM32F101XX、STM32F102XX\t32f103xx系列
startup_stm32f10x_cl.scl:connectivity line devices互联型,特指STM32F105XX和STM32F107XX系列
startup_stm32f10x_ld_vl.svl:value line devices超值型系列,特指STM32F100XX系列
startup_stm32f10x_md_vl.s
startup_stm32f10x_hd_vl.s

stm32f10x.h

这个头文件实现了片上外设的所有寄存器的映射,是一个非常重要的头文件,在内核中与之相对应的头文件是core_cm3.h

system_stm32f10x.c

system_stm43f10x.c文件实现了STM32的时钟配置,操作的是片上的RCC这个外设。系统在上电之后,首选会执行由汇编编写的启动文件,启动文件中的复位函数中调用的是SystemInit函数就在这个文件里面定义。调用完之后,系统的时钟就被初始化为72M。

STM32F10X_StdPeriph_Driver文件夹

文件目录:Libraries\STM32F10x_StdPeriph_Driver

进入 libraries 目录下的 STM32F10x_StdPeriph_Driver 文件夹,见图外设驱动 。

STM32F10x_StdPeriph_Driver 文件夹下有 inc include 的缩写)跟 src source 的简写)这两个文件 夹,这里的文件属于 CMSIS 之外的的、芯片片上外设部分。 src 里面是每个设备外设的驱动源程 序,inc 则是相对应的外设头文件。 src inc 文件夹是 ST 标准库的主要内容,甚至不少人直接认 为 ST 标准库就是指这些文件,可见其重要性。
src inc 文件夹里的就是 ST 公司针对每个 STM32 外设而编写的库函数文件,每个外设对应
一个 .c .h 后缀的文件。我们把这类外设文件统称为: stm32f10x_ppp.c stm32f10x_ppp.h 文件, PPP 表示外设名称。如在上一章中我们自建的 stm32f10x_gpio.c stm32f10x_gpio.h 文件,就属 于这一类。
如针对模数转换 (ADC) 外设,在 src 文件夹下有一个 stm32f10x_adc.c 源文件,在 inc 文件夹下有 一个 stm32f10x_adc.h 头文件,若我们开发的工程中用到了 STM32 内部的 ADC ,则至少要把这 两个文件包含到工程里。见图驱动的源文件及头文件

 

 stm32f10x_it.c、stm32f10x_conf.h和system_stm32f10x.c文件

文件目录:STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template
在这个文件目录下,存放了官方的一个库工程模板,我们在用库建立一个完整的工程时,还需要
添加这个目录下的 stm32f10x_it.c、stm32f10x_it.h、stm32f10x_conf.h 和 system_stm32f10x.c 这四 个文件
stm32f10x_it.c:这个文件是专门用来编写中断服务函数的,在我们修改前,这个文件已经定义了
一些系统异常 (特殊中断) 的接口,其它普通中断服务函数由我们自己添加。但是我们怎么知道
这些中断服务函数的接口如何写?是不是可以自定义呢?答案当然不是,这些都可以在汇编启动
文件中找到,在学习中断和启动文件的时候我们会详细介绍
system_stm32f10x.c:这个文件包含了 STM32 芯片上电后初始化系统时钟、扩展外部存储器用的
函数,例如我们前两章提到供启动文件调用的“SystemInit”函数,用于上电后初始化时钟,该函
数的定义就存储在 system_stm32f10x.c 文件。STM32F103 系列的芯片,调用库的这个 SystemInit 函数后,系统时钟被初始化为 72MHz,如有需要可以修改这个文件的内容,设置成自己所需的 时钟频率,但鉴于保持库的完整性,我们在做系统时钟配置的时候会另外重写时钟配置函数。
stm32f10x_conf.h:这个文件被包含进 stm32f10x.h 文件。当我们使用固件库编程的时候,如果
需要某个外设的驱动库,就需要包含该外设的头文件:stm32f10x_ppp.h,包含一个还好,如果
是用了多外设,就需要包含多个头文件,这不仅影响代码美观也不好管理,现我们用一个头
文件 stm32f10x_conf.h 把这些外设的头文件都包含在里面,让这个配置头文件统一管理这些外
设的头文件,我们在应用程序中只需要包含这个配置头文件即可,我们又知道这个头文件在
stm32f10x.h 的最后被包含,所以最终我们只需要包含 stm32f10x.h 这个头文件即可,非常方便。
Stm32f10x_conf.h 见代码清单: 标准库-2 。默认情况下是所以头文件都被包含,没有被注释掉。我
们也可以把不要的都注释掉,只留下需要使用的即可。

库各文件间的关系

  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值