3、使用ST官方外设库新建工程模板

目录

0x01、库文件分析

0x02、创建工程模板

0x03、Keil设置


0x01、库文件分析

1、解压下载的库文件,文件夹内容如下图所示

Libraries:驱动库的源代码及启动文件,这个非常重要,我们要使用的固件库就在这个文件夹里

                 面。

Project :用驱动库写的例子和工程模板,其中那些为每个外设写好的例程对我们非常有用,我们

                在学习的时候就可以参考这里面的例程,非常全面,穷尽了外设的所有功能。

Utilities:基于ST官方实验板的例程

2、打开Libraries文件夹,文件夹下有CMSIS、STM32F10x_StdPeriph_Driver两个文件夹,展开

     CMSIS文件夹,展开CM3文件夹,内容如下图所示

内核相关文件:

core_cm3.c :实现了一些操作内核外设寄存器的函数 

Core_cm3.h :头文件里面实现了内核的寄存器映射,对应外设头文件stm32f10x.h,区别就是一

                        个针对内核的外设,一个针对片上(内核之外)的外设。

该头文件中包含了“stdint.h”这个头文件,这是一个ANSI C 文件,是独立于处理器之外的,就像我

们熟知的C 语言头文件“stdio.h”文件一样。位于RVMDK 这个软件的安装目录下,主要作用是提供

一些类型定义。这些新类型定义屏蔽了在不同芯片平台时,出现的诸如int 的大小是16 位,还是32

位的差异。所以在我们以后的程序中,都将使用新类型如uint8_t 、uint16_t 等。

    /* exact-width signed integer types */
typedef   signed          char int8_t;
typedef   signed short     int int16_t;
typedef   signed           int int32_t;
typedef   signed       __INT64 int64_t;

    /* exact-width unsigned integer types */
typedef unsigned          char uint8_t;
typedef unsigned short     int uint16_t;
typedef unsigned           int uint32_t;
typedef unsigned       __INT64 uint64_t;

    /* 7.18.1.2 */

    /* smallest type of at least n bits */
    /* minimum-width signed integer types */
typedef   signed          char int_least8_t;
typedef   signed short     int int_least16_t;
typedef   signed           int int_least32_t;
typedef   signed       __INT64 int_least64_t;

    /* minimum-width unsigned integer types */
typedef unsigned          char uint_least8_t;
typedef unsigned short     int uint_least16_t;
typedef unsigned           int uint_least32_t;
typedef unsigned       __INT64 uint_least64_t;

启动文件:

启动文件放在startup/arm 这个文件夹下面,这里面启动文件有很多个,不同型号的单片机用的启

动文件不一样,有关每个启动文件的详细说明见表

Stm32f10x.h:这个头文件实现了片上外设的所以寄存器的映射,是一个非常重要的头文件,在内

                        核中与之想对应的头文件是core_cm3.h。

system_stm32f10x.c:实现了STM32 的时钟配置,操作的是片上的RCC 这个外设。系统在上

电之后,首选会执行由汇编编写的启动文件,启动文件中的复位函数中调用的SystemInit 函数就

在这个文件里面定义。调用完之后,系统的时钟就被初始化成72M。如果后面我们需要重新配置

系统时钟,我们就可以参考这个函数重写。为了维持库的完整性,我们不会直接在这个文件里面

修改时钟配置函数。

3、STM32F10x_StdPeriph_Driver 文件夹中

inc文件夹是库函数的头文件

src文件夹是库函数的C文件

4、展开根目录下的Project文件夹,打开里面的STM32F10x_StdPeriph_Template文件夹。

stm32f10x_it.c:这个文件是专门用来编写中断服务函数的,在我们修改前,这个文件已经定义了

                           一些系统异常(特殊中断) 的接口,其它普通中断服务函数由我们自己添加。

system_stm32f10x.c:这个文件包含了STM32 芯片上电后初始化系统时钟、扩展外部存储器用的

                                    函数,例如我们前两章提到供启动文件调用的“SystemInit”函数,用于上电

                                    后初始化时钟,该函数的定义就存储在system_stm32f10x.c 文件。

                                    STM32F103 系列的芯片,调用库的这个SystemInit函数后,系统时钟被初

                                    始化为72MHz,如有需要可以修改这个文件的内容,设置成自己所需的时

                                    钟频率,但鉴于保持库的完整性,我们在做系统时钟配置的时候会另外重   

                                    写时钟配置函数。

stm32f10x_conf.h:这个文件被包含进stm32f10x.h 文件。当我们使用固件库编程的时候,如果

                                需要某个外设的驱动库,就需要包含该外设的头文件:stm32f10x_ppp.h,包

                                含一个还好,如果是用了多外设,就需要包含多个头文件,这不仅影响代码美

                                观也不好管理,现我们用一个头文件stm32f10x_conf.h 把这些外设的头文件都

                                包含在里面,让这个配置头文件统一管理这些外设的头文件,我们在应用程序

                                中只需要包含这个配置头文件即可,我们又知道这个头文件在stm32f10x.h 的

                                最后被包含,所以最终我们只需要包含stm32f10x.h 这个头文件即可,非常方

                                便。


0x02、创建工程模板

1、首先我们建立一个模板文件夹DEMO,在此文件夹中新建6个文件夹,分别为Doc、Output、

      Project、User、Libraries、Listing。

