您的位置:首页 > 其它

STM32根据库建立自己的工程

2014-04-16 16:14 204 查看
原文地址:STM32根据库建立自己的工程作者:whsh304

利用STM32的官方库在Keil uVision 4中新建一个工程的步骤:

一.
新建工程时的软件操作,工程配置方法:

1.

点击菜单栏的Project
→ New uVision
Project,新建一个工程文件,取名,设置好保存路径后,点击“保存”即可。

2.

接着弹出一个对话框,选择芯片型号,我们用的是ST公司的STM

32F103VE,选择该芯片,点击“OK”即可。

3.

接着弹出的对话框,如下,问我们是否要拷贝STM
32的启动代码到工程文件中,这份启动代码在M 3系列中都是适用的,我们可以点击“是”。但是,这里用ST的固件库创建工程,库里面也有启动代码文件,为了保持库的完整性,我们就不需要开发环境自带的启动代码了,稍后,我们手动添加,所以这里,我们点击“否”。

4.

此时,已经新建了一个工程,但是,里面还没有我们所需的文件,接下来,就该添加所需文件了。在工程的根目录
(
即,保存工程的文件夹下 )

新建以下3个文件夹,User,FWlib,CMSIS。User用来存放工程文件和用户代码,包括主函数main.c。FWlib用来存放固件库里面的inc和src这两个文件夹以及它们里面的所有文件,这里面包含了芯片上的所有外设的驱动。CMSIS用来存放固件库的启动文件,和,M 3系列通用的文件。CMSIS里面的文件适合所有M 3内核的单片机。CMSIS的缩写为,Cortex Microcontroller Software
Interface Standard,是
ARM
Cortex
微控制器软件接口标准,是ARM公司为芯片厂商提供的一套通用的且独立于芯片厂商的处理器软件接口。

5.

把固件库的Libraries STM32F10x_StdPeriph_Driver目录下的inc和src这两个文件夹复制到刚才新建的FWlib文件夹中。

6.

把固件库的Project STM32F10x_StdPeriph_Template目录下的main.c,stm32f10x_conf.h,stm32f10x_it.h,stm32f10x_it.c复制到User文件夹下。main.c也可以不复制,稍后,自己新建一个main.c文件在User文件夹下,也可以。stm32f10x_it.h,stm32f10x_it.c这两个文件里面是中断函数,里面为空,用户需要时,可以自己添加中断服务程序。stm32f10x_conf.h是需要用户配置的头文件,当我们需要用到芯片中某部分外设的驱动时,只需要在该文件中把相应注释标记去掉,即可,这样就可以把相应头文件包含进来了。片上外设的驱动在Libraries
STM32F10x_StdPeriph_Driver目录下的src文件夹中,它们的头文件在inc文件夹中。

7.

将固件库的Libraries CMSIS Core CM3文件夹下的全部文件和文件夹复制到刚才新建的CMSIS文件夹中,Startup / arm目录下一般有三个启动文件,分别为,startup_stm32f10x_ld.s,startup_stm32f10x_md.s,startup_stm32f10x_hd.s,按顺序是小,中,大容量Flash单片机的启动文件。我们这里用的是STM32F103VE有512 K Flash,属于大容量的。所以,稍后,把startup_stm32f10x_hd.s添加到我们的工程中。不同大小的Flash对应的启动文件不同,这点要注意。

8.

最后,可以把我们的工程文件,和,其它一些编译产生的文件都放在User文件夹下,这样,看起来比较整洁。

9.

回到Keil软件的工程中,鼠标右击“Target”,在弹出的菜单中选择“Add Group”选项,新建4个分组。分别命名为,STARTCODE,USER,FWlib,CMSIS。STARTCODE管理启动代码,USER管理用户自定义的应用程序,FWlib管理库文件,CMSIS管理M 3系列单片机通用的文件。

10.

