IAR forARM 建立第一个STM32F051的工程

一.自己画了个板子,打样后,自己测试。部分原理图如下:

IAR forARM 建立第一个STM32F051的工程_第1张图片

二.现在建立工程,编写程序来点亮这5个LED灯。

1.好的程序员自己写程序,优秀的程序员偷别人的程序。所以从ST官网上下载相应的资料en.stm32f0_stdperiph_lib.ZIP,解压到当
前文件夹得到STM32F0xx_StdPeriph_Lib_V1.5.0文件夹,打开后文件目录如下图:

IAR forARM 建立第一个STM32F051的工程_第2张图片
其中,_htmresc(html rescource)文件夹的目录下就三张图片
            
IAR forARM 建立第一个STM32F051的工程_第3张图片

           Utilities 文件夹下是ST公司的评估板的应用Examples以及第三方支持工具补丁,暂时不关心;    
         MCD-ST Liberty SW License Agreement.pdf和 V2Release_Notes(html)顾名思义,暂时也不关心;
         stm32f0xx_stdperiph_lib_um这个文件是介绍如何使用STM32F0xx Standard Peripherals Firmware Library以及如何建立
         工程,需要重点关注;
            Libraries文件夹里是CMSIS库文件、STM32F0xx Standard Peripherals Firmware Library和STM32F0xx_CPAL_Driver(
            这个是干嘛的,现在我不是很清楚),该文件夹里的内容也需要重点关注;
            Projects文件夹下是一些工程模板和STM32F0xx_StdPeriph_Examples,该文件夹下的内容也需要重点关注;

2.说了那么多,可以知道ST给出的用IAR建立的工程模板在\:\STM32F0xx_StdPeriph_Lib_V1.5.0\Projects\STM32F0xx_StdPeriph_Templates\EWARM
目录下,如下图:

IAR forARM 建立第一个STM32F051的工程_第4张图片

箭头所指的Project就是ST官网给的模板工程,用IAR打开它看看。

IAR forARM 建立第一个STM32F051的工程_第5张图片
从图上可以看出文件目录结构有四个Group:CMSIS存放的是STM32F0xx CMSIS files;StdPeriph_Driver存放的是STM32F0xx Standard Peripheral's Driver files;
User存放的是main.c和stm32f0xx_it.c(stm32f0xx中断处理文件);Output程序输出Group。

Tips:在workspace toolbar选择工程配置,可以改变当前编译的对象(device 型号,默认是stm32f051),如下图:

IAR forARM 建立第一个STM32F051的工程_第6张图片
IAR forARM 建立第一个STM32F051的工程_第7张图片
注意观察上图中箭头所指地方的变化。

3.因为是要建立STM32F051的工程,所以我们选择STM32F051来编译一下。在Project - STM32F051上右击,选择Rebulid All,观察Message窗口的报错。

IAR forARM 建立第一个STM32F051的工程_第8张图片
按照上图所示操作后,我们惊讶的发现编译器报了一堆错误,如右上图。不过别担心我们一个一个错误来定位解决。

4.先看第一个错误,

IAR forARM 建立第一个STM32F051的工程_第9张图片

Fatal Error(致命错误):找不到源文件stm32f0xx.h,下面四行是编译器的四个搜索目录。大家应该注意到了,第一个目录就是工程文件的上一级目录,其他三个目录都是IAR编译器的安装文件的相关目录(为什么编译器会去找这几个目录,我也不是很清楚),结果就是都没有找到stm32f0xx.h这个文件。我们可以实际点开相关的目录来查看,也没有stm32f0xx.h这个文件。

Tips:既然编译器要找这个文件,说明有那个文件里include 了stm32f0xx.h。双击上图中的Fatal Error或者四个searched目录行,可以在编辑窗口打开编译出错的第一地方,可以看见是什么文件include了stm32f0xx.h如下图:

IAR forARM 建立第一个STM32F051的工程_第10张图片

可以看见是main.h里面include了stm32f0xx.h。

5.解决第一个错误,首先要找到源文件stm32f0xx.h的所在目录,然后再告诉编译器这个目录,这样编译器在编译的时候就会在相应的目录里找寻目标文件。\ :\ST\STM32F0xx_StdPeriph_Lib_V1.5.0\Libraries\CMSIS\Device\ST\STM32F0xx\Include这个目录下有stm32f0xx.h。如下图:

IAR forARM 建立第一个STM32F051的工程_第11张图片

然后再告诉编译器,编译的时候,要搜索这个目录。在Addtional include directories下添加路径,操作如下:

