ST(意法半导体)为了方便用户开拓程序,供应了一套丰富的STM32固件库。固件库便是一个固件函数包,它由程序、数据构造和宏组成,包括了微掌握器所有外设的性能特色。该函数库还包括每一个外设的驱动描述和运用实例,为开拓者访问底层硬件供应了一个中间API,通过利用固件函数库,无需深入节制底层硬件细节,开拓者就可以轻松运用每一个外设。因此,利用固态函数库可以大大减少用户的程序编写韶光,进而降落开拓本钱。每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。每个器件的开拓都由一个通用API (application programming interface 运用编程界面)驱动,API对该驱动程序的构造,函数和参数名称都进行了标准化。
大略地说,利用标准外设库进行开拓最大的上风就在于可以使开拓者不用深入理解底层硬件细节就可以灵巧规范地利用每一个外设。标准外设库覆盖了从GPIO到定时器,再到CAN、I2C、SPI、UART和ADC等等的所有标准外设。对应的C源代码只利用了最基本的C编程的知识,所有代码经由严格测试,易于理解和利用,并且配有完全的文档,非常方便进行二次开拓和运用。
3.2 STM32F10x_StdPeriph_Lib_V3.5.0先容

图1 STM32F10x_StdPeriph_Lib_V3.5.0文件夹
Libraries 文件夹下面有CMSIS和STM32F;
个中CMSIS目录下面是启动文件。ARM公司为了能让不同的芯片公司生产的Cortex-M3芯片能在软件上基本兼容,和芯片生产商共同提出了一套标准CMSIS(Cortex Microcontroller Software Interface Standard),翻译过来是“ARM Cortex™微掌握器软件接口标准”。ST官方库便是根据这套标准设计的。
STM32F10x_StdPeriph_Driver放的是STM32固件库源码文件。源文件目录下面的inc目录存放的是stm32f10x_xxx.h头文件,无需改动。src目录下面放的是stm32f10x_xxx.c格式的固件库源码文件。每一个.c文件和一个相应的.h文件对应。这里的文件也是固件库的核心文件,每个外设对应一组文件。
图2 STM32F10x_StdPeriph_Lib_V3.5.0文件夹
Libraries文件夹里面的文件在我们建立工程的时候都会利用到。
Project文件夹下面有两个文件夹。STM32F10x_StdPeriph_Examples文件夹下面存放的ST官方供应的固件实例源码,在往后的开拓过程中,可以参考修正这个官方供应的实例来快速驱动自己的外设,很多开拓板的实例都参考了官方供应的例程源码,这些源码对往后的学习非常主要。STM32F10x_StdPeriph_Template文件夹下面存放的是工程模板。
Utilities文件下便是官方评估板的一些对应源码,这个可以忽略不看。
根目录中还有一个stm32f10x_stdperiph_lib_um.chm文件,直接打开可以知道,这是
一个固件库的帮助文档,这个文档非常有用,只可惜是英文的,在开拓过程中,这个文档会常常被利用到。
3.3 模板创建
创建STM32F103C8T6模板共须要完成8个步骤。
步骤一:该步完成三个任务①在得当的位置创建Template文件夹,如图3所示。②在Template文件夹下创建CORE、HARDWARE、OBJ、STM32F10x_FWLib、USER等5个文件夹,如图4所示。③复制开拓工具——建模板资料——SYSTEM文件夹复制到Template文件夹下,如图5。此时Template文件夹下共有6个子文件夹:CORE、HARDWARE、OBJ、STM32F10x_FWLib、SYSTEM、USER,如图6。
图3 创建Template文件夹
图4 创建5个文件夹
图5 复制SYSTEM文件夹
图6 Template文件夹下的6个文件
文件夹的含义:
CORE:用来存放核心文件和启动文件;
HARDWARE:存放和硬件干系的文件;
OBJ:是用来存放编译过程文件以及hex文件;
STM32F10x_FWLib:用来存放ST官方供应的库函数源码文件。
SYSTEM:存放了三个常常用到的自定义函数:delay,sys,usart。
USER:用来存放工程文件,主函数文件 main.c,以及其他包括 system_stm32f10x.c等等。
步骤二:在USER文件夹中创建项目并处理。
打开keil软件,选择Project –>New Uvision Project,如图7所示。引出对话框,在对话框的文件名处填入文件名Template,点击保存,如图8所示。
图7 选择新建项目菜单
图8 创建项目并起名
点保存后,引出对话框Select Device for Target’ Target1’,在该对话框找到STMicroelectronics项(如图9),打开,一贯找到
STMicroelectronics→STM32F1Series→STM32F103→STM32F103C8,
选择,如图10所示。
图9 找到STMicroelectronics项
图10 选择STM32F103C8
在图10选好之后点击OK,引出对话框图11,选择cancel。
图11 Manage Run-Time Environment 界面
取消之后可以看到在系统界面中已经建好了一个模板框架,如图12所示。
图12 模板框架
这时回到USER文件夹,可以看到在USER下有两个文件夹和两个文件,如图13所示。
图13 USER下的文件和文件夹
Template.uvprojx是工程文件,非常关键,不能轻易删除。Listings和Objects文件夹是MDK自动天生的文件夹,用于存放编译过程产生的中间文件。这里,我们将把编译的中间文件存入在OBJ文件夹中,以是Listings和Objects文件夹就可以删除了。
末了,我们从STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\
ST\STM32F10x下面将里面的三个文件stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h,复制到USER目录之下。然后将STM32F10x_StdPeriph_Lib_V3.5.0\
Project\STM32F10x_StdPeriph_Template 下面的4个文件main.c,stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h复制到USER目录下面。复制完的结果如图14所示。
图14 USER下的文件和文件夹
这样USER文件夹就处理好了。
步骤三:处理STM32F10x_FWLib文件夹。
打开官方固件库包,定位到我们之前准备好的固件库包的目录
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver下面,将目录下面的src,inc文件夹复制STM32F10x_FWLib文件夹下面,如图15所示。src存放的是固件库的.c文件,inc存放的是对应的.h文件。
图15 STM32F10x_FWLib下的文件
步骤四:处理CORE文件夹。
下面将固件库包里面干系的启动文件复制到我们的工程目录CORE之下。打开官方固件库包,定位到目录STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport下面,将文件core_cm3.c和文件 core_cm3.h复制到CORE下面去。然后定位到目录
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm下面,将里面startup_stm32f10x_md.s文件复制到CORE下面。不同容量的芯片利用不同的启动文件,STM32F103C8T6是中容量芯片,以是选择startup_stm32f10x_md.s文件,结果如图16所示。
图16 CORE下的文件
步骤五:向工程添加组件。
右键点击 Target1,选择Manage Project items选择,如图17所示。
图17 Manage Project items项
引出Manage Project items对话框,如图Project Targets一栏,将Target名字修正为Template,然后在Groups一栏删掉Source Group1,建立5个Groups:CORE,HARDWARE,FWLIB,SYSTEM,USER,如图18所示。然后点击OK,可以看到我们的Target名字以及Groups情形,如图19。
图18 添加组
图19 项目组情形
步骤六:向工程组添加文件。
①.向CORE中添加:还回到刚才的Manage Project items对话框,选择CORE,然后点击右边的Add Files,定位到core_cm3.c,startup_stm32f10x_md.s(把稳,默认添加的时候文件类型为.c,也便是添加startup_stm32f10x_md.s启动文件的时候,你须要选择文件类型为All files才能看得到这个文件),然后点击Add,然后Close,可以看到Files列表下面包含我们添加的文件。如图20—图22所示。
图20 为CORE添加文件
图21 为CORE添加文件
图22 为CORE添加文件
②.向HARDWARE中添加,这部分在须要时再添加。
③.向FWLIB中添加:选择FWLIB,然后点击右边的Add Files,定位到STM32F10x_FWLib/src下面,将里面所有的文件选中(Ctrl+A),然后点击Add,然后Close,可以看到Files 列表下面包含我们添加的文件,如图23—图24所示。
图23 为FWLIB添加文件
图24 为FWLIB添加文件
④.向SYSTEM中添加:进入到SYSTEM的下一级文件夹,再各自进入一级文件夹,可以找到3个.c文件,加入组内,如图25所示。
图25 为SYSTEM添加文件
⑤.向USER中添加:USER目录下面须要添加的文件为 main.c,stm32f10x_it.c,
system_stm32f10x.c。
图26 为USER添加文件
添加文件后,项目变成为图27情形。
图27 项目组情形
步骤七:设置项目。
在编译程序之前,还须要对项目进行设置,单击图28上的图标,引出图29对话框。
图28 项目设置
图29 Output设置
在打开的对话框中,选择output页面,在该页面中单击Select Folder for Objects引出图30对话框,选择OBJ文件夹,编译的中间文件和hex程序存放在这里。同时在该页面还须要勾选Create HEX File,如图31。
图30 选择编译存放文件夹
图31 完成编译其他选项
设置完输出办法后,再来设置头文件目录。还是图31的界面,切换到C/C++页,如图32所示。
图32 设置头文件
在C/C++页面中,在Define项后输入STM32F10X_MD,USE_STDPERIPH_DRIVER,在Include Paths后单击图示按钮,引出对话框图33所示,选择如图文件夹,单击OK即可。
图33 设置头文件
步骤八:下载验证。
在USER下选择文件main.c(如图34),在文件中输入如下代码:
图34 选择main.c
#include "stm32f10x.h"
void Delay(u32 count)
{
u32 i=0;
for(;i<count;i++);
}
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_SetBits(GPIOC,GPIO_Pin_13);
while(1)
{
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
Delay(3000000);
GPIO_SetBits(GPIOC,GPIO_Pin_13);
Delay(3000000);
}
}
输入后进行保存,然后单击工具栏上的编译按钮,如图35所示。如果结果如图36所示,则模板搭建成功。
图35 编译按钮
图36 模板搭建成功
以上是利用MD5进行STM32 开拓模板搭建的先容,欢迎共同谈论,纠错。期待点赞、转发。粉丝朋友可直接私信索要干系资料(包括模板及源代码)。