STM32标准库
CMSIS标准
基于Cortex系列的芯片内核都是相同的,因为stm32f103的芯片分为ARM公司内核和ST意法半导体公司设计的外设,而不同品牌的同类单片机芯片都是基于Cortex内核,区别在于不同的SOC厂商(例如,ST,Intel,苹果,三星,高通)外设设计的不同。为了方便不同外设但内核相同的芯片的代码移植,ARM与SOC厂商建立了CMSIS标准(CortexMicroControllerSoftware Interface Standard)。 所谓CMSIS标准,实际是新建了一个软件抽象层。见图CMSIS架构。
其中,最主要的是CMSIS层:
内核函数层:提供用于访问内核寄存器的名称,地址定义,ARM提供。
设备外设函数:提供片上核外外设的地址和中断定义,SOC厂商提供。
STM32库文件简介
stm32标准库可以从官网获得
解压出来可以得到《【固件库】STM32F10x_StdPeriph_Lib_V3.5.0》文件。
这个是库文件各层次之间的关系。下面我们先从《【固件库】STM32F10x_StdPeriph_Lib_V3.5.0》文件介绍。
_htmresc:
对于我们使用角度是无用的因为里面只有两个logo图片
Project:
STM32F10x_StdPeriph_Examples:
这个是官方写的有关于外设的例程文件,相当于为每一个外设功能写一个官方的使用例程,大家在写程序的时候可以参考官方的编程风格。
STM32F10x_StdPeriph_Template:
这里面是一些官方写的工程模板,而里面的五个文件夹是适用于不同编译器下的工程模板,
Utilities:
里面的内容是关于STM32评估版,STM32评估版是官方在推出一款新产品的做的一款功能强大的评估版,里面是评估版的程序文件。
stm32f10x_stdperiph_lib_um:
这个是固件库编程用的函数手册,如果有函数不懂,可以在手册中查询。
Libraries:
上面的三个文件我们基本上用不到(除了工程模板),Libraries是固件库。
STM32F10x_StdPeriph_Driver:
inc:include 头文件存放外设的初始化结构体,外设初始化结构体成员的参数列表,外设固件库函数的声明。
src:外设驱动函数库文件文件。
其中,需要重点介绍的是,misc.c文件。SOC厂商拿到ARM内核,会对其用不到的内核外设进行裁剪,只保留SOC厂商用到的内核外设,写在misc.c文件中。
CMSIS:
其中,除了CM3外其他的都是无用文件,是空内容。
CM3:
CoreSupport:
core_cm3.h:内核外设的寄存器映射。
core_cm3.c:内核外设的驱动函数。
DeviceSupport:
startup启动文件:
我们在arm开发板上只用到arm,其他的是和编译环境有关的。那么我们应该选择什么启动文件呢?
根据FLASH的容量选择合适的启动文件。
stm32f10x.h:实现了内核之外的外设映射。
system_stm32f10x.c:
system_stm32f10x.h:这两个文件配置外部时钟。
工程文件的建立
下面介绍一下,一份工程文件是怎样建立的。
第一步
首先,我们新建文件夹,命名为项目的名称,例如:GPIO点亮LED
在这个文件夹中,新建如下文件,附说明:
建好文件以后,请在《【固件库】STM32F10x_StdPeriph_Lib_V3.5.0》中找到如下文件,并放入对应文件夹中。
Doc文件,新建一个readme.txt文件用来说明项目工程。
之所以删掉多余的文件,一方面为了精简,另一方面为了不让文件夹目录太深。
Project,不放内容,用Keil5新建的工程文件放在这里。
第二步
keil5新建工程
点x,关掉。
新建5个组,把对应的文件放到里面。做好这些以后还要配置软件。
第三步
Target 中选中微库“UseMicroLib”,为的是在日后编写串口驱动的时候可以使用printf函数
在Output选项卡中把输出文件夹定位到我们工程目录下的“output”文件夹,如果想在编译 的过程中生成hex文件,那么那CreateHEXFile选项勾上。
在Listing 选项卡中把输出文件夹定位到我们工程目录下的“Listing”文件夹。
在C/C++选项卡中添加处理宏及编译器编译的时候查找的头文件路径。如果头文件路径添 加有误,则编译的时候会报错找不到头文件
在这个选项中添加宏,就相当于我们在文件中使用“#define”语句定义宏一样。在编译器中添加 宏的好处就是,只要用了这个模版,就不用源文件中修改代码。
• STM32F10X_HD宏:为了告诉STM32标准库,我们使用的芯片类型是STM32型号是大容 量的,使STM32标准库根据我们选定的芯片型号来配置。
• USE_STDPERIPH_DRIVER 宏:为了让stm32f10x.h 包含stm32f10x_conf.h 这个头文件。
“Include Paths ”这里添加的是头文件的路径,如果编译的时候提示说找不到头文件,一般就是这 里配置出了问题。你把头文件放到了哪个文件夹,就把该文件夹添加到这里即可。
至此,一个新建工程结束。