IAR forARM 建立第一个STM32F051的工程_第12张图片 IAR forARM 建立第一个STM32F051的工程_第13张图片
IAR forARM 建立第一个STM32F051的工程_第14张图片 IAR forARM 建立第一个STM32F051的工程_第15张图片

点击OK,我们再来编译看看结果如何。

Tips:这里有必要说明一下相对路径和绝对路径,绝对路径是说严格按照所给的路径,比如 C:\Desktop\ST\STM32F0xx_StdPeriph_Lib_V1.5.0\Libraries\CMSIS\Device\ST\STM32F0xx\Include,
编译器会严格按照这个顺序一层一层的找。假设那天你把工程文件拷贝到另一个文件夹里,那么是不是意味着需要要重新添加或者改变路径呢?这样会很麻烦。所以用相对路径就不会有这个问题了,改的方法如下:

IAR forARM 建立第一个STM32F051的工程_第16张图片
IAR forARM 建立第一个STM32F051的工程_第17张图片

这样就不会出现工程拷贝到另外一个目录,需要再添加文件路径的问题。(左上图中第三个$TOOLKIT_DIR$\..\..\这个是干嘛的,我也不是很清楚)


IAR forARM 建立第一个STM32F051的工程_第18张图片
IAR forARM 建立第一个STM32F051的工程_第19张图片

会发现,错误还是24个,但是第一个错误已经不是找不到源文件stm32f0xx.h了,而是在stm32f0xx.h里没有选择相应的device型号(是STM32F051还是STM32F030呢?)。

6.解决新的第一个错误,双击上图中的箭头所指的错误,在编辑窗口中打开了错误的位置,如左下图:

IAR forARM 建立第一个STM32F051的工程_第20张图片 IAR forARM 建立第一个STM32F051的工程_第21张图片

如右上图中所示,把#define STM32F051的这行宏定义的注释符去掉,就等于把target device设置成了STM32F051。保存save all,再重新编译,看看结果如何。

IAR forARM 建立第一个STM32F051的工程_第22张图片

可以看出,错误只剩下21个,并且搜索路径变成了5个,多出的一个就是我之前新添加的。可以发现这些错都是找不到StdPeriph_Driver这个Group里的stm32f0xx_ppp.c文件对应的stm32f0xx_ppp.h文件。
这些文件在下图所示的目录下:

IAR forARM 建立第一个STM32F051的工程_第23张图片 IAR forARM 建立第一个STM32F051的工程_第24张图片

把这个路径添加以下,选用相对路径如右上图,再编译观察结果如下图:

IAR forARM 建立第一个STM32F051的工程_第25张图片 IAR forARM 建立第一个STM32F051的工程_第26张图片

从上图可以看出,只有一个错误,但是好几百个警告。并且编译器的第一个就是警告,这个警告是为我们少了一个宏定义,把他的注释符去掉就可以了。如下图:

IAR forARM 建立第一个STM32F051的工程_第27张图片
IAR forARM 建立第一个STM32F051的工程_第28张图片

关于这个问题的说明在 二.1里提到的 stm32f0xx_stdperiph_lib_um这个文件里有说明。

Tips:注意解决错误或者warning要从第一个地方下手,这在学C语言的时候已经知晓的,此处不再赘述。

再保存,然后编译,再查看结果。如下图:


IAR forARM 建立第一个STM32F051的工程_第29张图片

IAR forARM 建立第一个STM32F051的工程_第30张图片

从上图中得知,错误还剩下21个,但其实是一个错误,就是找不到stm32f0xx_conf.h,这个文件在如下图所示的目录中:

IAR forARM 建立第一个STM32F051的工程_第31张图片

把他添加到编译器的搜索目录下,如下图:

IAR forARM 建立第一个STM32F051的工程_第32张图片 IAR forARM 建立第一个STM32F051的工程_第33张图片

再保存,再编译,看看结果如何。

IAR forARM 建立第一个STM32F051的工程_第34张图片

终于没有错误了。

三、添加程序,点亮LED灯。

1.开main.c添加如下程序,

IAR forARM 建立第一个STM32F051的工程_第35张图片
2.编译,下载发现LED灯亮了。

Tips:以上是在ST官方的的工程基础上修改的,实现点亮LED灯。但是这个工程里包含很多的文件分散在很多个不同的目录里,使用起来很不方便。比如需要把整个工程发给别人时,同时要把好多
不相关的文件发过去。还有一些相关的设置,我们也不是很清楚。下面,我们来跟深入的理解文件的目录结果,选择必要的文件。从零开始建立工程。

