在Keil MDK5中创建工程以及遇到的问题

索引一、建立工程二、可能遇到的问题

索引

本文假设读者已经安装好了Keil MDK5。 ?

一、建立工程

1. Keil界面中选择 Project => new μVision Project,选择一个空文件夹,输入工程名,如下:

建议所选路径为全英文,避免意料之外的错误,这个老生常谈了 ?

2. 选择芯片,可以在search里搜索,如下:

?

3. 这一步到了Run-Time Environment管理,如图:

一般情况下,我们在建立工程时会把图中两个标记的部分勾选上,分别会为工程添加对应的固件库和启动文件。但是我们这里不勾选,直接点Cancel跳过,后面手动添加,目的是了解工程建立的详细过程。

另外还有一点,通过这里勾选添加的固件库并不会被实际拷贝到工程目录下,工程编译时会去相应的文件库寻找头文件。这也是我写下这篇文章的原因,因为Keil的文本编辑功能过于简陋,我寄希望于用VS Code去替代Keil(指替代Keil的编辑、编译功能)编辑代码,如果工程目录下没有固件库文件,会导致VS Code无法找到头文件。虽然可以在配置文件中添加头文件路径,但是也只是对单个工程而言,另开一个工程又要重复设置,暂未找到在VS Code中为Keil项目统一设置头文件路径的方法。

综上,选择在工程中手动添加固件库。

?

4. 手动添加库文件 接下来打开工程所在目录,新建几个文件夹:CORE、Bsp、User、Utils,文件夹名称可以随意,如下:

User:用来存储你自己写的代码,暂时不用管它。 Bsp和Utils两个文件夹暂时用不上,你也可以不用创建它们。随着开发过程的进行,这俩文件夹可以用来存放一些驱动文件或工具文件等,暂时不管。 CORE:存放一些stm标准库,马上要用到。

问题来了,固件库文件从哪来? 1、Keil安装目录中能找到(如果你有下载对应器件库的话); 2、官网下载:https://www.st.com/content/st_com/en/search.html#q=stsw-stm32-t=tools-page=1

这里我们选择官网下载,我一直觉得Keil中的文件过于杂乱(究其原因是本人初学也不太懂),以stm32f10x为例:

解压出来呢里面就有这么些东西: 1、我们先将Libraries目录下的STM32F10x_StdPeriph_Driver整个拷贝到工程文件中 2、然后在 Libraries\CMSIS\CM3 目录及其子目录下找到如下几个文件:core_cm3.h、system_stm32f10x.c、system_stm32f10x.h、stm32f10x.h、startup_stm32f10x_hd.s 拷贝到CORE下。

3、在库文件目录Project\STM32F10x_StdPeriph_Template下将stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h 拷贝到CORE下。

4、我们还是需要Keil安装目录下的一些文件:cmsis_armclang.h、cmsis_compiler、cmsis_gcc.h、cmsis_version.h,这些文件可以直接在Keil安装目录搜索,每个文件都可能搜索到多个结果,根据器件选择合适的拷贝到CORE目录下。

至此呢,文件就准备好了。

?

5. 在工程中添加文件并分组 只是简单的把文件放在工程目录下,在工程编译时是不会被使用的,需要在Keil界面中为工程添加文件。

? 点这个玩意儿:

得到如下界面:

在Project Targets中可以修改Target名称。 在Groups可以添加新的代码组(group)或删掉group,合理建立group可以时代码结构更清晰。 在Files中可以对选中的group添加文件。

? 可以按照上图建立group; 在CORE中添加CORE文件夹中的 .c 文件和 .s 文件; 在User中添加自己写的 .c 文件,如果没有可以后续创建再添加; 再FWLIB中添加STM32F10x_StdPeriph_Driver文件夹中的全部文件;

?

6. 配置c/c++ include path 点击魔法棒:

然后:

将带有 .h 文件的目录包含进去:

至此呢,就算建完了。

?

二、可能遇到的问题

1. 编译出现大量错误 我遇到的情况是这样子:

这个和CMSIS的版本有关,我们在官网下载的固件库中的 core.cm3.h 文件比较老旧,可以打开此文件看看最上面的版本信息。 ? 比如我下载的这个版本是 V1.30,还是2009年的,确实很老了: ? 但是如果你有在Keil中下载对应的固件库的话,你可以在Keil的安装目录找到一个新版本的该文件。你可能会搜索到很多个同名文件,通过路径名与对应器件选择正确的文件,对工程目录下的该文件进行替换。 如下,Keil中有一个版本为 V5.1.2 的:

? 至此就能成功编译了。

?

如有需要可联系我 mail: caolikun0730@126.com

Keil5如何手动添加STM32芯片包

问题:

在安装完Keil之后,需要导入32芯片包,但是按照官方的视频,直接点击已经资料给有的包会报错,如下图: 换另一种方法,如图:第二步后再点击 import ,导入自己要导入的包,结果还是报错。

解决方法

