1,STM32库。STM32库是由ST公司针对STM32提供的函数接口,即API (Application Program Interface),开发者可调用这些函数接口来配置STM32的寄存器,使开发人员得以脱离底层的寄存器操作,有开发快速,易于阅读,维护成本低等优点。
2,为了解决不同的芯片厂商生产的Cortex微控制器软件 的兼容性问题,ARM与芯片厂商建立了CMSIS标准(Cortex MicroController Software Interface Standard)。
3,STM32的3.5版标准库。进入Libraries 文件夹看到,关于内核与外设的库文件分别存放在CMSIS和STM32F10x_StdPeriph_Driver文件夹中。Libraries\CMSIS\CM3文件夹下又分为CoreSupport和DeviceSupport文件夹。
4,在CoreSupport中的是位于CMSIS标准的核内设备函数层 的M3核通用的源文件core_cm3.c 和头文件core_cm3.h,它们的作用是为那些采用Cortex-M3核设计SOC的芯片商设计的芯片外设提供一个进入M3内核的接
口。较重要的是在core_cm3.c文件中包含了stdin.h 这个头文件,这是一个ANSI C 文件,是独立于处理器之外的,就像我们熟知的C语言头文件 stdio.h 文件一样。位于RVMDK这个软件的安装目录下,主要作用是提供一些新类型定义
5,在DeviceSupport文件夹下的是启动文件、外设寄存器定义&中断向量定义层 的一些文件,这是由ST公司提供的。包含以下文件:
system_stm32f10x.c,是由ST公司提供的,遵守CMSIS标准。该文件的功能是设置系统时钟和总线时钟。system_stm32f10x.c 在实现系统时钟的时候要用到PLL(锁相环),这就需要操作寄存器,寄存器都是以存储器映射的方式来访问的,所以该文件中包含了stm32f10x.h 这个头文件。
stm32f10x.h 这个文件非常重要,是一个非常底层的文件。所有处理器厂商都会将对内存的操作封装成一个宏,即我们通常说的寄存器,并且把这些实现封装成一个系统文件,包含在相应的开发环境中。
Libraries\CMSIS\Core\CM3\startup\arm文件夹下是由汇编编写的系统启动文件,不同的文件对应不同的芯片型号,在使用时要注意。野火M3开发板中用的芯片是STM32F103VET6,64KRAM,512KROM,是属于高密度产品,所以启动文件要选择startup_stm32f10x_hd.s。
6,总的来说,启动文件的作用是: 1. 初始化堆栈指针SP; 2. 初始化程序计数器指针PC; 3. 设置堆、栈的大小; 4. 设置异常向量表的入口地址; 5. 配置外部SRAM作为数据存储器(这个由用户配置,一般的开发板可没有外部SRAM);
6. 设置C库的分支入口__main(最终用来调用main函数); 7. 在3.5 版的启动文件还调用了在system_stm32f10x.c 文件中的SystemIni() 函数配置系统时钟,在旧版本的工程中要用户进入main函数自己调用SystemIni() 函数。
7,Libraries\STM32F10x_StdPeriph_Driver文件夹下有inc(include 的缩写)跟src(source的简写)这两个文件夹,这都属于CMSIS的设备外设函数 部分。src里面是每个设备外设的驱动程序,这些外设是芯片制造商在Cortex-M3核外加进去的。
8,在库目录的\Project\STM32F10x_StdPeriph_Template目录下,存放了官方的一个库工程模板,我们在用库建立一个完整的工程时,还需要添加这个目录下的stm32f10x_it.c、stm32f10x_it.h、stm32f10x_conf.h这三个文件。
stm32f10x_it.c,是专门用来编写中断服务函数的,在我们修改前,这个文件已经定义了一些系统异常 的接口,其它普通中断服务函数由我们自己添加。但是我们怎么知道这些中断服务函数的接口如何写呢?是不是可以自定义呢?答案当然不是的,这些都有可以在汇编启动文件中找到,具体的大家自个看库的启动文件的源码去吧。
stm32f10x_conf.h,这个文件被包含进stm32f10x.h 文件。是用来配置使用了什么外设的头文件,用这个头文件我们可以很方便地增加或删除上面driver目录下的外设驱动函数库。如下面的代码配置表示使用了gpio、rcc、spi、usart的外设库函数,其它的注释掉的部分,表示没有用到。