基于库函数版本

准备资料:

a) V3.5 固件库包:STM32F10x_StdPeriph_Lib_V3.5.0 这是 ST 官网下载的固件库完
整版,我们光盘目录:
软件资料\STM32 固件库使用参考资料\STM32F10x_StdPeriph_Lib_V3.5.0
我们官方论坛下载地址:http://openedv.com/posts/list/6054.htm
b) MDK5 开发环境(我们的板子的开发环境目前是使用这个版本)。这在我们光盘
的软件目录下面有安装包:软件资料\软件\MDK5

操作步骤:

【1】在电脑的某个目录下面建立一个文件夹,后面所建立的工程都可以放在这个文件夹下面,这里我们建立一个文件夹为 Template_library。

【2】在Template_library下新建文件夹:
USER:我们的代码工程文件都是放在 USER 目录,很多人喜欢新建“Project”目录放在下面,这也是可以的,这个就看个人喜好了
CORE:用来存放核心文件和启动文件
OBJ:用来存放编译过程文件以及 hex 文件
STM32F10x_FWLib:顾名思义用来存放 ST 官方提供的库函数源码文件。
SYSTEM:存放的是我们每个实验都要使用到的共用代码

【3】打开MDK 的菜单:Project –>New Uvision Project ,然后将目录定位到刚才建立的文件夹Template_library/USER 之下,工程命名为Template,点击保存。

接下来会出现一个选择 CPU 的界面,就是选择我们的芯片型号。因为 ALIENTEK 精英 STM32F103 所使用的 STM32 型号为 STM32F103ZET6,所以在这里我们选择 STMicroelectronics→STM32F1 Series→STM32F103→STM32F103ZET6(如果使用的是其他系列的芯片,选择相应的型号就可以了,特别注意:一定要安装对应的器件 pack 才会显示这些内容哦!!如果没得选择,请关闭 MDK,然后安装 光盘:6,软件资料\1,软件\MDK5\Keil.STM32F1xx_DFP.1.0.5.pack 这个安装包)。

【4】点击 OK,MDK 会弹出 Manage Run-Time Environment 对话框,如图所示:

这是 MDK5 新增的一个功能,在这个界面,我们可以添加自己需要的组件,从而方便构建开发环境,不过这里我们不做介绍。所以我们直接点击 Cancel,即可,得到下图 所示界面:

到这里,我们还只是建了一个框架,还需要添加启动代码,以及.c 文件等。

【5】打开D:\code\stm32\Template_library\USER文件夹, USER 目录下面包含 2 个文件夹和 2 个文件,如下图 所示:

这里我们说明一下,Template.uvprojx 是工程文件,非常关键,不能轻易删除。Listings 和 Objects 文件夹是 MDK 自动生成的文件夹,用于存放编译过程产生的中间文件。这里,我们可以把两个文件夹删除,我们会在下一步骤中新建一个 OBJ 文件夹,用来存放编译中间文件。当然,我们不删除这两个文件夹也是没有关系的,只是我们不用它而已。

【6】下面我们要将官方的固件库包里的源码文件复制到我们的工程目录文件夹下面。
打开官方固件库包,定位到我们之前准备好的固件库包的目录:STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver 下面,将目录下面的 src,inc 文件夹 copy 到我们刚才建立的 STM32F10x_FWLib 文件夹下面。
src 存放的是固件库的.c 文件,inc 存放的是对应的.h 文件,您不妨打开这两个文件目录过目一下里面的文件,每个外设对应一个.c 文件和一个.h 头文件。

【7】 下面我们要将固件库包里面相关的启动文件复制到我们的工程目录 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_hd.s 文件复制到 CORE 下面。这里我们我之前已经解释了不同容量的芯片使用不同的启动文件,我们的芯片 STM32F103ZET6 是大容量芯片,所以选择这个启动文件。
现在看看我们的 CORE 文件夹下面的文件:

