【stm32学习笔记】项目工程的建立

1.准备开发工程的软件。

stm32项目工程一般都是用c语言书写的,能够编写c的工具理论上都可以用于开发工程项目。网上也有许多的使用诸如VS,Eclipse等工具,在使用了第三方的库后进行编写的例子。但是,大多数情况下,stm32工程都是使用MDK软件书写的。

打开MDK软件,新建stm32工程

【stm32学习笔记】项目工程的建立

2.选择工程路径并命名。

【stm32学习笔记】项目工程的建立

注意1:工程路径一般不要有中文,以免发生错误。旧版的keil MD 对中文的支持很差,高版本的好多了,但最好还是使用英文。

注意2:MDK会在最后选择的文件夹中生成一堆文件,一般都是事先新建一个文件夹将这些文件包括进去。

3.选择器件的型号

这里我使用的是STM32103FZE,所以选择STM32103FZE。然后点击“OK”。

不同型号的芯片需要对应的选项。可以通过查阅开发板的帮助手册来获得型号信息。

【stm32学习笔记】项目工程的建立


4.然后是高版本MDK提供的很好用的功能MRE(ManageRun_Time Envirment)功能。这里我们选择不使用这个功能、自己添加文件来搭建环境,点击“OK”即可。之后会讲讲使用MRE的另一种搭建环境的方法。【stm32学习笔记】项目工程的建立


5.之后我们便搭建好一个基本的框架了,不过这个框架是不能直接书写程序并运行的,因为许多必须的程序和文件(如启动代码等)都没有,相应的编译、链接的相关参数也没有设置好。

【stm32学习笔记】项目工程的建立


6. 添加必须的文件。

关于文件的添加方法,网上有很多的资料,里面的添加方法各式各样(甚至不同的卖stm32单片机的淘宝商家提供的方法也不一样)。但归根结底,一个基于库函数开发的stm32工程至少需要包括以下这几个文件:

                   core_cm3.c以及相应的core_cm3.h文件

CMSIS核心文件,提供接入M3内核的接口。一般都不嫩修改这两个文件。

       system_stm32f10x.c以及相应的 system_stm32f10x.h

设置系统以及总线时钟

                  stm32f10x.h 文件:

系统寄存器的定义声明结构体和各种宏定义。之后使用库函数开发时会经常见到许多名字又长又不好记看了让人晕的东东,那些鬼玩意的定义很多在这里。

