STM32建立project库函数方法
(1)打开keilMDK主界面能够看到project中有一个默认的project,点击这个project名字,然后选择菜单Project->Close Project,就关闭掉这个project了!这样整个 MDK 就是一个空的了,接下来我们将建立我们的project模版。
(2)在建立project之前,我们建议用户在电脑的某个目录以下建立一个目录,后面所建立的project都能够放在这个目录以下,这里我们建立一个目录为 STM32CODE
(3)点击 Keil 的菜单:Project –>New Uvision Project ,然后将文件夹定位到刚才建立的文件夹STM32CODE之下,在这个文件夹以下建立子文件夹 USER(我们的代码project文件都是放在 USER文件夹),然后定位到 USER 文件夹以下,我们的project文件就都保存到 USER 文件夹以下。project命名为STM32CODE,点击保存。
(4)接下来会出现一个选择 Device 的界面,就是选择我们的芯片型号,这里我们定位到STMicroelectronics 以下的 STM32F103ZE
(5)弹出对话框“Copy STM32 Startup Code to project ….”,询问是否加入�启动代码到我们的工程中,这里我们选择“否”,由于我们使用的 ST 固件库文件已经包括了启动文件。
(6)如今我们看看 USER 文件夹以下包括三个文件:
(7)接下来,我们在 STM32CODE project文件夹以下,新建 3 个文件夹 CORE, OBJ 以及STM32F10x_FWLib。CORE 用来存放核心文件和启动文件,OBJ 是用来存放编译过程文件以及 hex 文件,STM32F10x_FWLib 文件夹顾名思义用来存放 ST 官方提供的库函数源代码文件。已有的 USER 文件夹除了用来放project文件外,还用来存放主函数文件 main.c,以及其它包含 system_stm32f10x.c 等等。
(8)以下我们要将官方的固件库包里的源代码文件拷贝到我们的project文件夹文件夹以下。打开官方固件库包,定位到我们之前准备好的固件库包的文件夹
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver 以下,将文件夹以下的 src,inc 文件夹 copy 到我们刚才建立的 STM32F10x_FWLib 文件夹以下。src 存放的是固件库的.c 文件,inc 存放的是相应的.h 文件,您最好还是打开这两个文件文件夹过目一下里面的文件,每一个外设相应一个.c 文件和一个.h 头文件。
(9)以下我们要将固件库包里面相关的启动文件拷贝到我们的project文件夹 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 目录以下的文件:
(10)定位到文件夹:
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 文件夹以下。
(11)前面 10 个步骤,我们将须要的固件库相关文件拷贝到了我们的project文件夹以下,以下我们将这些文件添�我们的project中去。右键点击 Target1,选择 Manage Components
(12)Project Targets一栏,我们将Target名字改动为STM32CODE,然后在Groups一栏删掉一个SourceGroup1,建立三个 Groups:USER,CORE,FWLIB。然后点击 OK,能够看到我的 Target名字以及 Groups 情况。
(13)以下我们往 Group 里面加入�我们须要的文件。我们依照步骤 12 的方法, 右键点击点击Tempate,选择选择 Manage Components.然后选择须要加入�文件的 Group,这里第一步我们选 择 FWLIB , 然 后 点 击 右 边 的 Add Files, 定 位 到 我 们 刚 才 建 立 的 目 录STM32F10x_FWLib/src 以下,将里面全部的文件选中(Ctrl+A),然后点击 Add,然后 Close.能够看到
Files 列表以下包括我们加入�的文件。这里须要说明一下,对于我们写代码,假设我们仅仅用到了当中的某个外设,我们就能够不用加入�没实用到的外设的库文件。比如我仅仅用 GPIO,我能够仅仅用加入� stm32f10x_gpio.c 而其它的能够不用加入�。这里我们所有加入�进来是为了后面方便,不用每次加入�,当然这种坏处是project太大,编译起来速度慢,能够自行选择。
(15)接下来我们要编译project,在编译之前我们首先要选择编译中间文件编译后存放文件夹。方法是点击魔术棒,然后选择“Output”选项以下的“Select folder for objects…”,然后选择文件夹为我们上面新建的 OBJ 文件夹。
16) 以下我们点击编译button编译project,能够看到非常多报错,由于找不到库文件。
17) 以下我们要告诉 MDK,在哪些路径之下搜索须要的头文件,也就是头文件文件夹。回到project主菜单,点击魔术棒,出来一个菜单,然后点击 c/c++选项.然后点击 Include Paths右边的button。弹出一个加入� path 的对话框,然后我们将图上面的 3 个文件夹加入�进去。记住,keil 仅仅会在一级文件夹查找,所以假设你的文件夹以下还有子文件夹,记得 path 一定要定位到最后一级子文件夹。然后点击 OK.
18) 接下来,我们再来编译project,能够看到又报了非常多相同的错误。为什么呢??我们能够双击错误,然后会自己主动定位到文件 stm32f10x.h 中出错的地方,能够看到代码:#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD)&& !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD)
&& !defined (STM32F10X_HD_VL)&& !defined (STM32F10X_XL) && !defined (STM32F10X_CL)#error "Please select first the
target STM32F10x device used in your application (in stm32f10x.h file)"#endif这是由于 3.5 版本号的库函数在配置和选择外设的时候通过宏定义来选择的,所以我们须要配 置 一 个 全 局 的 宏 定 义 变 量 。 按 照 步 骤 16 , 定 位 到 c/c++ 界 面 , 然 后 copy“STM32F10X_HD,USE_STDPERIPH_DRIVER”到 Define 输入框里面。这里解释一下,假设你用的是中容量那么 STM32F10X_HD
改动为 STM32F10X_MD,小容量改动为 STM32F10X_LD. 然后点击 OK。
19) 这次在编译之前,我们记得打开project USUR 以下的 main.c,复制以下代码到 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_GPIOB|
RCC_APB2Periph_GPIOE, ENABLE); //使能 PB,PE port时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
//LED0-->PB.5 port配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
//推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//IO 口速度为 50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure);
//依据设定參数初始化 GPIOB.5
GPIO_SetBits(GPIOB,GPIO_Pin_5);
//PB.5 输出高
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED1-->PE.5 port配置, 推挽输出
GPIO_Init(GPIOE, &GPIO_InitStructure);
//推挽输出 ,IO 口速度为 50MHz
GPIO_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);
}
}
20) 这样一个project模版建立完成。以下还须要配置,让编译之后可以生成 hex 文件。相同点击
魔术棒,进入配置菜单,选择 Output。然后勾上下三个选项。 当中 Create HEX file 是编
译生成 hex 文件,Browser Information 是能够查看变量和函数定义。还有就是我们要选择
生产的 hex 文件和项目中间文件放在哪个文件夹,点击“Select folder for Objects…”定位目
录,我们的选择定位到上面建立的 OBJ 文件夹以下。
21) 又一次编译代码,能够看到生成了 hex 文件在 OBJ 文件夹以下,这个文件我们用 mcuisp 下载
到 mcu 就可以。
到这里,一个基于固件库 V3.5 的project模板就建立了。
STM32建立project库函数方法的更多相关文章
- STM32 串口功能 库函数 详解和DMA 串口高级运用(转载)
数据传输时要从支持那些相关的标准?传输的速度?什么时候开始?什么时候结束?传输的内容?怎样防止通信出错?数据量大的时候怎么弄?硬件怎么连接出发,当然对于stm32还要熟悉库函数的功能 具起来rs232 ...
- windows8建立局域网的方法
win8建立局域网的方法:1.首先笔记本有无线网卡且支持 虚拟WIFI ;2.按win+X键,选择"命令提示符(管理员)A"; 3.输入"netsh wlan set h ...
- Eclipse中Android公共库的正确建立及调用方法
Eclipse中Android公共库的正确建立及调用方法 引言 之前一直头痛于没有办法在多个程序中共享资源,用作公共类库的方法也是使用的导出jar再导入的办法,现在终于初步搞明白了,可算解脱了~,分享 ...
- mysql建立数据库的方法
mysql建立数据库的方法 方法一:使用create mysql> create database roudy; Query OK, 1 row affected (0.00 sec) mysq ...
- pip "Cannot uninstall 'six'. It is a distutils installed project..." 解决方法
安装 mysql-connector-python 时,由于依赖包 six 之前已经安装过,但是不能自动更新到所需版本.有如下错误提示: pip "Cannot uninstall 'six ...
- 【腾讯云的1001种玩法】几种在腾讯云建立WordPress的方法(Linux)(二)
版权声明:本文由张宁原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/126547001488207964 来源:腾云阁 ht ...
- JetBrains WebStorm打开多个项目project的方法
JetBrains WebStorm打开多个项目project的方法File-->Settings-->Directories点击右侧 + Add content root,选择目录后即可 ...
- win2008r2的iis7.5手动建站方法,iis7.5中用独立用户建立网站的方法,提高网站安全性
win2003的iis6手动建站方法,iis6中用独立用户建立网站的方法,提高网站安全性,我们前面的教程有说明,请看http://www.piis.cn/zhishi/web574.asp 现在我们说 ...
- Putty建立隧道的方法[z]
通过上节我们了解了SSH隧道的优点,但是无论是现实中还是网络中,隧道都是有入口和出口的,本节就以Putty隧道为例,详细介绍Putty建立隧道的方法. 模拟案例一: 端口,出口为2012端口,隧道建立 ...
随机推荐
- C# 窗体在线2,8,16进制转换以及,在线更新时间
class Program { static void Main(string[] args) { //十进制转二进制 Console.WriteLine(, )); //十进制转八进制 Consol ...
- MSSql跨数据库查询
select d.PostTime ,l.name from DatabaseLog d ,lumigent.dbo.test l 一定要加.dbo,不加dbo不行啊 select * from lu ...
- 第十一章 认识与学习BASH
系统支持的shell在 /etc/shells里面 Bash Shell 的功能: 1.命令修补能力(histroy) 2.命令与档案补全功能 3.命令别名设定功能 4.工作前景背景控制 5.支持 ...
- C++如何屏蔽双击运行程序功能?
问题描述: 我们开发过程中可能会经常遇到,需要屏蔽EXE的双击运行功能,只能通过宿主程序(Service或EXE)来启动.比如腾讯的迷你弹窗,就只能通过主程序来启动,而不能直接通过双击来运行. 实现原 ...
- 第1章 软件测试基本概念(Week1,3月3日)
一.对软件的认识 1. 什么是软件 2. 软件的分类 3. 软件开发的生命周期模型 (1)瀑布模型 (2)Scrum 其实对用瀑布模型这种臃肿不堪.要求严格.而无法适应软件开发周期变化的开发模型,渐渐 ...
- 基于visual Studio2013解决C语言竞赛题之1036递归求值
题目 解决代码及点评 /* 36.已知有如下递推公式 求该数列的前n项.不允许使用数组. */ float fp50036(int n,float x,float ...
- Eclipse中使用版本控制----Git
之前在做软件开发的过程中使用的版本控制软件大多是cvs,svn等等,这些都属于cvcs,及中央版本控制系统,其特点是存在一个中央库,开发者首先从中央库中下载代码,编辑,然后提交.很明显的一个特点就是使 ...
- 原码、反码、补码和移码事实上非常easy
近期在备战软考,复习到计算机组成原理的时候,看到书中关于原码.反码.补码和移码的定义例如以下(n是机器字长): 原码: 反码: 补码: 移码: 看完这些定义以后,我的脑袋瞬间膨胀到原来的二倍!这样变态 ...
- net core VS goang web
asp.net core VS goang web[修正篇] 先前写过一篇文章:http://www.cnblogs.com/gengzhe/p/5557789.html,也是asp.net core ...
- 基于visual Studio2013解决C语言竞赛题之1077大数相加
题目 解决代码及点评 /************************************************************************/ /* ...