【8】定位到目录: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 目录下面。

【9】前面 8 个步骤,我们将需要的固件库相关文件复制到了我们的工程目录下面,下面我们将这些文件加入我们的工程中去。右键点击 Target1,选择 Manage Components

【10】Targets 一栏,我们将 Target 名字修改为 Template,然后在 Groups 一栏删掉一个 Source Group1,建立三个 Groups:USER,CORE,FWLIB。然后点击 OK,可以看到我们的 Target名字以及 Groups 情况。

【11】下面我们往 Group 里面添加我们需要的文件。我们按照步骤 10 的方法, 右键点击点击 Tempate,选择选择 Manage Components.然后选择需要添加文件的 Group,这里第一步我们选 择 FWLIB , 然 后 点 击 右 边 的 Add Files, 定 位 到 我 们 刚 才 建 立 的 目 录STM32F1 0x_FWLib/src 下面,将里面所有的文件选中(Ctrl+A),然后点击 Add,然后 Close.
可以看到 Files 列表下面包含我们添加的文件。这里需要说明一下,对于我们写代码,如果我们只用到了其中的某个外设,我们就可以不用添加没有用到的外设的库文件。例如我只用 GPIO,我可以只用添加 stm32f10x_gpio.c 而其他的可以不用添加。这里我们全部添加进来是为了后面方便,不用每次添加,当然这样的坏处是工程太大,编译起来速度慢,用户可以自行选择.

【12】 用同样的方法,将 Groups 定位到 CORE 和 USER 下面,添加需要的文件。这里我们的 CORE 下面需要添加的文件为 core_cm3.c,startup_stm32f10x_hd.s (注意,默认添加的时候文件类型为.c,也就是添加 startup_stm32f10x_hd.s 启动文件的时候,你需要选择文件类型为 All files 才能看得到这个文件),USER 目录下面需要添加的文件为 main.c,stm32f10x_it.c,system_stm32f10x.c.
这样我们需要添加的文件已经添加到我们的工程中了,最后点击 OK,回到工程主界面。


【13】接下来我们要编译工程,在编译之前我们首先要选择编译中间文件编译后存放目录。方法是点击魔术棒,然后选择“Output”选项下面的“Select folder for objects…”,然后选择目录为我们上面新建的 OBJ 目录。这里大家注意,如果我们不设置 Output 路径,那么默认的编译中间文件存放目录就是 MDK 自动生成的 Objects 目录和 Listings 目录.

【14】下面我们点击编译按钮 编译工程,可以看到很多报错,因为找不到头文件。

【15】下面我们要告诉 MDK,在哪些路径之下搜索需要的头文件,也就是头文件目录。这里大家要注意,对于任何一个工程,我们都需要把工程中引用到的所有头文件的路径都包含到进来。回到工程主菜单,点击魔术棒 ,出来一个菜单,然后点击 c/c++选项.然后点击Include Paths 右边的按钮。弹出一个添加 path 的对话框,然后我们将图上面的 3 个目录添加进去。记住,keil 只会在一级目录查找,所以如果你的目录下面还有子目录,记得 path一定要定位到最后一级子目录。然后点击 OK.

【16】接下来,我们再来编译工程,可以看到又报了很多同样的错误。为什么呢?这是因为 3.5 版本的库函数在配置和选择外设的时候通过宏定义来选择的,所以我们需要配置一个全局的宏定义变量。按照步骤 16,定位到 c/c++界面,然后填写“STM32F10X_HD,USE_STDPERIPH_DRIVER”到 Define 输入框里面。
这里解释一下,如果你用的是中容量那么 STM32F10X_HD 修改为 STM32F10X_MD,小容量修改为 STM32F10X_LD. 然后点击 OK。

【17】这次在编译之前,我们记得打开工程 USER 下面的 main.c,复制下面代码到 main.c 覆盖已有代码,然后进行编译。(记得在代码的最后面加上一个回车,否则会有警告),可以看到,这次编译已经成功了。