1、在自己安装的软件目录下找到 .\Keil_v5\UV4\PackUnzip.exe ,找到其属性,将其兼容性改为以管理员身份运行。如图: 2、以管理员身份运行Keil; 3、依次点击 Pack Installer → file → import ,选择自己要安装的包,然后确定。 这样就安装完成了。成功如图:

???????前几天把C语言都复习完了,打算开始把STM32学一遍,巩固一下单片机的知识。由于之前做比赛用的是NXP的LPC54606和KEA128,学校的单片机课程也是MSP430F5529,所以到现在还没接触过STM32,就想着在秋招前先过一遍。 ??学习STM32看的并不是正点原子的视频,选择了刘凯的视频。等我刘凯的视频学习完后会用正点原子的视频快速复习一遍。 ??由于之前比赛都是用逐飞科技创建的工程,所以从来没有自己创建过单片机的工程。由于刘凯老师用的是keil4和2.0的固件库,完全不一样,所以今天先用KEIL5创建一下3.5固件库的工程,写下创建工程的步骤,方便以后自己和有需要的人观看。 ??首先打开安装地址,点击自己对应的芯片。如果统一同样时F10x的话可以直接从我的网盘下载: ??链接:https://pan.baidu.com/s/13u4N3q-vEvEEG-vjQ0WaHw 提取码:5p43

点击后出现对应型号芯片下拉页面,进行下载 ??先确定好自己创建工程的地方,然后创建文件夹,比如我创建了名为STM32F10x_V3.5的文件夹。然后此文件夹下创建四个子文件夹放固件程序。分别为user(放置自己编写的文件,比如main.c)、CMSIS(微控制器软件接口标准,主要是关于内核)、startup(启动文件)、driver(外设驱动) 1.将3.5的固件库目录STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template下的四个文件复制到user文件夹中去,如图所示: ??stm32f10x_it.c和stm32f10x_it.h是存放STM32工程中所有中断函数的模板文件。 ??为什么需要conf文件?(点击跳转) 2.然后将固件库中的CoreSupport下的文件,以及STM32F10x下的三个文件复制到自己创建的CMSIS中,具体地址如图所示: ??关于Core_cm3.c文件的解释(点击跳转) 3.再将arm目录下的文件复制到自己创建的startup文件中,目录如图文件夹所示: 4.最后将STM32F10x_StdPeriph_Driver中的两个文件夹inc与src复制到自己创建的driver中。目录如果所示: ??inc放置的都是h文件,src放置的都是源文件,就是C文件。这里面都是外设的源文件,比如ADC之类的。 ??好了,文件已经复制完毕现在去keil创建属于自己的工程。在工具栏中点击Project->new uVision project创建工程。将工程保存在之前创建的STM32F10x_V3.5文件下,此文件夹下还有之前创建的四个文件夹,并给自己的工程起名。

选择自己的芯片型号 ??这个manage run-time environment中也有固件库,直接勾选即可,是keil5的新功能。今天我们创建工程的方式是自己去搬运官网给的库,加深一下理解和增加动手能力,所以没有使用manage run-time environment来添加库,直接点击OK即可。 ??接下来就是添加对应的源文件到工程中,步骤如图所示 ??其中driver只需要将src的c文件放入即可,不用将inc文件放入,头文件之后会去魔法棒中操作。 最终结果: ??再进一步操作: ??给每一个群组添加对应的源文件,除了startup时.s文件以外其他都是.c文件。 ??includepath最右边的三个点点击之后添加.h文件的对应路径,也急速hi根目录。 ??内容为: ??其中Define的内容要写USE_STDPERIPH_DRIVER,因为只要写了才会包含各个驱动脚本的头文件。 ??main函数中其他都删了,只保留图中内容即可。 ??试着编译了一次居然报错了。 ??百度了一下查到了解决方法。原来要根据自己的芯片flash容量选择启动文件。关于启动文件的分析。所以你会发现网上那么多创建工程的教学,每个人的启动文件都是不同的。 ??startup留下适合自己芯片的启动文件之后不会报错

将外部晶振设置为8,这个是根据自己的核心板上对应的晶振来写。 ??如果没有勾选Create HEX File 就无法生成HEX文件,学习过51的朋友应该会知道,包括平常用protues仿真时,都是用hex文件。 ??OK!大功告成,可以开始敲代码了! ??之前编译都是用IAR编译的,几乎没有怎么使用KEIL,今天也算是熟悉了一遍操作。

4.23补充: 仿真设置: ??因为开发板在学校,现在只能使用软件仿真的形式。发现KEIL5在使用硬件调试Peripherals工具栏少了很多东西,下面进行设置补充: ??魔法棒-Options for Target窗口-Target选项卡,勾选Use Custom File,然后在System Viewer file中选择stm32f4xx.sfr文件,文件对应ARM型号即可。 ?? ??在Debug中选择Use Simulator,即使用软件仿真。选择Run to main(),即跳过汇编代码,直接跳转到main函数开始仿真。并且将下面的Dialog DLL设置为DARMSTM.DLL和TARMSTM.DLL,Paramete均为:-pSTM32F103C8(根据自己芯片写),用于设置支持STM32F103C8的软硬件仿真,最后点击OK完成。