目录
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.s | ld:low-density小容量,FLASH容量在16-32K之间 |
startup_stm32f10x_md.s | md:medium-density中容量,FLASH容量在64-128K之间 |
startup_stm32f10x_hd.s | hd:high-density大容量,FLASH容量在256-512K之间 |
startup_stm32f10x_xl.s | xl:超大容量,FLASH容量在512-1024K之间 |
以上四种都属于基本型,包括STM32F101XX、STM32F102XX\t32f103xx系列 | |
startup_stm32f10x_cl.s | cl:connectivity line devices互联型,特指STM32F105XX和STM32F107XX系列 |
startup_stm32f10x_ld_vl.s | vl: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