STM32建立工程库函数方法

(1)打开keilMDK主界面可以看到工程中有一个默认的工程,点击这个工程名字,然后选择菜单Project->Close Project,就关闭掉这个工程了!这样整个 MDK 就是一个空的了,接下来我们将建立我们的工程模版。

(2)在建立工程之前,我们建议用户在电脑的某个目录下面建立一个文件夹,后面所建立的工程都可以放在这个文件夹下面,这里我们建立一个文件夹为 STM32CODE

(3)点击 Keil 的菜单:Project –>New Uvision Project ,然后将目录定位到刚才建立的文件夹STM32CODE之下,在这个目录下面建立子文件夹 USER(我们的代码工程文件都是放在 USER目录),然后定位到 USER 目录下面,我们的工程文件就都保存到 USER 文件夹下面。工程命名为STM32CODE,点击保存。

(4)接下来会出现一个选择 Device 的界面,就是选择我们的芯片型号,这里我们定位到STMicroelectronics 下面的 STM32F103ZE

(5)弹出对话框“Copy STM32 Startup Code to project ….”,询问是否添加启动代码到我们的工程中,这里我们选择“否”,因为我们使用的 ST 固件库文件已经包含了启动文件。

(6)现在我们看看 USER 目录下面包含三个文件:

(7)接下来,我们在 STM32CODE 工程目录下面,新建 3 个文件夹 CORE, OBJ 以及STM32F10x_FWLib。CORE 用来存放核心文件和启动文件,OBJ 是用来存放编译过程文件以及 hex 文件,STM32F10x_FWLib 文件夹顾名思义用来存放 ST 官方提供的库函数源码文件。已有的 USER 目录除了用来放工程文件外,还用来存放主函数文件 main.c,以及其他包括 system_stm32f10x.c 等等。

(8)下面我们要将官方的固件库包里的源码文件复制到我们的工程目录文件夹下面。打开官方固件库包,定位到我们之前准备好的固件库包的目录

STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver 下面,将目录下面的 src,inc 文件夹 copy 到我们刚才建立的 STM32F10x_FWLib 文件夹下面。src 存放的是固件库的.c 文件,inc 存放的是对应的.h 文件,您不妨打开这两个文件目录过目一下里面的文件,每个外设对应一个.c 文件和一个.h 头文件。

(9)下面我们要将固件库包里面相关的启动文件复制到我们的工程目录 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 个步骤,我们将需要的固件库相关文件复制到了我们的工程目录下面,下面我们将这些文件加入我们的工程中去。右键点击 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 而其他的可以不用添加。这里我们全部添加进来是为了后面方便,不用每次添加,当然这样的坏处是工程太大,编译起来速度慢,可以自行选择。

(15)接下来我们要编译工程,在编译之前我们首先要选择编译中间文件编译后存放目录。方法是点击魔术棒,然后选择“Output”选项下面的“Select folder for objects…”,然后选择目录为我们上面新建的 OBJ 目录。

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

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

18) 接下来,我们再来编译工程,可以看到又报了很多同样的错误。为什么呢??我们可以双击错误,然后会自动定位到文件 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) 这次在编译之前,我们记得打开工程 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 端口时钟

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 口速度为 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 端口配置, 推挽输出

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) 这样一个工程模版建立完毕。下面还需要配置,让编译之后能够生成 hex 文件。同样点击

魔术棒,进入配置菜单,选择 Output。然后勾上下三个选项。 其中 Create HEX file 是编

译生成 hex 文件,Browser Information 是可以查看变量和函数定义。还有就是我们要选择

生产的 hex 文件和项目中间文件放在哪个目录,点击“Select folder for Objects…”定位目

录,我们的选择定位到上面建立的 OBJ 目录下面。

21) 重新编译代码,可以看到生成了 hex 文件在 OBJ 目录下面,这个文件我们用 mcuisp 下载

到 mcu 即可。

到这里,一个基于固件库 V3.5 的工程模板就建立了。

时间: 2024-10-18 08:18:08

STM32建立工程库函数方法的相关文章

STM32建立project库函数方法

(1)打开keilMDK主界面能够看到project中有一个默认的project,点击这个project名字,然后选择菜单Project->Close Project,就关闭掉这个project了!这样整个 MDK 就是一个空的了,接下来我们将建立我们的project模版. (2)在建立project之前,我们建议用户在电脑的某个目录以下建立一个目录,后面所建立的project都能够放在这个目录以下,这里我们建立一个目录为 STM32CODE (3)点击 Keil 的菜单:Project –>

Borland C++建立工程菜鸟教程