名称作用
Doc用来存放程序说明文件,由程序编写者添加
Libraries存放库文件
Listing存放编译器编译时产生的C/汇编/链接的列表清单
Output存放编译产生的调试信息、HEX文件、预览信息、封装库等
Project用来存放工程文件
User用户编写的驱动文件

2、在Libraries文件夹中新建CMSIS、FWLIB两个文件夹

3、 将库文件中的下列文件复制到CMSIS文件夹中

STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\CoreSupport中

core_cm3.c、core_cm3.h

STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x中

stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h

STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startu

p\arm中 startup_stm32f10x_hd.s

 4、 将库文件中的下列文件夹复制到文件夹中FWLIB文件夹中

STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\STM32F10x_StdPeriph_Driver文件夹中的

inc和src文件夹

5、在DEMO文件夹中新建一个文本文档,在文档中输入如下内容,并更改文件名称为“keilkill.bat”

    (一定要将扩展名更改为.bat,此部分代码是从它处摘录过来的,非原创)

del *.bak /s
del *.ddk /s
del *.edk /s
del *.lst /s
del *.lnp /s
del *.mpf /s
del *.mpj /s
del *.obj /s
del *.omf /s
::del *.opt /s  ::不允许删除JLINK的设置
del *.plg /s
del *.rpt /s
del *.tmp /s
del *.__i /s
del *.crf /s
del *.o /s
del *.d /s
del *.axf /s
del *.tra /s
del *.dep /s           
del JLinkLog.txt /s

del *.iex /s
del *.htm /s
del *.sct /s
del *.map /s
exit

6、将库函数STM32F10x_StdPeriph_Lib_V3.6.0\Project\STM32F10x_StdPeriph_Template目录下

      的main.c、stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h这4个文件复制到模板

     “DEMO\User”文件夹中。

7、在DOC文件夹中创建readme.txt文件

8、打开Keil uVision5,在“DEMO\Project”文件夹下新建一个工程,取名叫Demo。(如果是第一次

      使用的话会打开一个自带的工程文件,我们可以通过工具栏Project->Close Project 选项把它关

      掉)

这里我们以STM32F103RC为例

9、接下来我们为工程添加必要的文件,在Keil uVision5的项目管理器中,右键单击Target 1,选择

      “Manage Project Items”

10、在线添加库文件,等下我们手动本地添加库文件,这里我们点击关掉在线添加,因为keil 的服

      务器在国外,在线添加会非常慢。

11、接下来我们为工程添加必要的文件,在Keil uVision5的项目管理器中,右键单击Target 1,选

        择“Manage Project Items”

12、组件窗口中,双击最左侧Target 1,更改名称为DEMO,在Groups中删除原有组,新建

       CMSIS、FWLB、USER、DOC这几个组。

13、下面我们向组中添加文件,点击选中User,在最后面一栏Files栏下方点击添加文件,添加文

        件路径如下

        DEMO\User文件夹下的:main.c、stm32f10x_it.c

        main.c:用户主函数

        stm32f10x_it.c:中断服务函数

14、点击选中FWLB,点击添加文件,添加文件路径如下

        DEMO\Libraries\FWLIB\src中的所有文件

        这些文件是ST标准外设驱动函数.

15、点击选中CMSIS,点击添加文件,添加文件路径如下

        DEMO\Libraries\CMSIS文件夹中的core_cm3.c

        DEMO\Libraries\CMSIS文件夹中的system_stm32f10x.c

        DEMO\Libraries\CMSIS文件夹中startup_stm32f10x_hd.s

16、点击选中DOC,点击添加文件,添加文件路径如下

        DEMO\Doc文件夹中的readme.txt

0x03、Keil设置

1、点击keil环境中的目标选项按钮

2、修改Target选项卡中的晶振参数为8MHz,并勾选Use MicroLIB

 选中微库“Use MicroLib”,为的是在日后编写串口驱动的时候可以使用printf 函数。

3、选择输出文件的文件夹,我们选择Output文件夹,再填写你要输出的文件命名,最后勾选产生

      hex文件

4、在Listing选项卡中将其输出文件夹改为Listing文件夹

 5、点击C/C++选项卡,在Define 里面输入添加STM32F10X_HD,USE_STDPERIPH_DRIVER 。

      添加USE_STDPERIPH_DRIVER 是为了屏蔽编译器的默认搜索路径,转而使用我们添加到工

      程中的ST的库,添加STM32F10X_HD 是因为我们用的芯片是大容量的,添加了

      STM32F10X_HD 这个宏之后,库文件里面为大容量定义的寄存器我们就可以用了。芯片是小

      或中容量的时候宏要换成STM32F10X_LD或者STM32F10X_MD。其实不管是什么容量的,我

      们只要添加STM32F10X_HD 这个宏即可,当你用小或者中容量的芯片时,那些为大容量定义

      的寄存器我不去访问就是了,反正也访问不了。

 6、在“包含文件路径”栏点击,在这里添加库文件的搜索路径,这样就可以屏蔽掉默认的搜索路

     径。

 

添加路径为:

DEMO\Libraries\CMSIS

DEMO\Libraries\FWLIB\inc

DEMO\User

7、我们使用SWD下载调试的时候还需要对下列设置进行修改,首先找到Options中的debug选项

     卡,点击Settings

选择SW后,右面的对话框会出现如图所示选项,点击确定

 

 再点开Utilities选项卡,点击下图中的Settings选项

按照下图进行设置

 

 配置完成,现在我们就可以用SWD模式进行下载程序和在线调试了!

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值