ARM 是一个做芯片标准的公司,它负责的是芯片内核的架构设计,而 TI,ST 这样的公司,他们并不做标准,他们是芯片公司,他们是根据 ARM 公司提供的芯片内核标准设计自己的芯片。所以,任何一个做 芯片 (例如Cortex-M3),他们的内核结构都是一样的,不同的是他们的存储器容量,片上外设,IO 以及其他模块的区别。所以你会发现,不同公司设计的 芯片(例如Cortex-M3)他们的端口数量,串口数量,控制方法这些都是有区别的,这些资源他们可以根据自己的需求理念来设计。同一家公司设计的多种内核芯片(例如Cortex-M3)的片上外设也会有很大的区别.通过ARM公司的《Cortex-M3 权威指南》中的一个图来了解一下:
ARM 公司为了能让不同的芯片公司生产的 Cortex-M3 芯片能在软件上基本兼容,和芯片生产商共同提出了一套标准 CMSIS 标准(Cortex Microcontroller Software Interface Standard ) ,翻译过来是“ARM Cortex™ 微控制器软件接口标准”。 ST 官方库就是根据这套标准设计的。基于 CMSIS 应用程序基本结构:
我们在使用 STM32 芯片的时候首先要进行系统初始化, CMSIS 规范就规定,系统初始化函数名字必须为 SystemInit,所以各个芯片公
司写自己的库函数的时候就必须用 SystemInit 对系统进行初始化。CMSIS 还对各个外设驱动文件的文件名字规范化,以及函数名字规范化等等一系列规定。上一节讲的函数GPIO_ResetBits 这个函数名字也是不能随便定义的,是要遵循 CMSIS 规范的。至于 CMSIS 的具体内容就不必多讲了,需要了解详细的朋友可以到网上搜索资料
官方 V3.5 版本的固件库包的目录结构:
有两个文件夹,顾名思义, STM32F10x_StdPeriph_Examples 文件夹下面存放的的 ST 官方提供的固件实例源码,在以后的开发过程中,可以参考修改这个官方提供的实例来快速驱动自己的外设,很多开发板的实例都参考了官方提供的例程源码,这些源码对以后的学习非常重STM32F10x_StdPeriph_Template 文件夹下面存放的是工程模板。Utilities 文件下就是官方评估板的一些对应源码。
根目录中还有一个 stm32f10x_stdperiph_lib_um.chm 文件,直接打开可以知道,这个文档学习过程中非常有用
位于\Libraries\CMSIS\CM3\CoreSupport 目录下面的core_cm3.c 和 core_cm3.h 文件。这是 ARM 公司提供,对所有 CM3 内核的芯片都一样,你永远都不需要修改这个文件!
这个文件相当重要,只要你做 STM32 开发,你几乎时刻都要查看这个文件相关的定义。这个文件打开可以看到,里面非常多的结构体以及宏定义。这个文件里面主要是系统寄存器定义申明以及包装内存操作········
位于DeviceSupport\ST\STM32F10x \startup文件夹下,在\startup\arm 目录下,我们可以看到 8 个 startup 开头的.s 文件。这里之所以有 8 个启动文件,是因为对于不同容量的芯片启动文件不一样。对于 103 系列,主要是用其中 3 个启动文件:
startup_stm32f10x_ld.s : 适用于小容量 产品
startup_stm32f10x_md.s : 适用于中等容量产品
startup_stm32f10x_hd.s : 适用于大容量产品
这里的容量是指 FLASH 的大小.判断方法如下:
小容量:FLASH≤32K
中容量:64K≤FLASH≤128K
大容量:256K≤FLASH
对于本人使用的STM32-F103-ZET06属于大容量产品,所以做工程的时候选择startup_stm32f10x_hd.s文件
启动文件作用:打开启动文件看看:启动文件主要是进行堆栈之类的初始化, 中断向量表以及中断函数定义。启动文件要引导进入 main 函数。 Reset_Handler中断函数是唯一实现了的中断处理函数,其他的中断函数基本都是死循环。 跟踪工程,会发现Reset_handler 在我
们系统启动的时候会调用,下面让我们看看 Reset_handler 这段代码:
; Reset handler
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT __main
IMPORT SystemInit
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ENDP
据IMPORT __main知道,这里导入 main 函数,同时在进入 main 函数之前,且调用 SystemInit 系统初始化函数。注释:引导程序进入__main(此__main是C_Library中的函数,非main()),这里启动文件只讲到这:详细可去搜索相应型号的芯片启动文件的解析
stm32f10x_it.c、stm32f10x_it.h顾名思义这对文件是用来中断服务函数,stm32f10x_conf.h(confer:参看)文件打开可以看到一堆的#include,这里你建立工程的时候,可以注释掉一些你不用的外设头文件.