• 新建stm32工程——基于标准库也就是库函数的方式


    本文是在看过网上视频之后整理而成的文字,只可用于交流学习,不得用于商业用途。

    使用库函数的方式我们需要准备一个STM32库函数的压缩
    包“STM32F10x_StdPeriph_Lib_V3.5.0.zip”,其包含文件具体如图1所示。

    在这里插入图片描述

    图1 固件库

    其中:

    1. Libraries”是库函数的文件,后续新建工程会用到;
    2. Project”为官方提供的工程示例和母版,以后使用库函数的时候可以参考;
    3. Utilities”是STM32官方评估版的相关历程,这个评估板就是官方用SM32做的一个小电路板,用来测评STM32的,其包含的“STM32_EVAL”文件夹里面存放的就是这个小电路板的测评程序;
    4. Release_Notes.html”是库函数发布文档;
    5. 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\Device Support\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 魔术棒按钮

    打开工程选项,在CC++里,我到这个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 添加头文件路径

    至此,基于库函数的工程就创建好了。

  • 相关阅读:
    Redis 技术整理
    logback-spring.xml配置文件标签(超详解)
    View-of-Delft数据集文件学习
    数据结构之双向链表
    一篇文章彻底搞懂熵、信息熵、KL散度、交叉熵、Softmax和交叉熵损失函数
    DYC算法开发与测试(基于ModelBase实现)
    bug定位策略
    Java注解详解和自定义注解实战,用代码讲解
    环保电商:可持续发展在跨境电子商务中的崭露头角
    SGE(集群任务管理系统)常用操作命令
  • 原文地址:https://blog.csdn.net/qq_28077617/article/details/136712381