4、STM32之3.5版本库简介

1、什么是STM32库函数 

2、CMSIS标准 

3、库目录、文件简介

 

1、什么是STM32库函数?

 

STM32库是ST公司针对STM32提供的函数接口,即API(Application ProgramInterface Interface)。是已经封装好的一个软件封装库,也就是很多基础代码,开发者可调用这些函数接口来配置STM32的寄存器,使得开发人员得以脱离最底层的寄存器操作。

2 什么是CMSIS

 

我们知道由ST公司生产的STM32采用的是Cortex_M3内核,内核是整个微控制器的CPU。该内核是ARM公司设计的一个处理器体系架构,ARM公司并不生产芯片,而是出售其芯片技术授权。

ST公司或其它芯片生产厂商如TI,负责设计的是在内核之外的部件,被称为核外外设或片上外设、设备外设。如芯片内部的模数转换外设ADC、串口UART、定时器TIM等。内核与外设,如同PC上的CPU与主板、内存、显卡、硬盘的关系。

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

所谓的CMSIS标准,实际是新建了一个软件抽象层.

CMSIS标准中最主要的为CMSIS核心层,它包括内核函数层、设备外设访问层

内核函数层,其中包含用于访问内核寄存器的名称、地址定义、主要由ARM公司提供。

设备外设访问层:提供了片上的核外外设的地址和中断定义,主要由芯片生产商提供

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

 

 

 

 

 

 

 

 

3、库目录、文件简介

目前STM32固件库的最新版本为V3.50,可以从ST官网上下载

Libraries文件夹:是驱动库的源代码及启动文件

Project文件夹:是用驱动库示例和工程模板

Utilities:基于ST官方开发板的例程

Release_Notes:库版本更新说明

stm32f10x_stdperiph_lib_um:库使用帮助文件

 

 

 

 

Core_cm3.c

Libraries\CMSIS\CM3文件夹下又分为CoreSupport和DeviceSupport文件

CoreSupport中的是位于CMSIS标准的核内设备函数层的M3核通用的源文件Core_cm3.c和头文件Core_cm3.h,它们的作用是为那些采用Cortex_M3核设计SOC的芯片商设计的芯片外设提供一个进入M3内核的接口,这两个文件在其它公司的M3系列芯片也是相同的,我们不关心它的源码是如何实现的,我们只需把这个文件加进我们的工程文件即可。

Core_cm3.c文件还有一些与编译相关条件编译语句,用于屏蔽不同编译器的差异

较为重要的是在Core_cm3.c文件中包含 Stdin.h这个头文件,这是一个ANSI  C 文件,是独立于处理之外的,就像我们熟知的C语言头文件Sddio.h文件一样,位于RVMDK这个软件的安装目录下,主要作用是提供一些新类型定义

这些新类型定义屏蔽了在不同芯片平台时,出现的差异,如ini的大小是16位还是32位,新类型使用int16_t、int32-t

Core_cm3.c跟启动文件一样都是底层文件,都是由ARM公司提供的,遵守CMSIS标准,即所有的CM3芯片的库都带有这个文件,这样软件在不同的CM3芯片的移植工作就得以简化

System_stm32f10x.c文件

在DeviceSupport文件夹下的是启动文件、外设寄存器定义和中断向量定义层的一些文件 ,这是由ST公司提供的。

System_stm32f10x.c,遵守CMSIS标准,该文件的功能是设置系统时钟和总线时钟,M3比51单片机复杂很多,并不是说我们外部给一个8M的晶振,M3整个系统就以8M为时钟协调整个处理器工作,我们还要通过M3核的核内寄存器对8M的时钟进行倍频,分频,或者使用芯片内部的时钟。所有的外设都与时钟的频率有关,所以这个文件的时钟配置是很关键的。

System_stm32f10x.c在实现系统时钟的时候要用到PLL(锁相环),这就需要操作寄存器,寄存器都是以存储器映射的方式来访问的,所以该文件中包含 System_stm32f10x.h这个头文件。