四、从零开始建立STM32F051工程。
1.在桌面新建一个名为“01STM32F051”的文件夹,这里面要存放很多各种各样源文件、头文件、工程文件以及编译输出的文件。参考ST官方工程的Group架构,我们新建名为“CMSIS”、“User”和“App”三个文件夹,其中App用来存放用户自己开发的应用程序文件,在“App”文件夹下新建“inc”和“src”两个文件夹,“inc”用来存放头文件,“src”用来存放源文件。拷贝 C:\\ST\STM32F0xx_StdPeriph_Lib_V1.5.0\Libraries路径下的(如下图)“STM32F0xx_StdPeriph_Driver"文件夹到”01STM32F051"下。

IAR forARM 建立第一个STM32F051的工程_第36张图片

此时“01STM32F051”文件夹下的目录结构如下:

IAR forARM 建立第一个STM32F051的工程_第37张图片

2.现在除了“STM32F0xx_StdPeriph_Driver"文件夹,其它的文件夹里面都是空的,现在我们往每个文件夹里添加文件。  打开下图中的 stm32f0xx_stdperiph_lib_um这个文件,在Main Page里面点击STM32F0xx_CMSIS files.

IAR forARM 建立第一个STM32F051的工程_第38张图片
IAR forARM 建立第一个STM32F051的工程_第39张图片 IAR forARM 建立第一个STM32F051的工程_第40张图片

在右上图中,可以看到CMSIS包含哪些文件,以及每个文件的介绍以及一些简单的用法。现在我们就拷贝右上图中的4个文件到CMSIS文件夹里。其中stm32f0xx.h和system_stm32f0xx.h这两个头文件在如下图的目录下,

IAR forARM 建立第一个STM32F051的工程_第41张图片

其中system_stm32f0xx.c在如下图目录下,

IAR forARM 建立第一个STM32F051的工程_第42张图片


其中startup_stm32f051.s在如下图的目录下,注意下图中的中的arm、iar、gcc_ride7和TrueSTUDIO都是编译器,每个编译器的device startup file不一样。我们用的是iar所以选择下图箭头所指示目录的下的
startup_stm32f051.s文件。

IAR forARM 建立第一个STM32F051的工程_第43张图片


Tips:细心的同学会发现上图中有startup_stm32f0xx.s和startup_stm32f0xx_ld.s这两个文件,这两个文件是干嘛的,建立工程需不需要用,我也不是很清楚 。先不管,等一下建立工程编译的时候, 看看有没有什么异常。

3.拷贝main.c、main.h、stm32f0xx_conf.h、stm32f0xx_it.c和stm32f0xx_it.h到User文件夹中,这些文件在下图所示的路径中,

IAR forARM 建立第一个STM32F051的工程_第44张图片
细心的朋友也许会发现上图中的目录下也有一个system_stm32f0xx.c这个文件。那么这个文件和我们已经拷贝到CMSIS这个文件夹的system_stm32f0xx.c文件有什么区别呢?(用记事本打开这两个文件比较
发现,除了被注释掉的说明部分有些区别外,其代码部分一样)

4.打开IAR建立一个工程,按照下图的步骤。

IAR forARM 建立第一个STM32F051的工程_第45张图片 IAR forARM 建立第一个STM32F051的工程_第46张图片
IAR forARM 建立第一个STM32F051的工程_第47张图片 IAR forARM 建立第一个STM32F051的工程_第48张图片
IAR forARM 建立第一个STM32F051的工程_第49张图片
IAR forARM 建立第一个STM32F051的工程_第50张图片

这时候再看看”01STM32F051“这个文件夹下

IAR forARM 建立第一个STM32F051的工程_第51张图片

5.在工程里添加4个Group,CMSIS,StdPeriph_Driver和User,如下图,然后记得要保存。

IAR forARM 建立第一个STM32F051的工程_第52张图片
IAR forARM 建立第一个STM32F051的工程_第53张图片 IAR forARM 建立第一个STM32F051的工程_第54张图片

6.往每个Group里添加文件,把startup_stm32f051.s和system_stm32f0xx.c添加CMSIS这个Group里。如下图,

IAR forARM 建立第一个STM32F051的工程_第55张图片 IAR forARM 建立第一个STM32F051的工程_第56张图片
IAR forARM 建立第一个STM32F051的工程_第57张图片


