直入正题
在你正确的安装Keil4或者Keil5后(同时你也安装上要建立工程的芯片包后)请看下图:
点击Project后
点击New uVision Project
然后它会要求你将核心工程文件保存在某个地方。
不过,我们别急着随便找个地方就直接保存这个工程文件,因为我们后期的单片机工程越复杂,文件越多,我们越不好去找。因此,我们必须学会建立多个文件夹,根据不同功能和用途来对这整个工程文件进行保存。
我们将核心文件命名为Temp然后保存即可。
保存成功后,我们就到了挑选芯片类型的环节:
(图中Software Packs一栏为你安装的芯片包所属类型)
我的计算机里安装了两个基础芯片包类型,一个是software Packs(主要是STM32F1、F4系列芯片以及ARM芯片类型),如图所示:
如果要找51单片机的芯片,需要切换software Packs一栏,如图:
(具体你想要找的芯片类型在哪里,你需要看自己的具体情况,前提是你安装了含有该芯片的芯片包)
(你也可以在Search中输入需要找的芯片型号快速查找)
如果新建的是51单片机工程,那么我们一般找的芯片类型是AT89C51以及AT89C52。(后者是前者的升级版,主要是扩宽了缓存容量以及增加定时器数量,你需要按需求选取,但一般新手学习时一般不用注重这个东西,选哪个都一样)
我们以AT89C51芯片为例:
出现这个提示时,点“是”即可。
如果你没有上述这个提示,那么很大可能是你在安装keil软件时就缺失了C51的相关库和芯片包,你需要重新检查自己的软件安装时是否正确,或者重新安装C51的芯片包。
如果你已经正确安装C51包,那么你安装keil软件路径中的C51文件夹底下应该会有这些文件夹,它不可能是空的!并且你需要按下图改配置:
格式改为:PATH = “keil软件主路径下\C51\”(比如本人图中这种)
建立完工程后你会看到如下:
如果你要新建STM32工程文件,前面过程都差不多,以STM32F103RCT6(大学做小车的比较爱用这种芯片)举例,如图:
(我们选这个STM32F103RC就行,就算换成STM32F103R8T6,它也只显示STM32103R8)
选中后如下,我们之后直接点OK就行:
建立完成后如下:
(和C51工程不一样,旁边的Sorce Group 1里没有东西是正常的,但是后期我们必须手动导入必要核心驱动文件和函数方法文件,这个和C51工程略有差别,但是不用担心,我下面都会讲)
到这里基本上我们就建立完工程了,但没有任何可以开始编程的文件,接下来开始新建可供编程的文件吧。(最好对C语言有一定基础,这样便于理解)
正式新建可以编程的文件
我们继续以C51工程为例,首先我们需要点击这个图标
看见以下界面,我们点击C51这一栏
之后我们要在Include Paths里选择C51核心文件的所在地,不然我们无法引用头文件,也就无法进行下次的编译(这个需要每次建立新工程时进行设置) 如图:
下面的设置是额外需要自己手动配置的,STM32工程中也可以设置
之后点击OK即可。
我们点击上面的这个图标新建空白文件
之后我们点击保存图标 ,或者Ctrl+S快捷键来保存这个文件
由于C51的工程文件一般比较简单,所以我们直接对其命名,然后保存在这个默认路径即可(除非你的C51工程文件比较复杂,那么笔者建议在这个路径下新建一个专门保存编译文件的文件夹用于保存) 如下:
保存后就可以进行编译了。
我们来测试一下,我写了个单片机流水灯程序:
include <reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit led = P2^0:
void delay(u16 i)
{
while(i--) ;
void main(void)i
while(1)
{
led = 0;
delay(50000) :
led = 1:
delay(50000) ;
}
}
点击编译图标 (前者是编译当前这个文件,后者是编译全部的文件)
编译后如下:
这里看见没有错误,但是有警告。一般情况下,是没有错误和任何警告的,在实际编译过程中,我们要尽可能往无错误无警告的方向靠近,这是良好的编译习惯。(虽然一般情况下,即使它有部分警告但是不影响最终编译)
在上述警告中,我们可以看到L1行和L2行说了“没有解决外部的问题”,发生了什么呢?
我们前面其实忽略了一个十分重要的步骤,那就是将这个main.c加入我们的编译组中!
于是我们接下来应该添加我们的编译文件加入编译组。
方式一:
方式二:
点开这个图标
点击Add Files...
然后按上面相似的步骤添加文件即可,添加完成后如下:
点击OK后,main.c就会出现在旁边。
C51的工程文件就正式建立完成了!编译后无任何错误。
我们接下来以STM32工程为例:
STM32工程的创建比较复杂,我们这里用到STM32的标准库开发方法来进行工程创建。这个需要自己去下载(比如正点原子的STM32标准库),这个Keil中是不会配备给你的(我这里已经有了)
我们使用标准库或者HAL库(HAL库会有更强大的函数方法供我们使用)的目的就在于前期降低开发难度(特别是要参加嵌入式比赛或者电赛的大学生同学),很多STM32上的器件对应的函数方法就会在这些库中,我们只要懂如何调用它们就可以,而不需要自己从底层开始学习和开发。
我们先来导入标准库(函数方法库)到指定文件夹!
在我们保存的STM32工程文件的路径Object以外,我们再新建几个新文件夹:
这些文件夹的作用如下:
CORE:STM32最核心部分,用于存放给STM32单片机初始化的核心文件
STM32F10x_FWLib:里面还含有src和inc两个文件夹,但是作用是存放stm32单片机的所有函数方法,这些函数方法来自于你提前准备好的stm32标准库源文件包。(一会会介绍)
SYSTEM:用于存放你自己写的函数方法,而且一般是功能性的函数方法(你可以不用这个文件夹,自己写的函数方法放在User文件夹里,这都是自由的)
User:用于存放main.c以及其他自定义函数方法
以上文件夹的命名都不是强制性的,自己喜欢可以自己重命名。(重点在于STM32工程一般文件较多,要养成分类的习惯)
我们接下来先将STM32源文件包的其中一部分导入到我们的STM32F10x_FWLib文件夹中
接下来我们导入CORE文件夹的东西(它包含着STM32芯片的核心初始化文件)
在源文件包中我们找到这个文件夹:
接下来我们继续找到这个路径:
将stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h这三个头文件拷贝至User文件夹中(这三个头文件是最主要的stm32头文件)
继续打开startup文件夹,然后你会看到以下几个文件夹:
这几个文件夹中含有stm32不同内存大小芯片的“启动文件”。不同缓存大小的stm32芯片型号所对应的启动文件是唯一的。以STM32RCT6为例,它对应的启动文件应该是:startup_stm32f10x_hd.s,如果我们改成startup_stm32f10x_md.s或者其他就会出现如下的情况:
我们打开arm文件夹将对应的启动文件复制到CORE文件夹即可。(其他文件夹和不同缓存大小的芯片对应的启动文件需要你自己查证清楚后选择)
复制完启动文件后我们还需要对其进行设置,如下:
点击,然后点击到C/C++一栏,看到Preprocessor Symbols的Define一栏,填入这行文字:“STM32F10X_HD,USE_STDPERIPH_DRIVER”。USE_STDPERIPH_DRIVER逗号前的文字即为启动文件的名称(全大写)。
最后CORE文件夹存在以下文件即可:
最后User文件夹存在以下几个主要文件即可:
最后STM32F10x_FWLib文件夹存在以下文件夹即可:
接下来我们要将上述函数文件夹在Keil中进行设置,让Keil能找到这些文件,不然它就无法进行引用和编译。
还是点击这个图标,然后还是在C/C++一栏,找到Include Paths(包含路径)这一栏,点击后面的省略号“...”图标,将我们刚刚复制文件的那几个文件夹路径全部添加进去:
(添加完后如上,每当你新建了文件夹用于存放函数方法并且你想要引用它时,你就必须再添加这个新建文件夹对应的路径一次)
对编译文件组进行设置(同上面51单片机的编译组添加方法一致)
添加前:
添加后:
再添加main.c函数并将它添加进User函数组和对应文件夹即可(这里不再演示)
然后一个STM32工程文件就创建完成了。
到此,Keli创建51单片机/STM32单片机工程的教程就结束了,撒花完结!