stm32f10x.h这个文非常重要,是一个非常底层 文件,所有处理器厂商都会将内存的操作封装成一个宏,即我们常说的寄存器,并且把这些封装成一个系统文件,包含 相应的开发环境中,这样,我们在开发自己的应用程序时,只要将这个文件包含是来就可以了。

启动文件

Libraries\CMSIS\Core\CM3\Startup\arm文件夹下是由汇编编写的系统启动文件,不同的文件对应不册的芯片型号,在使用时要注意

 

cl:指互联型产品,stm32f10/107系列

xl:超高密度(容量)产品,stm32f101/103系列

ld:低密度产品,FLASH小于64K

md:中等密度产品,FALSH为64K或128K

hd:高密度产品,FLASH大于128K

启动文件是任何处理器在上电复位之后最先运行的一段汇编程序,在我们编写的C语言代码运行之前,需要由汇编为C语言的运行建立一个合适的环境,接下来才能运行我们的程序,所以我们也要把启动文件添加到我们的工程中去

启动代码的作用:

1 .初始化堆栈指针SP; 

2. 初始化程序计数器指针PC; 

3. 设置堆、栈的大小; 

4. 设置异常向量表的入口地址; 

5. 配置外部SRAM作为数据存储器(这个由用户配置,一般的开发板可没

有外部SRAM); 

6. 设置C库的分支入口__main(最终用来调用main函数); 

 

 STM32F10x_StdPeriph_Driver文件夹

Libraries\STM32F10x_StdPeriph_Driver文件夹下有inc(include的缩写)跟src(source的简写)这两个文件夹,这都属于CMSIS的设备外设函数 部分。 src里面是每个设备外设的驱动程序,这些外设是芯片制造商在Cortex-M3核外加进去的

进入libraries目录下的STM32F10x_StdPeriph_Driver文件夹,在src 和inc文件夹里的就是ST公司针对每个STM32外设而编写的库函数文件,每个外设对应一个 .c 和 .h 后缀的文件。我们把这类外设文件统称为:stm32f10x_ppp.c 或stm32f10x_ppp.h文件,PPP表示外设名称。

 

如针对模数转换(ADC)外设,在src文件夹下有一个stm32f10x_adc.c源文件,在inc文件夹下有一个stm32f10x_adc.h头文件,若我们开发的工程中用到了STM32内部的ADC,则至少要把这两个文件包含到工程里。

 

这两个文件夹中,还有一个很特别的misc.c文件,这个文件提供了外设对内核中的NVIC(中断向量控制器)的访问函数,在配置中断时,我们必须把这个文件添加到工程中。

stm32f10x_it.c、 stm32f10x_conf.h文件

stm32f10x_it.c,是专门用来编写中断服务函数的,在我们修改前,这个文件已经定义了一些系统异常 的接口,其它普通中断服务函数由我们自己添加。

如要编写外部中断的中断服务函数,如上图所示“void EXTI0_IRQHandler(void)便是已经定义好的,中断服务程序只需要用户自行添加即可。

stm32f10x_conf.h,这个文件被包含进stm32f10x.h 文件。是用来配置使用了什么外设的头文件,用这个头文件我们可以很方便地增加或删除上面driver目录下的外设驱动函数库。如下面的代码配置表示使用了gpio、rcc、spi、usart的外设库函数,其它的注释掉的部分,表示没有用到。 

stm32f10x_it.c、 stm32f10x_conf.h文件

stm32f10x_it.c,是专门用来编写中断服务函数的,在我们修改前,这个文件已经定义了一些系统异常 的接口,其它普通中断服务函数由我们自己添加。

如要编写外部中断的中断服务函数,如上图所示“void EXTI0_IRQHandler(void)便是已经定义好的,中断服务程序只需要用户自行添加即可。

 

stm32f10x_conf.h,这个文件被包含进stm32f10x.h 文件。是用来配置使用了什么外设的头文件,用这个头文件我们可以很方便地增加或删除上面driver目录下的外设驱动函数库。如下面的代码配置表示使用了gpio、rcc、spi、usart的外设库函数,其它的注释掉的部分,表示没有用到。 

 

库各文件间关系

州仔 发表于05-29 12:59 浏览65211次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

州仔
州仔()
金币:3354个|学分:191145个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号