用C语言编写小程序时可以直接在开发环境中新建一个源文件,编译运行就OK了,而开发比较大型的项目时要用建立工程的方式来组织各种文件,一般包括源文件(.c).头文件(.h).资源文件(如:图片.音频.文本文件). 为了养成良好的编程习惯,让程序文件结构清晰明了,我们首先新建一个工作目录,(不要老是把程序放在C:\BORLAND\BIN里面)那么这个工作目录应该放在哪里呢?当然是哪里都可以,只要你的开发环境Borland C知道在哪里就行,按照你们提供的开发工具,DISK_C文件夹是虚拟的C盘,因此工

基于IAR6或者IAR7建立STM32开发工程(通过实际测试,使用IAR6.30.4)

IAR和keil两个开发平台都是arm开发当中比较流行的平台,keil4的版本之间,可以兼容,但是版本4和版本5还是不兼容的,但是IAR的兼容性更加差,好像6.30.x之间是能够兼容的吧,没有实测过,以下是网上摘录的,根据其一步步,笔者实际测试成功,只是有一点小小的不一样需要更改. ================================================== 第一步 建立工程 首先建立一个工程,命名选择路径保存 文件名可以随便取第二步加载文件在工程路径下新建三个文件夹,分

如何解决KEIL 5 编译KEIL4的带有RTX系统的工程解决方法

1.笔者个人对KEIL5与KEIL4的比较 相较于KEIL 5 的"华丽",笔者还是喜欢KEIL4的"内敛",主要也还是习惯了,懒得换了.因为工作的  原        因,最 新的芯片上KEIL4没有支持,有人可能提出可以去下载芯片支持包加载进去,我相信这个肯定可以,估计  已经有很多网友这么做了,但是我想,新的实物总要求接触,固步自封不是一种好的习惯. 下面简单介绍两者的差异: KEIL4你不用担心,芯片的问题,因为大部分的芯片,但你装载软件的时候,就好自动的加

工程优化方法中的“最速下降法”和“DFP拟牛顿法”的 C 语言实现

这个小程序是研一上学期的“工程优化”课程的大作业.其实这题本可以用 MATLAB 实现,但是我为了锻炼自己薄弱的编码能力,改为用 C 语言实现.这样,就得自己实现矩阵的运算(加减乘除.求逆.拷贝):难点是求偏导,通过查资料,发现可以通过导数定义,即取极限的方法,来逐步逼近求得梯度:另外,没法做到输入任意公式,只能将公式硬编码为函数,而求导函数需要传入公式,就直接传入函数指针了.思考.编码.调试.测试共耗费两周左右时间,完成于 2013/01/10.虽然为了认真做这个大作业而耽误了期末考试的复习,

Cocos2d-X 3.1.1创建工程的方法

由于cocos2d-x的更新,最新版本的创建工程方法又发生了变化,以下是cocos2d-x3.1.1在命令行下创建工程的方法. 首先下载 cocos2d-x3.1.1 ,python 2.7.(x)(最好是2.7的版本). 将 pyton安装目录 和 \cocos2d-x-3.1.1\tools\cocos2d-console\bin   配置到环境变量,不会的同学可以自己去百度怎么配置环境变量. 配置完成后,在命令输入cmd 进入 \cocos2d-x-3.1.1 目录下 然后输入: coco

win2008r2的iis7.5手动建站方法,iis7.5中用独立用户建立网站的方法,提高网站安全性

win2003的iis6手动建站方法,iis6中用独立用户建立网站的方法,提高网站安全性,我们前面的教程有说明,请看http://www.piis.cn/zhishi/web574.asp 现在我们说下在WIN2008R2环境中IIS7.5中手动建立网站并设置网站安全的方法: 设置以上身份验证后,部分服务器可能会出现问题(主要是服务器环境配置或安全设置引起的),使得网站打不开,或提示“未能解密属性“password”,因为密钥集不存在”,那么这个时候我们就要将匿名用户标识从“特定用户”修改为“应

Eclipse中Android公共库的正确建立及调用方法(转)

转自http://www.cnblogs.com/SkyD/archive/2011/09/01/2161502.html 引言 之前一直头痛于没有办法在多个程序中共享资源,用作公共类库的方法也是使用的导出jar再导入的办法,现在终于初步搞明白了,可算解脱了~,分享出来. 建立公共库 首先建立公共库的Android项目,名为MyCoreLib: 完成后在左侧包浏览器里右键点选我们新建的这个项目,选择Properties项: 左侧选择Android分类,右侧勾选Is Library选项: 完成后在

STM32通过调用库函数进行编程

1.调用库函数编程和直接配置寄存器编程的区别: 2.CMSIS标准: 3.STM32库函数的组织: 4.程序例举: 调用库函数实现通过USART发送数据(26个大写的英文字母) 首先:在主函数部分先要(调用自己编写的函数)对USART要用到的I/O端口进行配置.打开系统时钟配置和对USART1进行参数配置 下图是通过调用库函数对USART1的参数进行配置,将其配置成异步收发模式.波特率用户可以自定的串口: /********************************************