1.   模板工程的创建(超级详细版,使用的是keil 4.5版本)

1.1创建工程目录

良好的工程结构能让文件的管理更科学,让开发更容易更方便,希望大家养成良好的习惯,使用具有合理结构的工程目录,当你着手于较大的软件项目时,类别分明,层次合理的工程目录结构会让你的开发管理化繁为简。

(1)首先在一个目录下创建主文件夹,名字按需求取,这里取名为:(0)工程模板

(2)在该文件夹里分别建立名字为Project和Source的文件夹。其中Project文件夹用来放置工程文件,而Source用来放置程序代码文件。

(3)在Project文件夹里建立名字为Obj和List的文件夹,这是用来存放工程编译文件的。

(4)然后在Source文件夹中建立3个名字分别为Application,Drivers和STM32_FWLib的文件夹。Application是用来放置应用程序文件的,例如main.c,和一些应用配置文件,如stm32f10x_it.c,stm32f10x_conf.h。Drivers是用来放置驱动程序文件的,STM32_FWLib是用来放置ST固件库文件的。

(5)在Application中添加一个名为main的文件夹。如果有其他应用程序,比如一些纯软件算法之类的代码文件可以放置在一个新文件夹中然后放在Application文件夹中,例如有一个Bmp图像解码的程序模块bmp.c和bmp.h,那么我们在Application中新建一个文件夹叫BMPDecoder,然后把bmp.c和bmp.h放在BMPDecoder文件夹中,以此类推。

(6)在main文件夹中添加以下文件,

(7)回到Source文件夹中,在Drivers文件夹下创建驱动文件目录,根据工程需要添加驱动目录,也可以预先添加驱动文件夹,留作以后用。

(8)在Led_Drvier中添加Led的驱动文件,如果要使用到串口驱动和按键驱动,按照上述说明在对应的文件夹中添加对应的驱动文件。

(9)回到Source文件夹下,在STM32_FWLib文件夹下添加ST固件库,库文件直接从官方固件库下拷贝过来,在光盘资料中的

\软件资料\STM32固件库(3.0.0)\stm32f10x_stdperiph_lib_v3.0.0\Libraries\路径下存放有

(10)直接在STM32固件库(3.0.0)中的CMSIS拷贝到STM32_FWLib下,这些库文件是和CotexM3内核相关的固件,其中Starup下放置着STM32的启动代码。

(11)然后从固件库的STM32F10x_StdPeriph_Driver中的两个文件夹inc和src到拷贝到

FWLib文件夹中。inc中是固件库的头文件,src是固件库的c代码文件

完成上述步骤后,工程目录就创建好了,下一步就是建立STM32的工程的方法。

1.2建立MDK平台下的STM32工程

(1)双击进入keil4。

(2) 关闭当前打开的工程,方法是:点击Project->CloseProject

(3)新建一个工程,点击Project->NewuVision Project

(4)选择工程保存的路径

(5)填写工程名字,最好填写英文名字,不要含有中文,命名为Red Leaves STM32Demo

(6)选择MCU类型,我们的开发板是STM32F103ZET6,那么我们选择的类型则为STM32F103ZE

(7)我们选择不从keil的安装目录下复制启动代码文件到工程中,过后我们自己手动添加,我们使用来自工程目录的固件中的启动代码,文件在下面的路径中

(0)工程模板\Source\STM32_FWLib\CMSIS\startup\startup_stm32f10x_hd.s

(8)点击Manage Components在工程中创建文件目录,选择否!

(9)修改Project Target的名字为Red Leaves(名字是可以根据自己需要命名的),新建4个分组,分别命名为Starup,Application,Drviers,FWLib。注意一点,这里新建4个组后,根据代码文件功能的不同而添加在对应的组下,但这些组仅仅起到一个分类作用而已,就是让人看得觉得一目了然,并没有起到路径的作用。如果你喜欢,你也可以不建立分组,把所有文件都丢在一起,一堆一堆的,但是这样相信大家自己看得都烦,尤其是工程比较大,上百个,甚至上千个文件的时候,不分类放,你想要编辑的文件自己都找不到,更别说别人了。分类放置是一种必须养成的良好习惯,分组如何分呢,最好和我们之前创建的代码工程目录一致,也可以根据需要稍作调整。



(10)在Starup里添加starup_stm32f10x_hd.s,该启动代码文件在路径

)工程模板\Source\STM32_FWLib\CMSIS\startup\starup_stm32f10x_hd.s

