stm32怎么搭建系统(零基础学习STM32智能家居系统之利用MDK5)
3.1 STM32官方固件库简介
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 开发模板搭建的介绍,欢迎共同讨论,纠错。期待点赞、转发。粉丝朋友可直接私信索要相关资料(包括模板及源代码)。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com