下面,往这些新建的组里面添加文件。双击哪个组,就可以往哪个组里面添加文件。(
往组里面添加文件,和刚才在工程保存目录下面建立的文件夹没有任何关系,它们是独立的,互不影响。设置组,只是为了方便工程管理。)在STARTCODE里面添加Startup / arm目录下的startup_stm32f10x_hd.s文件,

在USER组里添加main.c,stm32f10x_it.c这两个文件。在FWlib组里面添加src里面的全部驱动文件。当然,src里面的驱动文件,也可以需要哪个就添加哪个,这里全部添加,是为了后续开发的方便。并且,我们可以通过配置stm32f10x_conf.h文件来选择性添加,只有在stm32f10x_conf.h中被配置的文件才会被编译。






注意,在组里面添加的,都是汇编文件和C文件
(

即,以 .s和
.c为后缀的文件
),即,都是源程序文件
(

可能还有其它类型的文件,但是,都必须是源程序文件 ),并且,一般地,所有源程序文件都必须添加到组里面才行。但是,头文件是不需要添加到组里面的。


注意:往组里面添加源程序文件很重要。如果,少添加一个源程序文件,编译器就找不到该源程序文件了,很有可能编译会出错。

11.

接下来,需要对工程进行一些设置。点击工具栏中的魔术棒按钮
,在弹出的“Options for Target”窗口中,选择“Target”选项卡,在“Xtal ( MHz )”处,可以设置外部时钟频率,即,外部晶振频率。这个频率是仿真时使用的频率,如果要使用Keil uVision 4软件仿真,就应该把它设置成,和实际硬件的外接晶振频率一样。如果,不需要仿真,或者,仿真时,外部时钟频率因素不重要,也可以不修改,使用默认值8 MHz。如下图。

12.

点击“Output”选项卡,点击“Select Folder for
Objects”按钮,可以为编译时产生的输出文件,设置一个文件夹,把这些输出文件都输出到该文件夹下。还可以把“Creat HEX File”选项框勾上,这样,就可以在编译时,输出16进制的可执行文件了。
13.

点击“Listing”选项卡,点击“Select Folder for
Listings”按钮,可以为编译时产生的链接文件,设置一个文件夹,把这些链接文件都输出到该文件夹下。
14.

点击“C
/ C++”选项卡,这里有两个设置很重要
(“Define”和“Include Paths”,如下图
),设置不对,编译会出很多错误。另外,下图中的“One ELF Section per
function”一般要选上。

(1).
Define是设置,预定义符号,在这里定义符号,相当于在程序文件中使用
#define
语句定义符号。这里一般要填入以下内容:USE_STDPERIPH_DRIVER, STM32F10X_HD,
USE_STM3210E_EVAL其中,定义了USE_STDPERIPH_DRIVER就可以使用,标准外设驱动。定义了STM32F10X_HD,就可以对固件库进行条件编译。定义了USE_STM3210E_EVAL,就可以使用ST公司的官方评估板作为硬件来下载,调试程序,这个宏,一般可以不定义,因为我们很少使用ST公司的官方评估板。Define中要填的内容,也可以从例子工程,或者,工程模板里面复制,粘贴到这里。


注意:Define栏里面,填的内容对STM32F10x系列的芯片是通用的,引脚数目不同也可以通用。


注意:定义STM32F10X_HD,是因为我们用的芯片是大容量的。添加了STM32F10X_HD这个宏以后,库文件里面为大容量芯片定义的寄存器,我们都可以使用了。芯片是小容量,或者,中容量时,宏要换成,STM32F10X_LD或者STM32F10X_MD。其实,不管什么容量,我们只要添加STM32F10X_HD这个宏即可。当我们用小,或者,中容量的芯片时,那些为大容量定义的寄存器,不去访问就是了,反正,也访问不了。
(2). Include
Paths是设置,头文件的搜索路径的。我们的工程中,用到的头文件在哪个路径,就把该路径添加进来,即可。有时,也可以根据编译错误,发现哪些头文件,编译器找不到,再把这些头文件的路径添加进来。一般要填入的路径有以下一些,每个不同的路径以分号间隔:..;
......LibrariesCMSISCM3CoreSupport;
......LibrariesCMSISCM3DeviceSupportSTSTM32F10x;
......LibrariesSTM32F10x_StdPeriph_Driverinc;
“ ..