(11)在Applicaiton里添加文件,这里要提一点,keil只需要编译c文件,只需要添加c文件进来即可,而添加h进来对keil来说是没有必要的,其他的编译器也是如此。但是笔者比较喜欢把h文件也添加进来,这样方便查找和编辑,处于这个目的,就把h文件也添加进来了。

步骤和(10)一样,文件相信大家都知道,在)工程模板\Source\Application\main中。

(12)给Drivers这一组添加文件,把工程用到的驱动都添加进来

(13)给FWLib添加文件,添加的是ST固件文件,你的程序里用到STM32的什么资源就添加什么固件驱动文件进去,但是不管你使用了什么资源,core_cm3.c,system_stm32f10x.c,misc.c,stm32f10x_rcc.c这几个文件是必须要有的,算是STM32正常运行的基本固件。添加完毕后点击OK退出。

(14)我们在使用一些文件模块的时候,往往需要在程序文件顶部先include进来

比如#include "stm32f10x.h",#include "Led_Driver.h",才能使用程序模块的功能函数,但是编译器怎么知道这些头文件在哪里呢,要知道,这些头文件是放在不同目录下的,这就要求我们设置一些路径变量了,让编译器在这些路径下查找h文件,程序才能顺利编译。

点击,在C/C++里的Include Paths中把路径给填写上,也就是把你的程序工程中有h文件的目录路径名填写在其中,所有路径都以所在的路径为参考路径。比如说main.h,它在\Source\Application\main这一路径下,而Project文件夹和Source文件夹处于同级目录,Red
Leaves STM32 Demo.uvproj这个文件在Project文件夹中,那么以Red Leaves STM32 Demo.uvproj为参照点,main.h填写在Include Paths中的路径名就是 .. \Source\Application\main,其中“..”代表上级目录。所以main.h处在Red Leaves STM32 Demo.uvproj的上级目录Source下的Application目录下的main目录中,有点拗口吧。

(15)我们在写程序的过程中有时候会用到标准库中的库函数,比如我们常用的printf()就是在stdio库中的,我们要向在程序中正常使用库,那么就必须把使用库这一选项勾选上。

          补充3点,使用3.5版本的STM32固件库还需要把固件库的宏添加到工程选项中

选择Obj和List文件存放的路径,定位到第(3)步中的obj和list文件夹

(16)说了这么多,我们现在可以来编译一下新建好的模板程序了,点击编译,完全ok。最后笔者再啰嗦一回,如果你添加了新的程序模块或者固件库,那么必须记住3点,一是在工程中添加c文件。第二点,在Target
Options中填写Include Paths。第三点,在使用程序模块的地方上记得#include“xxx.h”。下面以ST固件添加做图例。



2.    模板工程的使用

我们做这样一个模板的目的就是可以更方便大家的开发,按照一定的步骤,我们就可以迅速的建立自己的工程并如搭积木似的扩展功能,这样可以省时省力。下面我们以添加串口功能为例说明如何在模板的基础上做功能的扩展。

(1)在Source\Drviers目录下新增加Usart_Drvier文件夹(如果有就不用新建啦),并把Usart_Drvier.c和Usart_Drvier.h放在Usart_Drvier文件夹中。

(2)把Usart_Drvier.c添加到工程中的Drivers组下,然后把stm32f10x_usart.c添加到FWLib组下

(3)在TargetOptions的C/C++的Include Paths下把Usart_Driver.h的路径填写上。

(4)由于串口使用到了固件库中的stm32f10x_usart.c的资源,所以要在stm32f10x_conf.h

中把stm32f10x_usart.h包含进来。

(5)由于Usart_Drvier.c要使用到库中的函数printf()等等,所以要勾选上Use MicroLib的选项。

(6)然后在main.h中添加#include“Usart_Driver.h”。这样在main.c中就能使用Usart_Driver.c的功能函数了。

总结

对于初学者来说,刚开始建立有一定结构的工程目录觉得会有些繁琐,但是一但熟悉后,养成习惯后就不会觉得有什么了,万事开头难嘛。

本文模版工程到http://download.csdn.net/detail/zsy2020314/5744187免费下载

使用keil建立标准STM32工程模版(图文详细版!)的更多相关文章

  1. STM32工程模版

    STM32工程模版,看过来 ST库源码去官方下载 创建工程目录 doc:存放说明文档 lib:存放库文件 listing:存放编译产生的中间文件 output:存放生成的文件 project:存放工程 ...

  2. MySQL从卸载到安装!图文详细版(你想知道的全都有!!)

    2. MySQL的下载.安装.配置 2.1 MySQL的四大版本 MySQL Community Server社区版本,开源免费,自由下载,但不提供官方技术支持,适用于大多数普通用户. MySQL E ...

  3. STM32F429学习笔记(一)触屏工程Keil建立

    由于原来的STM32F103ZET6的flash坏掉了,所以又买了一块STM32F429DISCOVERY,这块板子非常不错,基于Cortex-M4内核,自带一块2.4寸TFT触屏,主频为180M,且 ...

  4. STM32 CubeIDE快速创建工程(图文详解)

    使用STM32CubeIDE快速创建STM32的HAL库工程. 文章目录 1 STM32CubeIDE Home 2 生成工程 3 程序下载 1 STM32CubeIDE Home 进入到官网的下载界 ...

  5. 关于Quartus构建nios软核以及eclipse建立c语言工程以及成功下载到FPGA芯片过程遇到的各种问题以及解决方法详解

    这不是一篇构建nios的教程,而是遇到的各种问题以及解决方法.至于构建教程,网上一大把,我推荐正点原子的FPGA教程,比较新,比较详细,通俗易懂!!! 这里以一个点亮LED灯的Nios软核为例,很明显 ...

  6. CCS5 建立SYS/BIOS工程时报错“cannot find file "./configPkg/linker.cmd" bios”的解决方法

    CCS5 建立SYS/BIOS工程时报错“cannot find file "./configPkg/linker.cmd" bios”的解决方法 报错 #10008-D cann ...

  7. MyGui笔记(1)建立第一个工程

    记录下学习 MyGui的一些笔记,从建立第一个工程开始. 步骤: 1.右键MYGUI解决方案,添加→新建项目,选择“Win32 项目”,名称为:TestHello.下一步,勾选“空项目”. 2.设置工 ...

  8. struts2讲义----建立一个struts2工程

    建立一个Struts2 工程 Ø 1在MyEclipse中新建web工程 Ø 2在struts-2.2.1.1-all\struts-2.2.1.1解压struts2-blank.war( 最基础的示 ...

  9. 在linux下搭建STM32工程

    转载自康神博客:http://blog.csdn.net/u013298300/article/details/50243935 在LINUX下开始一个STM32工程 在LINUX下开始一个STM32 ...

随机推荐

  1. .NET文件上传的大小限制配置

    <system.web>  <!--maxRequestLength单位是Kb-->  <httpRuntime maxRequestLength="20971 ...

  2. 结构类模式(二):桥接(Bridge)

    定义 将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化. 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维 ...

  3. 错误"因为数据库正在使用,所以无法获得对数据库的独占访问权"的解决方案

    今天在还原数据库的时候,提示"因为数据库正在使用,所以无法获得对数据库的独占访问权",无论我是重启数据库,还是重启计算机,都不能解决问题,多番尝试后,终于解决了该问题.现将引发该问 ...

  4. (剑指Offer)面试题35:第一个只出现一次的字符

    题目: 在字符串中找出第一个只出现1次的字符,如输入“abaccdeff”,则输出b. 思路: 1.暴力遍历 从头开始扫描字符串中的每个字符,当访问某个字符时,取该字符与后面的每个字符相比较,如果没有 ...

  5. DB Cache

    1 DB Cache 是以bock为单位组织的缓冲区,不同大小的BLOCK对应不同的缓冲区参数 2 DB Cache的命中率越高,访问性能就越好 3 Cache中的数据块通过散列算法实现 4 每个链上 ...

  6. 25.怎样创建一个Swift项目?

    经历前面三部分的学习之后,我们对于Swift的有了基本的了解,知道它的基础语法,也知道了类.结构体.枚举.协议.扩展等等内容.但知道上面这些内容,并不代表我们就能很好的进行实际的项目开发了,本部分内容 ...

  7. 《Secrets of the JavaScript Ninja》:JavaScript 之运行时代码

    最近,在阅读 jQuery 之父 John Resig 力作:Secrets of the JavaScript Ninja(JavaScript忍者秘籍).关于第九章提及的 JavaScript 之 ...

  8. Ceph Jewel 10.2.3 环境部署

    Ceph 测试环境部署 本文档内容概要 测试环境ceph集群部署规划 测试环境ceph集群部署过程及块设备使用流程 mon节点扩容及osd节点扩容方法 常见问题及解决方法 由于暂时没有用到对象存储,所 ...

  9. cocos2dx中加入unzip

    作者:HU 转载请注明,原文链接:http://www.cnblogs.com/xioapingguo/p/4037323.html  cocos2dx中没有直接解压文件的,自己网上找了个,记录一下. ...

  10. BZOJ 1045: [HAOI2008] 糖果传递 数学

    1045: [HAOI2008] 糖果传递 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1045 Description 有n个小朋友坐 ...