#include "stm32f10x.h"/************************************************ALIENTEK 精英STM32F103开发板实验0工程模板注意,这是手册中的新建工程章节使用的main文件 技术支持:www.openedv.com淘宝店铺:http://eboard.taobao.com 关注微信公众平台微信号:"正点原子",免费获取STM32资料。广州市星翼电子科技有限公司  作者:正点原子 @ALIENTEK
************************************************/void Delay(u32 count){u32 i=0;for(;i<count;i++);}int main(void){ GPIO_InitTypeDef  GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);     //使能PB,PE端口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;             //LED0-->PB.5 端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    //IO口速度为50MHzGPIO_Init(GPIOB, &GPIO_InitStructure);                 //初始化GPIOB.5GPIO_SetBits(GPIOB,GPIO_Pin_5);                    //PB.5 输出高GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;                //LED1-->PE.5推挽输出GPIO_Init(GPIOE, &GPIO_InitStructure);             //初始化GPIOGPIO_SetBits(GPIOE,GPIO_Pin_5);              //PE.5 输出高       while(1){GPIO_ResetBits(GPIOB,GPIO_Pin_5);GPIO_SetBits(GPIOE,GPIO_Pin_5);Delay(3000000);GPIO_SetBits(GPIOB,GPIO_Pin_5);GPIO_ResetBits(GPIOE,GPIO_Pin_5);Delay(3000000);}}

【18】这样一个工程模版建立完毕。下面还需要配置,让编译之后能够生成 hex 文件。同样点击魔术棒,进入配置菜单,选择 Output。然后勾上下三个选项。 其中 Create HEX file 是编译生成 hex 文件,Browser Information 是可以查看变量和函数定义。

【19】 重新编译代码,可以看到生成了 hex 文件在 OBJ 目录下面,这个文件我们用 flymcu 下载到 mcu 即可(参考 3.4.2 小节)。到这里,一个基于固件库 V3.5 的工程模板就建立了。

【20】 实际上经过前面 19 个步骤,我们的工程模板已经建立完成。但是在我们 ALIENTEK 提供的实验中,每个实验都有一个 SYSTEM 文件夹,下面有 3 个子目录分别为 sys,usart,delay,存放的是我们每个实验都要使用到的共用代码,该代码是由我们 ALIENTEK 编写,该代码的原理在我们之后的章节会有详细的讲解,我们这里只是引入到工程中,方便后面的实验建立工程。
用我们之前讲解步骤 13 的办法,在工程中新建一个组,命名为 SYSTEM,然后加入这三个文件夹下面的.c 文件分别为 sys.c,delay.c,usart.c,如下图:

接下来我们将对应的三个目录(sys,usart,delay)加入到 PATH 中去,因为每个目录下面都有相应的.h 头文件,这请参考步骤 15 即可,加入后的截图是

最后点击 OK。这样我们的工程模板就彻底完成了,这样我们就可以调用 ALIENTEK 提供的SYSTEM 文件夹里面的函数。