Tips:右上图的两个.h文件不用添加到Group里 。如果不添加的话,那么编译器在编译的时候怎么找到这两个文件呢?还记得前一部分我们说的向编译器里添加搜索路径的内容,就是通过这样的方式,把文件相互关联起来。

7.往StdPeriph_Driver这个Group里添加文件,如下图,

IAR forARM 建立第一个STM32F051的工程_第58张图片 IAR forARM 建立第一个STM32F051的工程_第59张图片

8.往User这个Group里添加文件,如下图,

IAR forARM 建立第一个STM32F051的工程_第60张图片 IAR forARM 建立第一个STM32F051的工程_第61张图片

9.保存一下,现在我们来对工程进行一些设置。

IAR forARM 建立第一个STM32F051的工程_第62张图片 IAR forARM 建立第一个STM32F051的工程_第63张图片

选择Core和Device,stm32f051c8t6是cortex M0内核的,如下图,
IAR forARM 建立第一个STM32F051的工程_第64张图片 IAR forARM 建立第一个STM32F051的工程_第65张图片
IAR forARM 建立第一个STM32F051的工程_第66张图片 IAR forARM 建立第一个STM32F051的工程_第67张图片

IAR forARM 建立第一个STM32F051的工程_第68张图片 IAR forARM 建立第一个STM32F051的工程_第69张图片

改为相对路径,另外 C:\\Desktop\01STM32F051\App\inc这个目录里虽然什么都没有,但是以后开发的时候会在里面放置application.h文件,所以现在也把他的目录添加编译器的搜素目录下。

IAR forARM 建立第一个STM32F051的工程_第70张图片 IAR forARM 建立第一个STM32F051的工程_第71张图片 IAR forARM 建立第一个STM32F051的工程_第72张图片 IAR forARM 建立第一个STM32F051的工程_第73张图片
IAR forARM 建立第一个STM32F051的工程_第74张图片

因为我的烧录工具是ST-LINK,所以选择选择ST-LINK,大家可以根据自己的烧录工具来选择相应的Driver。

10.保存一下,然后按下图操作,

IAR forARM 建立第一个STM32F051的工程_第75张图片 IAR forARM 建立第一个STM32F051的工程_第76张图片
IAR forARM 建立第一个STM32F051的工程_第77张图片 IAR forARM 建立第一个STM32F051的工程_第78张图片

11.按下图所示插入图中代码,编译链接,下载,

IAR forARM 建立第一个STM32F051的工程_第79张图片

12.单步调试至如下图是,5个LED灯全亮。

IAR forARM 建立第一个STM32F051的工程_第80张图片

13.继续单步调试,则5个LED灯全灭,程序停在while(1)处。

IAR forARM 建立第一个STM32F051的工程_第81张图片

Tips:点开main.c前面的+号,可以看见main.c文件里包含(包括嵌套包含)的头文件,如左下图;在任意一个头文件上右击选择File Properties

IAR forARM 建立第一个STM32F051的工程_第82张图片
IAR forARM 建立第一个STM32F051的工程_第83张图片

可以看到文件的location,这个是iar编译器的安装目录。(在安装iar时或者iar后,可以随时选择安装iar支持的各个厂商的各个型号的device,否则编译器可能无法为我们所用。)这个从这个文件的名称可以看出它的作用,二者结合有助于我们理解编译器和我们的工程里的文件是怎么紧密结合在一起的。

IAR forARM 建立第一个STM32F051的工程_第84张图片

Tips:若设置工程时,不勾选左下图中的Use CMSIS选项,则编译会提示右下图的错误。

IAR forARM 建立第一个STM32F051的工程_第85张图片 IAR forARM 建立第一个STM32F051的工程_第86张图片

为什么呢?是因为core_cm0.h是CMSIS的一个重要文件,但是呢?我们告诉编译器的搜索路径里根本没有这个文件,所以会报错。解决的方法1:勾选Use CMSIS选项,让编译器用iar自己安装时一起下载的core_cmo.h文件。解决方法2:其实ST的官方资料里,已经给出这些必要的文件。我们可以把这些文件拷贝到工程目录下,或者工程目录下新建的或者任意的文件夹下,然后把这目录添加到编译器的搜索路径,就可以解决问题。ST官方的打包资料里的相应文件在下图所示的目录里,

IAR forARM 建立第一个STM32F051的工程_第87张图片

Tips:更多的编译原理以及相应设置使用文件,我也在学习中,需要继续深入。

你可能感兴趣的:(嵌入式,STMCU,IAR,F051)