目录
一、初识标准库
1.CMSIS标准及库层级关系
2.库文件介绍
(1)Libraries文件夹
①CMSIS文件夹
②STM32F10x_Std_Periph_Driver文件夹
③ 在用库建立一个完整的工程时,还需要添加stm32f10x_it.c、 stm32f10x_conf.h 和 system_stm32f10x.c文件
(2)Project文件夹
(3)Utilities文件夹
3.库各文件之间的关系
二、使用帮助文档
1. 《STM32F10x-中文参考手册》
2.《STM32规格书》
3.《Cortex-M3 内核编程手册》
4. 《Cortex-M3权威指南》
三、新建工程步骤
1.在本地电脑上新建一个“工程模板”文件夹,在它之下再新建6个文件夹。
2.把准备好的库文件添加到相应的文件夹下。
3.打开keil5,新建一个工程。
(1)选择CPU型号。
(2)在线添加库文件,这里单击关闭按钮。
(3)添加组文件
(4)添加文件。
4.配置魔术棒选项卡
5.仿真器配置
6.选择CPU型号
基于 Cortex系列芯片采用的内核都是相同的,区别主要为核外的片上外设的差异,而这些差异却导致软件在同内核、不同外设的芯片上移植困难。为了解决不同的芯片厂商生产的 Cortex微控制器软件的兼容性问题,ARM与芯片厂商建立了 CMSIS标准(Cortex Micro Controller Software Interface Standard)。所谓 CMSIS标准,实际是新建了一个软件抽象层。
CMSIS标准中最主要的是CMSIS核心层,它包括:
• 内核函数层:其中包含用于访问内核寄存器的名称、地址定义,主要由 ARM公司提供。
• 设备外设访问层:提供了片上的核外外设的地址和中断定义,主要由芯片生产商提供。
1)内核相关文件
在CoreSupport文件夹中有 core_cm3.c和 core_cm3.h 两个文件。core_cm3.h头文件里面实现了内核的寄存器映射,对应外设头文件 stm32f10x.h,区别就是一个针对内核的外设,一个针对片上(内核之外)的外设。core_cm3.c文件实现了操作内核外部寄存器的函数,用得比较少。
2) 启动文件
启动文件放在 startup/arm文件夹下,里面启动文件有很多个,不同型号的单片机用的启动文件不一样。
3) stm32f10x.h
这个头文件实现了片上外设的所有寄存器的映射,是一个非常重要的头文件,在内核中与之相对应的头文件是 core_cm3.h。
4) system_stm32f10x.c
该文件实现了STM32的时钟配置,操作的是片上的RCC这个外设。系统在上电之后,首先会执行由汇编编写的启动文件,启动文件中的复位函数中调用的 System_Init 函数就在这个文件里面定义。调用完之后,系统的时钟就被初始化成72M。如果后面我们需要重新配置系统时钟,我们就可以参考这个函数重写。为了维持库的完整性,不会直接在这个文件里面修改时钟配置函数。
inc (include 的缩写)与src(source的缩写)这两个文件夹,属于CMSIS之外的、芯片片上的外设部分。src里面是每个设备外设的驱动源程序,inc则是相对应的外设头文件。src及inc文件夹是ST标准库的主要内容。
在src和inc文件夹里的就是ST公司针对每个 STM32 外设而编写的库函数文件,每个外设对应一个.c和.h后缀的文件。我们把这类外设文件统称为 stm32f10x_ppp.c或 stm32f10x_ppp.h文件,ppp表示外设名称。
这两个文件夹中,还有一个很特别的 misc.c文件,这个文件提供了外设对内核中的NVIC(中断向量控制器)的访问函数,在配置中断时,必须把这个文件添加到工程中
1) stm32f10x_it.c
这个文件是专门用来编写中断服务函数的,在我们修改前,这个文件已经定义了一些系统异常(特殊中断) 的接口,其他普通中断服务函数由我们自己添加。函数接口可以在汇编启动文件中找到。
2) system_stm32f10x.c
这个文件包含了 STM32芯片上电后初始化系统时钟、扩展外部存储器用的函数。鉴于保持库的完整性,在做系统时钟配置的时候会另外重写时钟配置函数。
3) stm32f10x_conf.h
这个文件被包含进stm32f10x.h文件。当使用固件库编程的时候,如果需要某个外设的驱动库,就需要包含该外设的头文件:stm32f10x_ppp.h。包含一个还好,如果用了多个外设,就需要包含多个头文件,这不仅影响代码美观,而且也不好管理。现我们用一个头文件 stm32f10x_conf.h把这些外设的头文件都包含在里面,让这个配置头文件统一管理这些外设的头文件,在应用程序中只需要包含这个配置头文件即可。因为这个头文件在 stm32f10x.h 的最后被包含,所以最终我们只需要包含stm32f10x.h这个头文件即可。
这个手册全方位介绍了 STM32芯片的各种片上外设,它把STM32的时钟、存储器架构,以及各种外设、寄存器都描述得清清楚楚。
本文档相当于STM32的数据手册,包含了STM32芯片所有的引脚功能说明,以及存储器架构、芯片外设架构说明。
本手册由ST公司提供,主要讲解STM32内核寄存器相关的说明,例如系统定时器、NVIC等核外设的寄存器。这部分的内容是对《STM32F10X-中文参考手册》没涉及的内核部分的补充。相对来说,本文档虽然介绍了内核寄存器,但不如以下两个文档详细,要了解内核时,可作为以下两个手册的配合资料使用。
这个手册是由 ARM公司提供的,它详细讲解了 Cortex内核的架构和特性,要深入了解 Cortex-M内核,这是首选。
在新建的工程中添加5个组文件夹,用来存放各种不同的文件。文件从本地建好的工程文件夹下获取,双击组文件夹就会出现添加文件路径的菜单,然后选择文件即可。
先把需要用到的文件从ST标准库中复制到工程模板对应文件夹的目录下,然后在新建的工程中添加这些文件,双击组文件夹就会出现添加文件的路径,然后选择文件。
(1)在 Output 选项卡中把输出文件夹定位到工程目录下的“Output”文件夹,如果想在编译的过程中生成hex文件,那么把Create HEX File 选项勾选上。
(2)在Listing 选项卡中把输出文件夹定位到工程目录下的“Listing”文件夹。
(3)在C/C++选项卡中添加处理宏及编译器编译时查找的头文件路径。如果头文件路径添加有误,则编译的时候会报错“找不到头文件”。
STM32F10X_HD宏:它告诉STM32标准库,我们使用的芯片类型是 STM32型号,是大容量的,使STM32标准库根据我们选定的芯片型号来配置。
USE_STDPERIPH_DRIVER 宏:让stm32f10x.h包含stm32f10x_conf.h这个头文件。
这一步的配置常常会因为各种原因需要重新选择。当下载的时候,若提示“说找不到Device”,应查看该配置是否正确。有时候下载程序之后,不会自动运行,要手动复位的时候,也要再次查看这里的 “Reset and Run”配置是否失效。因为用的STM32的 Flash大小是 512KB,所以选择512k的容量,如果使用的是其他型号的,要根据实际情况选择。