一、建立工程文件夹:
1、本次新建的工程是基于STM32库函数的方式进行的。在进行新建工程前,确保已安装Keil5 MDK、已安装STLINK驱动、已安装USB转串口驱动。
2、安装好后,可以先创建一个工程文件夹(C盘、D盘D都可以,没有要求,记住文件路径就行),为了方便起见,我在桌面创建STM32Project 文件:C:\Users\97562\Desktop\STM32Project ,以后所有工程都存放在这个文件下,便于管理。
3、接着打开Keil5软件,第一步点击project,第二步选择新建项目,第三步在刚新建的《STM32Project》下创建第一个《2-1 STM32ProjectTemplate》工程文件夹,第四步输入需要在Keil5创建的工程名:
注意:新建的项目名称最好命名为英文,中文可能编辑会报错!!!
接下来选择芯片信号,因为我的芯片是STM32F103C8T6,所有这里选择STM32F103C8
接着弹出Keil软件的新建工程小助手,可以帮助我们快速新建工程,我们现在不用,可以先点击ok按钮关闭。
二、分组管理新建的工程文件夹数据
新建的工程文件夹下《C:\Users\97562\Desktop\STM32Project\2-1 STM32ProjectTemplate》空空如也,需要建立Start、Library、User等文件夹,然后复制固件库里面的文件到Start、Library、User工程文件夹下 。
1、建立Start启动的必要工程文件
打开:*\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm,arm下都是启动文件,复制这些文件到刚建立的第一个《2-1 STM32ProjectTemplate》的start文件下
打开:*\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x。其中stm32f10x.h就是STM32的外设寄存器描述文件,它的作业跟52单片机的头文件REGX52.H一样,用来描述STM32中寄存器和他对应的地址的。另外两个system文件是用来配置时钟的,注意:STM32主频72MHz,就是system文件里的函数配置的。
现在也将这三个文件复制到《2-1 STM32ProjectTemplate》的start文件下
因为STM32是内核和内核外围的设备组成的,这个内核寄存器描述和外围设备描述文件不在一起,所以还需要添加一个内核寄存器的描述文件,打开:*\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\\Libraries\CMSIS\CM3\CoreSupport,这两个cm3(Cortex-M3)文件就是内核的寄存器描述文件,也将这三个文件复制到《2-1 STM32ProjectTemplate》的start文件下
打开Keil5软件,把我们刚才复制的那些文件添加到Keil工程里
在Keil5新建的Project1工程下,第一步修改Source Group 1组名为Start(注意:修改时,先点击一下组名,然后再点击一下就可以了,连续双击会直接打开弹窗),第二步选择Start组名右键,选择添加已经存在的文件到组里来,第三步把文件过滤器选择为ALL files,第四步选择startup_stm32f10x_md.s启动文件,第五步,点击Add按钮添加,最后Close关闭
因为我的芯片STM32F103C8T6,需要md.s文件,不同的芯片选择的启动文件不一样,具体看芯片的型号的Flash闪存的容量,如下:
添加好的文件,右边有个带钥匙的样式,表示只读的意思,这些文件都是STM32里最基本的文件,是不需要我们修改的,添加进来即可。
最后还需要在工程选项里添加这些文件夹的头文件路径,不然软件是找不到.h文件的。第一步:我们点击这个魔术棒按钮;第二步:打开工程选择,在c/c++里,找到这个Include Paths栏,然后点击右边三个点的按钮;第四步点击方形按钮;第五步:再点击三个点的按钮;第六、七步:把start路径添加进来;最后依次点击ok按钮关闭。这样就把头文件路径添加进来了
2、验证工程可行性
接下来我们再新建一个main函数,看看这个工程是否可行,先打开工程文件夹《C:\Users\97562\Desktop\STM32Project\2-1 STM32ProjectTemplate》,新建User,我们的main函数就放在这个文件夹里
返回Keil5,在Target处右键,添加组名为:User
然后在User上右键,点击添加新文件,选择c文件,名字叫main,文件路径注意选择《C:\Users\97562\Desktop\STM32Project\2-1 STM32ProjectTemplate》,默认是放在文件夹外面的
在添加进来的main.c里,我们先右键,插入头文件,选择stm32f10x.h
注意:文件的最后一行必须是空行,不然会报警告
int main()
{
while(1)
{
}
}
然后我们点击左上方这个按钮,编译并建立工程 ,如果显示0错误0警告,说明我们键的工程没有问题
3、为工程添加库函数
打开工程文件夹下《C:\Users\97562\Desktop\STM32Project\2-1 STM32ProjectTemplate》,新建Library来存放库函数。
接着打开固件库STM32标准外设驱动文件夹:*\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\\Libraries\STM32F10x_StdPeriph_Driver\src,这些都是库函数的源文件,misc是内核的库函数,其他的就是内核外的外设库函数了,选择全部文件复制到新建Library文件夹下
然后再打开固件库的inc文件夹:*\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\inc,这些都是库函数的头文件,继续全选,然后复制到新建Library文件夹下
同样,在Target处右键New Group,添加组名为:Library
然后Library右键,添加已经存在的文件,打开Library,Ctrl+A 全部添加,这样就把所有的库函数文件都添加进来了
但是对于这个库函数来说,还不能直接使用,我们还需要再添加一个文件 ,打开:*\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template, 可以看到一个conf文件和两个it文件,这个conf文件是用来配置库函数头文件的包含关系的,另外也可以用来参数检查函数定义,是所有库函数都需要的,两个it(interrupt)文件是用来存放中断函数的,现在需要把这三个文件复制下来,粘贴到工程的User目录下
接着回到Keil5软件,在User组里,把刚才那三个文件添加进来
最后还需要一个宏定义,在Keil软件的User文件夹下找到main文件,然后在这个头文件右键,打开文件
将文件滑到最后,可以看到这个语句,这是一个条件编译,意思是:如果你定义了使用标准外设驱动(USE_STDPERIPH_DRIVER)这个字符串,下面这个include "stm32f10x_conf.h"语句才有效,所有现在我们还需要复制这个字符串"USE_STDPERIPH_DRIVER"
然后打开工程选项,在c/c++的Define栏目粘贴上这个字符串,这样才能包含标准外设库,也就是库函数
同时也不要忘了在下面的头文件路径,把新建的User和Library目录的路径也都添加上
这样,我们基于库函数的工程就建好了
对于新建的工程,除了User下的文件可以更改,其他带钥匙的文件是不能变的,我们可以调下文件夹的位置,是视觉更舒服点,我们可以点击三个箱子的按钮,把这个Library往上挪一下就可以了
到这步,基于库函数的新建工程就可以啦