(使用寄存器版本开发的笑了~【stm32学习笔记】项目工程的建立

     以及下面的三个文件中的一个(实际上总共有8个启动文件,但对于103系列使用这3个,其他系列请查看帮助文档)

startup_stm32f10x_ld.s: 适用于小容量 产品
startup_stm32f10x_md.s: 适用于中等容量产品
startup_stm32f10x_hd.s: 适用于大容量产品

这3个文件是启动文件,里面有启动代码。对于不同的使用场合采用不同的启动文件。这里的容量是指 FLASH 的大小.判断方法如下:
小容量: FLASH≤32K
中容量: 64K≤FLASH≤128K
大容量: 256K≤FLASH

一般的开发使用中容量就可以了。

               stm32f10x_it.c以及相应的stm32f10x_it.h

这是专门用来书写中断服务函数。但是在开发中普通的中断函数普遍都是新建文件书写的……

                stm32f10x_conf.h

用来配置所使用的外设的头文件,里面有一堆#include< xxx.h>

 

一个库函数版本的stm32程序所必须的文件就是这些,下面是添加方法:

  第一步当然是将这些文件弄到手。网上很多的,淘宝卖家手中一般也有。

  第二步是将这些文件复制到我们所建立的工程项目文件夹下。一般都新建文件夹分类放置,网上的众多资料在分类上方式众多。理论上是可以不进行这一步的,只要第三步时你能找到这些文件,以及之后头文件的路径配置正确也能实现。这样做的好处是封装性好,方便寻找,不容易出错。

  第三步则是在工程中添加这些文件。仅仅复制文件到工程目录是不够的,并不算真正添加到工程中。可以用吃东西的例子理解为什么这么做:仅仅吃下食物是不够的额,还得消化它们使其成为自己的一部分。

右键点击“Target1”,选择“Manage ProjectItems”,打开项目管理器。在“group”中添加需要的文件夹,然后点击“Add Files”,查找添加相应的文件。这样才算是真正将文件添加进工程项目中。

【stm32学习笔记】项目工程的建立

 

 

  【stm32学习笔记】项目工程的建立

 

7. 添加需要的官方固件库。

常见的官方固件库一般是两个文件夹,srcinc 文件夹。其中src 存放的是固件库的.c 文件, inc 存放的是对应的.h 文件。

将这两个文件夹复制到工程项目文件夹目录下,然后通过“Manage ProjectItems”将src文件夹中需要用到的文件添加进工程中。

注意,固件库中有很多的文件,初学者不熟悉的情况下可以全部都添加进工程中,但会使编译速度变慢。一般是需要使用什么外设就添加相应文件,如要使用“ADC”功能,则必须添加stm32f10x_adc.c 文件。

 

8. 配置编译环境

 8.1. 添加头文件的路径。

使用第三方库时,必须将使用的库的路径包括进来,否则会发生错误,这是编程的一条基本法则。同样的道理,我们需要把在工程中所使用到的所有头文件的路径全部包括进来。

在工程主界面中点击魔术棒按钮,在弹出对话框中选择“C/C++”选项,点击“Include Path”旁边的按钮,将工程中所使用到的.h文件所在的文件夹路径(比如上面的inc文件夹)包括进去。

 【stm32学习笔记】项目工程的建立

这一页选项卡中还有一项需要注意的是“Define”那一栏,在输入框中输入(不包括引号!!!):

        “USE_STDPERIPH_DRIVER”     

这是为了定义一个全局的宏变量,通过这个宏变量来配置和选择外设。

8.2. 选择编译中间文件目录

 【stm32学习笔记】项目工程的建立

有些参考资料会有新建一个文件夹存放编译中间文件的步骤,这需要重新设置路径。(这一个步骤不是必须的)

当新建一个工程项目之后,MDK会默认自动生成两个文件夹<Listing>和<Objects>来存放编译中间文件。但是有些版本的MDK并不会生成这两个文件夹,而是会在工程项目文件夹下存放,文件一多就显得十分混乱。

方法:点击“魔术棒”按钮,在弹出对话框中选择“Output”选项,选择“Select Folder For Objects”,选择文件目录即可。

【stm32学习笔记】项目工程的建立

在“Output”选项卡中还要注意一下“Crate HEX File”前面的选择框是否勾选。将其勾选起来,否则编译过后将不会产生HEX文件。我们烧录到单片机的程序就是这个HEX文件。

 

8.3. 选择Debug 方式

点击“魔术棒”按钮,在弹出对话框中选择“Debug”选项,选择需要的Debug 方式。左边的“Use Simulator”可以进行软件仿真,右边则是硬件调试,可以选择“JLINK”或者“ULINK”等。一般使用“JLINK”。

然后在下方的“Dialog DLL”分别中写入:

DARMSTM.DLL和 TARMSTM.DLL,

 “Parameter”均为: -pSTM32F103ZE

用于设置支持 STM32F103ZE 的软硬件仿真

 【stm32学习笔记】项目工程的建立

最后点击ok确认设置。

 

9. 这样我们的stm32工程库函数版本的基本框架就建立好了。可以检查一下,点击“魔术棒”按钮,点击“Target”或“Device”选项,看看芯片是否正确。“Target”中的“Xtal”为晶振频率,要与板子上写的一致。一般将其设置为8.

【stm32学习笔记】项目工程的建立

 

 

 

第二种方法:使用MRE(Manage Run_Time Envirment)功能搭建工程。

MRE是MDK5新出的一项功能,具有代码补全功能,十分强大,省去了之前手动添加文件的麻烦之处。

 【stm32学习笔记】项目工程的建立

 在“CMSIS”下把CORE项选勾 

 在“Device”下把Startup项选勾

在“Device”中选择需要使用的外设。有些外设需要配合使用,如“GPIO”需要配合“Framekwork”和“RCC”使用,否则会报错。判断是由需要配合的标志是选择框的颜色是否为绿色。如果为黄色,则还需要其他组件配合,在左下角会有说明的。(但是单独选择“GPIO”不选择“Framekwork”和“RCC”,“GPIO”前的选择框仍是绿色,这点很奇怪~)

 

点击“OK”结束后,在工程项目下自动生成了一堆需要的文件。

【stm32学习笔记】项目工程的建立


方法3:还有一种更简便的方法

找一个做好的工程项目,复制粘贴直接在里面改就行了。不过MDK修改工程项目的名称很麻烦的…………【stm32学习笔记】项目工程的建立