”表示工程根目录。


在添加目录时要注意,在下图界面下,必须把蓝色条移到最后的空白处,再点击“OK”,最后一个路径才能被添加成功,否则,最后一个路径会丢失。


注意:因为编译器不会自动搜索指定目录的子文件夹,所以每个路径都要添加,就算,路径1是路径2的子目录,路径1和路径2都必须同时添加,才行。

15.

点击“Debug”选项卡,选中左边的Use Simulator,就是使用软件仿真模式调试,选中右边的Use,就是使用硬件仿真,调试。由于我们多使用开发板加J-Link调试,所以选中“Cortex–M / R J-LINK /
J-Trace”项,其它选项,默认即可。如下图。

在上图的界面中,点击“Settings”按钮,进行J-Link的一些接口进行设置。“Max Clock”项一般设置成2MHz,如果设置太高,可能J-Link会不支持,这样就会出错。有时,如果硬件调试出错了,把这里设置低一些,可能就会消除错误。其它设置,默认即可。如下图。

16.

点击“Utilities”,选中“Use Target Driver for Flash
Programming”,在它下面选择“Cortex–M / R J-LINK /
J-Trace”项。其它设置,默认即可。如下图。

在上图的界面中,点击“Settings”按钮,弹出下面的对话框,添加Flash。如果,已经有Flash了,就不用添加了,如果没有的话,就一定要添加Flash,否则,无法下载程序到开发板。































在上图的界面中点击“Add”按钮,弹出选择框,如下图所示。由于我们用的是大容量的芯片,所以,选择“STM 32 F 10x High-density Flash
On-chip Flash
512k”项,然后,点击“Add”按钮,又退回到上面的界面,再点击“OK”即可。

二.
工程新建,配置完成后,自己从零开始写程序的一些编程,配置文件的知识点:

1.
唯一需要包含在用户自己的应用程序中的文件是 stm32f10x_lib.h (
比较新的固件库已经把此文件改名为stm32f10x.h )。

2.
需要用户修改的文件有以下3个:stm32f10x_conf.h
,main.c
,stm32f10x_it.c
,其中,stm32f10x_conf.h和main.c
一般必须修改,而,stm32f10x_it.c有时,可能不需要修改。

3.
一般地,若要进入DEBUG (
调试 )
模式,必须在 stm32f10x_conf.h
中定义标签DEBUG。可以用这个语句定义:#define DEBUG 1
但是,现在,有的固件库,不定义标签DEBUG,也可以进入DEBUG (
调试 )
模式了。进入 DEBUG模式会增大代码的尺寸,降低代码的运行效率。因此,我们强烈建议仅仅在除错的时候使用相应的DEBUG代码,在最终的应用程序中,不定义DEBUG标签,以便删除DEBUG代码。

4. stm32f10x_conf.h
文件的修改方法:

该文件中,所有的 #define _PPP

,和, #define _PPPx

这类对外设的宏定义前面都有
“//”,都是被注释掉的。所以,对于我们要用到的外设,其宏定义前面的“//”必须去掉。

5.
为了访问GPIO寄存器,类似于
_GPIO, _AFIO, _GPIOA, _GPIOB, _GPIOC,
_GPIOD和_GPIOE
的标签必须在文件“stm32f10x_conf.h”中定义。有时,对于有的固件库,不定义也可以。

6.
几个头文件,例如以 map.h,lib.h,type.h
结尾的三个头文件,必须包含在用户工程的搜索目录(一般在,用户工作目录的project目录下面)下面。

7.
所有用到的外设库函数的 .c,.h
(即,stm32f10x_ppp.c,stm32f10x_ppp.h)文件必须包含到用户工程目录(一般是,用户工作目录的project目录)下面。

说明:本文档为同学毅哥总结。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: