自学篇--使用keil5.23创建一个stm32工程并编译(固件包自带版本)

之前在本科学习阶段学习过一点51单片机的知识,可是因为基本没有实践过几次现在已经完全忘记了。。前几天老师突然丢给我几个板子说让我把程序编译、烧写环境装好,当时我就震惊了,不过经过三四天的自我摸索,之后参考他人的学习经验,现在已经基本能处理这个问题了,所以为了方便后面的学者,主要也是为了把自己这几天的学习成果记录一下,我在这里把这个过程写下来。(因为刚刚接触,很多原理性的东西都还不懂,只是一个操作步骤。所以哪里不对,还希望大神指正!)

这篇文章主要讲的内容是:使用keil5.23软件创建一个工程框架,并利用stm32官方固件包里的example填充工程,最后成功编译。

(下篇文章记录了我的程序烧写过程,如有需要可以翻阅)

首先声明,我用的软件是keil5.23,用的板子是stm32l152c-disco,MCU型号stm32l152rct6。当然这一步并没有用到板子,不过还是得说一下,因为中间要选择相关的库函数等。

第一步:工程文件夹系统的建立

首先,创建一个文件夹,按你自己的工程取名。然后我们所有的工程文件都放在这个文件夹中。为了方便我就按日期创建的文件夹,然后我又在文件夹中创建了另外几个子文件夹,分别是:CORE,USER,OBJ,STM32L15x_FWLib,HARDCORE,SYSTEM。

  • (此处参考之前别人的学习经验——每个文件夹用途):
  • CORE存放核心文件和启动文件;
  • OBJ用来存放编译过程文件以及生成的HEX文件;
  • STM32L15x_FWLib用来存放官方固件库源码文件;
  • USER存放工程文件,主函数等等;
  • SYSTEM用来存放每个实验都用的共用代码;
  • HARDCORE存放提供外部硬件相关的驱动函数。


第二步:固件包文件的搬运

然后去官方网站下载对应的固件包,下载固件包可以参考另外一篇文章,这里不详细介绍。

打开固件包,开始最麻烦的一项工作,将固件包中的文件复制粘贴到我们刚才创建的文件夹中(这里有一点说明,因为版本和获得固件包的方式不同,所以如果在我的路径没有找到相关文件,可以尝试在整个固件包下搜索)。

首先,是STM32L15x_FWLib文件夹。打开固件包,定位到en.stsw-stm32077/STM32L1xx_StdPeriph_Lib_V1.3.1/Libraries/STM32L1xx_StdPeripg_Driver文件夹下,将inc文件夹和src文件夹复制粘贴到我们的STM32L15x_FWLib文件夹下。


之后是CORE文件夹内容的复制。定位到en.stsw-stm32077/STM32L1xx_StdPeriph_Lib_V1.3.1/Libraries/CMSIS/Include文件夹下,将其中的core_cm3.c和core_cm3.h复制到CORE文件夹下。(其实这里没有.c文件,我也不知道为什么,可能是版本问题吧,所以我的.c文件是从别人的工程中复制过来的,如果你下载的固件包也没有可以试着去复制)

紧接着定位到en.stsw-stm32077/STM32L1xx_StdPeriph_Lib_V1.3.1/Libraries/CMSIS/Device/ST/STM32L1xx/Source/Templates/arm文件夹下,将startup_stm32l1xx_hd.s复制到CORE文件夹下。另外在固件包中搜索出core_cmFunc.h以及core_cmInstr.h并复制到CORE文件夹下。


后面是USER文件夹内容的添加,定位到目录:en.stsw-stm32077/STM32L1xx_StdPeriph_Lib_V1.3.1/Libraries/CMSIS/Device/ST/STM32L1xx,将stm32l1xx.h,system_stm32l1xx.h以及system_stm32l1xx.c文件复制到USER下。(再次强调,特定路径没有的就去固件包搜索下)

定位到目录:en.stsw-stm32077/STM32L1xx_StdPeriph_Lib_V1.3.1/Project/STM32L1xx_StdPeriph_Templates,将mian.c,stm32l1xx_conf.h,stm32l1xx_it.c,stm32l1xx_it.h复制到USER下。


(注:USER中的其他文件都是在创建工程的时候产生的,不用担心!)

关于SYSTEM和HARDCORE文件夹的内容,有的文章讲到有的没有讲到,所以我将其搁置了,实验表明暂时没有对编译造成影响。

到此为止,文件内容就已经填充完毕,我们可以开始使用软件创建工程了!!

第三步:工程创建

打开keil软件,点击project->new uversion project...


定位到USER文件夹下


文件名根据你自己的工程起,我的是Template.(上图是已经创建好的工程,第一次创建的应该是空的文件夹显示)

下面根据自己MCU型号选择


之后这个可以直接cancel掉


到现在,框架基本已经搭好了,然后我们把之前搬来的材料在工程内部填好。

第四步:将材料填入工程

右键单击Target1->manage project items。出现如下图示



在group中添加文件夹


然后是往group中添加文件,通过“Add Files”来执行:

USER目录下添加:mian.c,stm32l1xx_it.c,system_stm32l1xx.c;


CORE目录下添加:core_cm3.c,startup_stm32l1xx_hd.s(注意这里要选择添加文件夹格式才能看到);


FWLIB目录下添加:STM32L15x_FWLib/src文件下向下面的所有.c文件。


SYSTEM和HARDCORE都是先搁置,后面用到再添加。

第五步:编译工程

点击魔术棒->选择output->select folder选择我们刚才创建的OBJ为输出路径,这样输出的HEX文件就会保存到OBJ目录下->勾上下面三个对号,这样能生成HEX文件。



下面点进C/C++->添加路径(将刚才放有.h文件的路径都添加进来,需要注意,keil只会在一级目录查找头文件,就是说文件夹下面子文件夹里面的头文件不会搜索到),如图所示是我们演示工程所需要添加的头文件路径。


点击OK->OK。此时我们可以编译下程序


可以看到出了很多错误:error directive: "Please select first the target STM32L1xx device used in your  application (instm32l1xx.h file)"


这是因为我们没有设置目标设备,再次点进魔术棒,将设备添加进去(圈起来的部分),并将宏定义好(USE_STDPERIPH_DRIVER),就可以了。如图所示:


重新编译,就成功了。


猜你喜欢

转载自blog.csdn.net/yang_csdnforobts/article/details/78947768