建立stm32工程——基于标准库也就是库函数的方式
使用库函数的方式我们需要准备一个STM32库函数的压缩包“STM32F10x_StdPeriph_Lib_V3.5.0.zip”,其包含文件具体如图1所示。

图1 固件库
其中,“Libraries”是库函数的文件,后续新建工程会用到;“Project”为官方提供的工程示例和母版,以后使用库函数的时候可以参考;“Utilities”是STM32官方评估版的相关历程,这个评估板就是官方用SM32做的一个小电路板,用来测评STM32的,其包含的“STM32_EVAL”文件夹里面存放的就是这个小电路板的测评程序;“Release_Notes.html”是库函数发布文档;“stm32f10x_stdperiph_lib_um.chm”是使用手册,指导如何使用库函数。
现在正式新建一个给予标准库的工程:
1、新建一个文件夹
比如命名为“my_stm32_projects”,用来存放所有的工程,以后工程都存放在这个文件夹下,方便管理。
2、打开keil5软件
点击“Project”→“New uvision Project”,如图2所示。

图2 新建Project
3、在弹出的界面
选择刚刚新建的文件夹“my_stm32_projects”,在其中新建一个文件夹(命名为“stm32工程模板”)存放此次的工程,然后将工程文件命名为“Project”,如图3所示。

图3 工程存放
4、接下来选择器件型号
这里选择“STM32F103C8”,如图4所示。


图4 选择器件
5、接下来弹出的界面
keil软件的一个新建工程小助手,如图5所示。可以帮助我们快速新建工程,这里我们暂时不用。

图5 小助手
6、到此为止工程就建好了
但这里工程文件空空如也,还不能直接使用,我们还需要给它添加一些工程的必要文件。打开固件库文件夹,在这个路径
“.\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\
startup\arm”下都是STM32的启动文件,如图6所示。STM32程序就是从启动文件开始执行的。

图6 启动文件
7、复制所有启动文件
然后在“stm32工程模板”文件夹下新建一个文件夹“Start”,将启动文件复制到“Start”文件夹下,如图7所示。


图7 复制启动文件
8、打开路径
“.\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x”,其中有三个文件。
“stm32f10x.h”是STM32的外设寄存器描述文件,它的作用就跟51单片机的头文件REGX52.H一样,是用来描述STM32有哪些寄存器和它对应的地址的;
“system_stm32f10x.c”和“system_stm32f10x.h” 这两个system文件是用来配置时钟的,STM32主频72MH2,就是system文件里的函数配置的。
把这三个文件也复制到“Start”文件夹下,如图8所示。

图8 复制system文件
9、添加内核寄存器描述文件
打开路径“.\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport”,这两个cm3(Cortex-M3)文件就是内核的寄存器描述。把这两个文件复制到“Start”文件夹下,如图9所示。(这个STM32是内核和内核外围的设备组成的,而且这个内核的寄存器描述和外围设备的描述文件不是在一起的。)

图9 复制内核文件
到此为止,我们工程的必要文件就复制完成了。
10、回到keil软件
然后再单击一下“Source Group1”,把这个组改一下名字,也叫Start,如图10所示。

图10 Source group
接着右键,选择添加已经存在的文件到组里来,添加这些文件,如图11所示。

图11 添加已经存在的文件
添加启动文件,此次我们添加“startup_stm32f10x_md.s”文件,如图12所示。

图12 添加启动文件
然后把剩余的.c和.h文件都添加进来,如图13所示。

图13 添加.c和.h文件
“Start”文件夹中的文件都是STM32里最基本的文件,是不需要我们修改的。我们添加进来即可。
最后我们还需要在工程选项里添加上这个文件夹的头文件路径,要不然软件是找不到h文件的。我们点击这个魔术棒按钮,如图14所示。

图14 魔术棒按钮
打开工程选项,在C/C++里,我到这个Include Paths栏。然后点击右边三个点的按钮,在这里新建路径。然后再点三个点的按钮。把Start的路径添加递来,点击OK这样就把这个文件实的头文件路径添加进来了,具体操作见如图15所示。

图15 添加Start路径
11、接下来我们新建一个main文件
看看工程是否可以运行。回到工程文件夹,新建一个文件夹“User”,main函数就存放在这个文件夹里。然后回到keil,在左栏“Target1”上右键,点击“Add Group”,并重名为“User”,如图16所示。

图16 添加组
然后在User上右键。点击添加新文件,如图17所示。

图17 添加新文件
选择C文件,名字为“main”,存放路径为“user”,之后点击“Add”即可,如图18所示。

图18 新建main.c文件
在这个main.c里,先右键插入头文件。选择stm32f10x.h,如图19所示。

图19 插入头文件
写下一段代码,如图20所示。
注意, main函数是一个in型返回值,void参数的函数,还有文件的最后一行必须要是空行,要不然会报警告。然后我们点击“Build”按钮(添加预定义,参见图29),编译并建立工程。

图20 main文件代码
这个工程目前还没有添加STM32的库函数,所以它还是一个基于寄存器开发的工程。如集只用寄存器开发STM32。那工程建到这里就可以了。
12、接下来我们添加库函数
打开工程文件夹,在这里新建一个文件实,叫“Library”,用来存放库函数。接着打开固件库的文件夹,打开Libraries,STM32标准外设驱动,具体路径为
“.\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src”
在“src”文件夹中都是库函数的源文件,将全部文件复制到工程文件下的“Library”文件夹中,如图21所示。

图21 粘贴“src”中文件到“Library”
然后打开
“.\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x _StdPeriph_Driver\inc”,这些是库函数的头文件。将全部文件复制到工程文件下的“Library”文件夹中,如图22所示。

图22 粘贴“inc”中文件到“Library”
13、回到keil软件
同样在“Target”处右键。然后添加组,命名为“Library”,如图23所示。

图23 添加组“Library”
14、再右键添加已经存在的文件
打开“Library”,全选后点击“Add”添加,如图24所示。

图24 添加已经存在的文件到组“Library”
但是对这个库函数来说。现在不能直接使用。我们需要再添加一个文件,我们打开固件库文件夹。打开“. \STM32F10x_StdPeriph_Lib_V3.5.0 \Project\ STM32F10x_StdPeriph_Templatee”,可以看到stm32f10x_conf.h和两个it结尾的文件。这个conf文件是用来配置库函数头文件的包含关系的,另外这里面有个焦聚参数检置的函数定义。这是所有库函数都需要的。两个it文件是用来存放中断函数的。把这三个文件复制到工程目录下的“User”文件夹中,如图25所示。


图25 复制conf和it文件到User文件夹
回到Keil软件,在左侧栏“User”右键添加已经存在的文件,把刚刚三个文件添加进来,如图26所示。

图26 添加conf和it文件到User
15、最后还需要一个宏定义
我们可以在这个头文件右键。打开文件,如图27所示,滑动到文件最下方。看到这个语句。这是一个条件编译,如图28所示,其含义为如果定义了“USE_STDPERIPH_DRIVER”这个字符串,下面这个indlude conh语句才有效。我们需要复制一下这个字符串,然后打开工程选项,粘贴这个字符串,如图29所示,这样才能包含标准外设库,也就是库函数。


图27 图28
最后添加头文件路径,把“User”“Library”目录路径都添加上,如图29所示。

图29 添加头文件路径
至此,基于库函数的工程就创建好了。
(
var code = "a564bd61-5b5e-4e10-9e77-69c43fb65c5b"
)

浙公网安备 33010602011771号