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,该启动代码文件在路径

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

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

步骤和(10)一样,文件相信大家都知道,在(0)工程模板\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免费下载

转载于:https://www.cnblogs.com/java20130723/p/3211363.html

使用keil建立标准STM32工程模版(图文详细版!)相关推荐

  1. 在 keil 建立基于STM32开发的工程模板--详细步骤

    手把手教你在keil建立STM32的工程模板 1 先说几句 1.1 什么是STM32? 1.2 什么是cortex? 1.3 什么是ARM? 1.4 什么是意法半导体? 2 硬件平台 2.1 STM3 ...

  2. STM32(一)----建立嵌入式STM32工程

    建立一个STM32工程 前期准备: 版本说明:MDK5.15,如果有更高的版本可使用高版本. 版本号可从 MDK软件的"Help–>About uVision"选项中查询到. ...

  3. Mybatis分页插件PageHelper使用教程(图文详细版)

    Mybatis分页插件PageHelper使用教程(图文详细版) 1.配置 2.后台代码 controller类 html页面 html页面效果图 1.配置 小编的项目是springBoot项目,所以 ...

  4. MDK-Arm Keil uVision5 创建STM32工程

    一.准备工程·芯片/设备包 Step-1  安装"芯片/设备包" "Project -> Manager -> Pack Installer" ,打 ...

  5. 【沧海拾昧】Keil uVision5新建stm32工程并联合Proteus 8 Professional简单仿真

    #C0101 沧海茫茫千钟粟,且拾吾昧一微尘 --<沧海拾昧集>@CuPhoenix [阅前敬告] 沧海拾昧集仅做个人学习笔记之用,所述内容不专业不严谨不成体系 如有问题必是本集记录有谬, ...

  6. DataGrip使用(一)安装图文详细版(5月19更新)

    DataGrip使用(一) 文章目录 DataGrip使用(一) 前言 一.DataGrip是什么? 二.下载安装 1.官网下载地址 三.使用方法 前言 简单来说,datagrip就是一个数据库管理工 ...

  7. linux aarch64 java环境安装(图文详细版)

    文章目录 前言 一.java环境 1.确认服务器版本 2.把包传到服务器上,然后进行解压 3.修改文件名 4.配置环境变量 5.查看java环境 前言 安装过程很简单,请认真确认版本号及服务,直接进入 ...

  8. IIS之web服务器的安装、部署以及使用教程(图文详细版)

    WEB服务器的部署 打开虚拟机后查看已经开放的端口,可以看到没有TCP 80.TCP 443,说明HTTP服务端口没有打开 打开我的电脑-双击CD驱动器 选择安装可选的Windows组件 选择应用程序 ...

  9. linux在线安装JDK(1.8版本)图文详细版

    linux在线安装JDK,命令下载 在线下载JDK 命令: wget --no-check-certificate --no-cookies --header "Cookie: oracle ...

最新文章

  1. 二进制搜索算法_使用安全摄像机镜头解释二进制搜索算法
  2. cookies java,java 中 Cookie的用法
  3. python学习笔记--迭代
  4. 自己动手写Docker系列 -- 5.2实现查看运行中的容器
  5. Jmeter设置环境变量支持在任意终端目录输入jmeter直接启动
  6. 怎么解决VMware“该虚拟机似乎正在使用中”问题
  7. 字符串内置方法 第二弹
  8. java之接口interface
  9. 01单片机——基础知识
  10. VueH5页面跳转高德地图导航
  11. JAX-RS 从傻逼到牛叉 2:开发一个简单的服务
  12. python输入球的半径_python程序设计:输入球体半径r,计算球体的体积和表面积
  13. 趣图 | 早起的你 vs 熬夜的你
  14. 从前台获取数据,并导出PDF文件
  15. python doc 转docx
  16. 每天都在用电脑、玩手机的你,现在的眼睛有多干?
  17. xss payload大全
  18. mysql 中启动服务的命令 、登录命令、退出命令 mysql 的常用命令
  19. 使用 mailto URI 发送邮件
  20. 多媒体文件格式之MKV

热门文章

  1. 从零开始学视觉Transformer (8):卷积和Transformer结合的ViT
  2. 特殊mac地址文档_Mac颜值秒杀Win10?五款神器让Win10化身macOS
  3. 任意阶魔方阵matlab程序,【精品】任意阶魔方阵算法(c语言)
  4. dockerfile 安装mysql_dockerfile构建mysql镜像
  5. 定义一个dto对象_业务代码的救星——Java 对象转换框架 MapStruct 妙用
  6. UNIX(进程间通信):03---僵尸进程
  7. NLP复习资料(6)-第十章 语义分析
  8. 《Python Cookbook 3rd》笔记(3.1):数字的四舍五入
  9. 我的世界一个程序导致JAVA,Java地位无可动摇的12个原因
  10. python 方法的实例_python调用自定义函数的实例操作