STM32基于库函数新建工程模板相关推荐

  1. STM32学习之新建工程模板

    前言 好久没写STM32的博客了,主要还是涉及到很多核心技术,再加上代码量巨大,懒得整理,就不了了之了. 之前的开发的工程都是在已有框架上的已有产品中增加新功能,这次我决定从0开始,学习STM32,从 ...

  2. 【STM32】 keil新建工程模板

    Ⅰ.写在前面 本文使用目前(2016年11月)最新版本Keil(MDK-ARM)V5.21a开发环境.以STM32的处理器为例给大家讲述新建一个软件工程的详细过程. Keil(MDK-ARM)V4和V ...

  3. 学习笔记三(STM32串口程序下载新建工程模板)

    STM32串口程序下载 STM32F4 的程序下载有多种方法:USB.串口.JTAG.SWD 等,这几种方式,都可以用来给STM32F4下载代码. 利用串口给STM32下载程序 STM32 的串口下载 ...

  4. 正点原子stm32F407学习笔记1——新建工程模板

    一.基于固件库 1.新建文件夹 新建一个Template文件夹,在此文件夹下新建五个子文件夹 2.打开keil软件,点击菜单栏Project –>New Uvision Project,如果有其 ...

  5. STM32入门笔记(02):MDK Keil5 开发环境搭建及新建工程模板教程(SPL库函数版)

    目录 Keil5 开发环境搭建 芯片数据手册 Mec 多功能智能小车底盘开发与使用手册 Mec 主控原理图 Mec STM32F103VET6集成主控板资源分配 Mec OLED 显示内容 如何给 S ...

  6. STM32F4 | 新建工程模板——寄存器版本 | HAL库入门 | 新建工程模板——库函数版本

    文章目录 一.新建工程模板--寄存器版本 二.HAL入门 1.固件库和寄存器的区别 2.STM32CubeF4 3.HAL库包介绍 三.新建HAL库工程模板 一.新建工程模板--寄存器版本 开发环境: ...

  7. 从零开始学习STM32(一)—— 新建工程模板

    从零开始学习STM32(一)-- 新建工程模板 前言 准备工作 软件下载 必要文件下载 新建工程 结语 前言 从零开始学习STM32系列将由浅入深,和大家一起走进STM32的世界. 本系列的学习是基于 ...

  8. 什么是库函数、寄存器?如何新建一个库函数的工程模板?(第四天,有检讨)

    PS!!!以后相关文件从例程中直接复制就好了,以下的基本是解释每个文件的作用的,对大佬没啥用(2019.8.20) 哈!今天终于进入主题了,以后我也是会建新的工程模板的人了(再也不用当只会嘴上说心里慌 ...

  9. STM32F103C8T6电池电量ADC检测代码,适用于基于库函数的STM32微控制器

    以下是基于库函数的STM32微控制器,如STM32F103C8T6,用于电池电量ADC检测的代码: #include "stm32f10x.h"void ADC1_Init(voi ...

最新文章

  1. Android模拟器快捷键
  2. 在参数上使用@Param(“paramName”)注解”解决了传多个参数的问题
  3. 2016 server sql 错误53_MS SQL Server 错误53 错误17是什么?如何解决
  4. python web开发要学什么_Python WEB开发 用Python开展web开发必须学习什么?
  5. 大数据学习笔记01:大数据概述
  6. 异常检测2——PCA异常检测
  7. 再谈共相式GIS和ArcObjects
  8. oracle 对象类型是什么意思,Oracle-对象类型
  9. 闭包 进阶 javascript
  10. 探寻C++最快的读取文件的方案
  11. 操作给定的二叉树,将其变换为源二叉树的镜像。
  12. 《图解HTTP》— 安全的HTTPS
  13. DirectSound 播放声音杂音问题.
  14. win10登陆界面如何截屏
  15. ubuntu 910 下安装万能五笔
  16. 用计算机画图教案,电脑绘画美术教案设计
  17. kotlin的by lazy
  18. Ajax 与异步数据传输
  19. 雷神3开方算法解析,游戏运行速度提高四倍。
  20. 浙江凤凰计划:用新零售模式做资本市场敲门砖

热门文章

  1. tar.gz解压失败Skipping to next header gzip
  2. c语言中怎么随机字母,C ++程序生成随机字母
  3. 诠释韧性增长,知乎Q3财报里的社区优势和商业化价值
  4. 【Linux虚拟机安装及网络配置】
  5. 毕业论文排版框架tex
  6. Apache的管理及Web页面的优化
  7. 阿里云市场StoneDB购买与部署指南
  8. matlab升压斩波仿真,升压斩波电路设计与仿真.doc
  9. PageAdmin手机网站制作教程
  10. 网络安全学习第二篇【IP地址详解】