stm32官方库下载:
2014.5.5:
进入st官网——“支持”页面——Tools and Software——“软件”——“微控制器软件”——“STM32微控制器软件”
选好选项(stm32,firmware),filter一下,就出来了
外设库只是固件库的一部分,外设库、CMSIS、DSP库、三方驱动等组合起来就成固件库。
目录结构说明:
转自:野火 详解用 STM32 官方库来开发自己的应用程序
Libraries 文件夹下是驱动库的源代码跟启动文件。
Project 文件夹下是用驱动库写的例子跟一个工程模板。
还有一个已经编译好的 HTML 文件,主要讲的是如何使用驱动库来编写自己的应用程序。
Librarie 文件夹下:
有两个文件夹:STM32F10x_StdPeriph_Driver ,CMSIS。
STM32F10x_StdPeriph_Driver 文件夹下有inc(include 的缩写)跟src(source 的简写)两个文件夹。
src :每个片上外设的驱动程序,这些外设当中很多是芯片制造商在 Cortex-M3 核上加进去的
(Cortex-M3 核自带的外设是通用的,放 在CMSIS文件夹下。)
inc :每个驱动文件对应的头文件。
当我们的应用程序需要用到某个外设的驱动程序的话只需将它的头文件包含进我们的应用程序即可。
Libraries\CMSIS\Core\CM3\startup\arm 文件夹下是三个汇编编写的系统启动文件,分别对应于小(LD)中(MD)大(HD)容量 Flash 的单片机,在我们新建工程的时候需要将它包含到我们的工程中去。
启动文件是任何处理器在上电复位之后最先运行的一段汇编程序。
启动文件的作用是:
1、初始化堆栈指针 SP
2、初始化程序计数器指针 PC
3、设置异常向量表的入口地址
4、配置外部 SRAM 作为数据存储器(这个由用户配置,一般的开发板可没有外部 SRAM)
5、设置 C 库的分支入口__main(最终用来调用 main 函数)
如若要详细了解启动文件的详细过程可参考如下网友的文章: STM32启动代码概述 http://blog.ednchina.com/likee/138130/message.aspx
Libraries\CMSIS\Core\CM3 文件夹下除了放有 startup 启动文件外,还有这几个文件core_cm3.c 、core_cm3.h,stm32f10x.h,system_stm32f10x.c 、system_stm32f10x.h。
core_cm3.c 是 CMSIS Cortex-M3 核外设接入层的源文件,在所有符合CMSIS 标准的 Cortex-M3 核系列单片机都适用,独立于芯片制造商,由 ARM 公司提供。
它的作用是为那些采用 Cortex-M3 核设计 SOC 的芯片商设计的芯片外设提供一个进入 M3 内核的接口。至于这些功能是怎样用源码实现的,我们可以不用管它,我们只需把这个文件加进我们的工程文件即可。该文件还定义了一些与编译器相关的符号。在文件中包含了 stdin.h 这个头文件,这是一个 ANSIC C 文件,是独立于处理器之外的,就像我们熟知的 C 语言头文件 stdio.h 文件一样。位于 RVMDK 这个软件的安装目录下,主要作用是提供一些类型定义,如:
core_cm3.c 跟启动文件一样都是底层文件,都由 ARM 公司提供,遵守 CMSIS标准,即所有 CM3 芯片的库都带有这个文件,这样软件在不同的 CM3 器件的移植工作就得以化简。
core_cm3.c 里面包含了一些跟编译器相关的信息,如:RealView Compiler,ICC Compiler,GNU Compiler。
core_cm3.h 这个文件实现了 CM3 内核里面的 NVIC 和 SysTick 这两个资源的所有功能,NVIC 是嵌套向量中断控制器,SysTick 是CM3 内核里面的一个简单的定时器,其时钟由外部时钟源( STCLK )或内核时钟(FCLK)来提供,一般我们在编程的时候选择 FCLK 作为它的运行时钟,FCLK 由SYSCLK 八分频得到。NVIC 的寄存器是以存储器映射的方式来访问的,所以core_cm3.h 头文件中也包含了寄存器的存储映射和一些宏声明。
system_stm32f10x.c 的性质跟 core_cm3.c 是一样的,也是由 ARM 公司提供,遵守 CMSIS 标准。该文件的功能是根据 HSE 或者 HSI 设置系统时钟和总线时钟(AHB、APB1、APB2 总线)。系统时钟可以由 HSI 单独提供,也可以让 HSI 二分频之后经过PLL(锁相环)提供,也可以由 HSE 经过 PLL 之后获得。具体可参考 STM32 的时钟树:(该图截自 STM32 参考手册中文版 47 页)。
注:system_stm32f10x.c 文件只是设置了系统时钟和总线时钟,至于那些外设的时钟是在 rcc.c 这个文件中实现的。因为各个 SOC 厂商在 CM3 内核的基础上添加的外设工作的速率是不一样的,有的是高速外设(时钟经过 APB2 高速总线获得),有的为低速外设(时钟经过 APB1 低速总线获得),所以这一功能的实现放在芯片驱动文件夹 src/rcc.c 下。这篇文档分析的是 ST(意法半导体)公司的 STM32,对于其他公司的芯片可能不太一样,但是,不论是哪个厂商,系统时钟都是由 ARM 公司实现,为的是软件移植的方便。然后,再从系统时钟里面分频来得到各个外设的时钟。system_stm32f10x.c 在实现系统时钟的时候要用到 PLL(锁相环),这就需要操作寄存器,寄存器都是以存储器映射的方式来访问的,所以该文件中包含了stm32f10x.h 这个头文件。
stm32f10x.h 对内存的操作封装成一个宏,即寄存器(存储器映射),并且把这些实现封装成系统文件。
关于 STM32 存储器系统可以参考《ARM Cortex-M3 权威指南》中文版 宋岩译 第五章:存储器系统,重点看 83 页。
stdint.h是 ANSIC C 头文件,位于 RVMDK 这个开发环境的安装目录,是开发环境自带的,其功能是提供一些数据类型的定义。
core_cm3.h 、syetem_stm32f10x.h是由 ARM 公司为 SOC 厂商提供的基于 Cortex-M3 核的外设接口层,独立于芯片厂商符合 CMSIS 标准。CMSIS 标准是 ARM 公司联合其他 SOC 厂商制定的,所以基于
Cortex-M3 核的 SOC 都必须遵守,这样不管是哪个公司生产的芯片都可以用 ATM 公司提供的这几个文件,方便了软件上的开发。这两个头文件分别对应一个 C 文件,我们在新建工程的时候需要把这两个 C 文件添加进来。还要将启动文件也加进来。
stm32f10x.h实现了存储器映射和寄存器的声明,是一个非常重要的头文件。这个头文件包含了 core_cm3.h、system_stm32f10x.h、stdint.h 这三个头文件。
综上:在我们的应用程序中只需将 stm32f10x.h 这个头文件包含进来即可,这就可以通过 stm32f10x_conf.h 这个头文件方便的选择某些外设的驱动程序。这个配置头文件里面包含了每个外设驱动的头文件。
stm32f10x_conf.h 包含在 stm32f10x.h 中。