STM32标准库的介绍以及使⽤
初识STM32标准库
因为基于cortex系列芯⽚采⽤的内核都是相同的,区别主要为核外的⽚上的差异(⽚上外设主要有芯⽚⽣产商来定)。这些差异却导致软件在同内核,不同外设的芯⽚上移植困难。为了解决不同芯⽚⼚商⽣产的cortex微控制器软件的兼容性问题,ARM与芯⽚⼚商建⽴了CMSIS 标准。CMSIS层位于硬件层和⽤户层之间,提供了与芯⽚⽣产商⽆关的硬件抽象层,提供软件接⼝,疲敝了硬件的差异。
CMSIS标准最为主要的是CMSIS核⼼层,它包括:
内核函数层:⽤于访问内核寄存器。由ARM公司提供。
设备外设访问层:提供了⽚上的核外外设的地址和中断的定义,这个主要由芯⽚⽣产商提供。
STM32库⽬录、⽂件的功能
库⽂件可以从ST官⽹下载,这⾥以3.5.0版本为例介绍库的构成。
libraries:驱动库的源代码及启动⽂件。
Project: ⽤驱动库写的例⼦和⼯程模板。
utilities:包含了基于ST官⽅实验板的例程。
stm32f10x_stdperiph_lib_um.chm:库帮助⽂档,介绍各个外设的函数说明。
CMSIS核⼼层
libraries⽂件夹下的CMSIS/CM3就是核⼼库,其中包括
coresupport:这个由ARM公司提供,⾥⾯有core_cm3.c和core_cm3.h,实现了内核寄存器的映射,主要操作的是内核外设寄存器。
devicesupport/ST/STM32F10x/:⾥⾯包含的是ST⼚家定义的⼀些⽂件。其中startup/arm⽬录中包含了各种型号板⼦的启动⽂件(这⾥是跟flash的容量来划分的)。stm32f10x.h⽂件实现了⽚上外设所有寄存器的映射,是⼀个⾮常重要的头⽂件。
system_stm32f10x.c⽂件实现了STM32的时钟配置,systemInit函数把系统时钟设置为72M。
外设访问接⼝
STM32F10x_StdPeriph_Driver⽂件是针对各个芯⽚⼚商编写的驱动,⾥⾯有Inc和SRC两个⽂件夹,分别⽤来存放头⽂件和源⽂件。注意其中还有⼀个misc.c⽂件提供了外设对内核中的NVIC的访问接⼝,在配置中断时,需要把这个⽂件加⼊到⼯程中。
在⼯程建⽴时有⼏个⽂件需要添加:
stm32f10x_it.c 这个⽂件专门⽤来编写中断服务函数的。在⾥⾯实现中断服务函数的功能,函数名由⽣产商定义,在汇编启动⽂件中可以到。
system_stm32f10x.c:这个⽂件提供芯⽚上电初始化系统时钟、扩展外部存储器⽤的函数。systemInit函数在此⽂件实现。
stm32f10x_conf.h:这个⽂件各个外设的头⽂件,如有不需要的头⽂件可以在此⽂件中注释掉。被包含在stm32f10x.h中。
stm32f10x.h:这个⽂件很重要,⽚上外设的各个寄存器的映射在这⾥实现,以及包含需要使⽤的⽚上外设的头⽂件。
库⽂件的关系如下图
使⽤库⽂件建⽴⼯程
上⾯讲解了STM32库⽂件的架构,主要是为了在开发中使⽤库⽂件⽅便开发。在⼤多数时都使⽤库⽂件开发,只有在极少数的情况下会使⽤寄存器编程(如对资源(代码运⾏时间、内存)有严格要求的中断服务函数中,才会使⽤寄存器编程)。下⾯介绍如何使⽤库⽂件构建⼯程。
新建本地⼯程⽂件夹
在本地电脑上新建⼀个“⼯程模板”,在它之下再创建以下6个⽂件夹。
Doc:⽤来存放程序说明的⽂件,由写程序的⼈添加。
Libraries:存放的是库⽂件。CMSIS⾥⾯存放CM3内核相关的库、Periph_driver⾥⾯存放外设库⽂件。
Listing:存放编译器编译时候产⽣的C/汇编/链接的列表清单。
output:存放编译产⽣的调试信息、hex⽂件、预览信息、封装库等。
project:⽤来存放⼯程。
system的头文件
user:⽤户编写的驱动⽂件。其中stm32f10x_conf.h⽤来配置库的头⽂件、stm32f10x_it.h以及stm32f10
x_it.h中断相关的函数在这⾥编写。main.c main函数⽂件。
新建⼯程
打开KEIL5,新建⼀个⼯程,⼯程名⾃⼰取,然后选择CPU型号。⼯程个⼈习惯保存在project中。
在⼯程中添加组⽂件,⽂件从本地建好的⼯程⽂件夹下获取。
添加⽂件,把库⽂件复制到⼯程模板对应⽂件夹的⽬录下,然后在新建的⼯程中添加这些⽂件。双击组⽂件就会出现添加⽂件的路径,选择⽂件既可
创建⽬录和添加⽂件也可以直接使⽤manage project items来处理,直接⼀步到位。
配置魔术棒选项卡:
要是⽤printf需要在Target中勾选上Use Microlib
在output选项中把输出⽂件夹定位到我们的⼯程⽬录下的output⽂件夹,勾选上create HEX file 则会在编译过程中⽣成hex⽂件。
在listing选项卡中把输出⽂件定位到我们⼯程⽬录下的“Listing”⽂件夹。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。