二、软件安装与新建工程

目录

Ⅰ、软件安装

1.安装支持包

2.新建工程

Ⅱ、新建工程

1.STM32的三种开发方式

2.简略流程总结

3.完整新建工程

1.新建工程

2.直接操作寄存器

3.用库函数

4.启动文件的选择

5.总结

(1)新建工程步骤

(2)工程架构


Ⅰ、软件安装

1.安装支持包

支持包安装有两种安装方式,一种是离线安装,一种是在线安装。

离线安装:选中对应支持包双击安装即可。

在线安装:点击keil中的此绿色按钮。从官网获取可安装的支持包,加载速度较慢。下载完成后提醒重新加载支持包,点是。

2.新建工程

Project——New ~ Project——建立工程文件——选择芯片

Ⅱ、新建工程

1.STM32的三种开发方式

目前STM32的开发方式主要有基于寄存器的方式、基于标准库也就是库函数的方式和基于HAL库的方式。

基于寄存器的方式是用程序直接配置寄存器,来达到我们想要的功能。这种方式最底层、最直接、效率会更高一些。但是由于STM32的结构复杂、寄存器太多,所以基于寄存器的方式目前是不推荐的。

基于库函数的方式是使用ST官方提供的封装好的函数,通过调用这些函数来间接地配置寄存器。由于ST对寄存器封装的比较好,所以这种方式既能满足对寄存器的配置,对开发人员也比较友好,有利于提高开发效率。

我们本课程使用的就是库函数的开发方式。

最后一个基于HAL库的方式可以用图形化界面快速配置STM32。这个比较适合快速上手STM32的情况,但是这种方式隐藏了底层逻辑,如果你对STM32不熟悉,基本只能停留在很浅的水平。所以目前暂时不推荐HAL库,但是推荐你学过标准库之后,去了解一下这个方式,毕竟这个HAL库还是非常方便的。

那使用库函数的方式,我们需要准备一个STM32库函数的压缩包。并解压得到库函数的文件夹目录。

第一个文件夹是俩图片没用。

第二个Libraries里面就是库函数的文件了,我们之后建工程时会用到。

第三个Project是官方提供的工程示例和模板,以后使用库函数的时候可以参考一下。

第四个Utilities是STM32官方评估板的相关例程。这个评估板就是官方用STM32做的一个小电路板,用来测评STM32的。这个文件夹里面存的就是这个小电路板的测评程序。

接下来后面两个文件,一个是库函数的发布文档,一个是使用手册。

2.简略流程总结

1.建立存放所有工程的文件夹,并在文件夹里再分别建立存放单独工程的文件夹;

2.下载对应芯片库函数压缩包;

3.打开keil,在对应工程文件夹中新建工程文件——选择芯片型号;

(添加已有.c和.h文件:)

4.新建一个Start文件夹,存放压缩包中对应的启动文件和部分配置文件;

5.回到Keil软件,把我们刚才复制的那些文件添加到工程里来。将组的名字改为Start,邮件添加已经存在的文件到组里。

6.在工程选项里添加上这个文件夹的头文件路径,要不然软件是找不到.h文件的。

(新建.c和.h文件并添加到工程里:)

7.打开工程文件夹,然后新建一个文件夹,叫做User。Keil里,在Target这里右键,点击添加组。改个名字叫User。然后在User上右键,点击添加新文件。选择C文件,名字叫main。在工程文件夹的User目录下,也可以看到我们新建的main.c文件。

3.完整新建工程

接下来我们就正式开始新建一个基于标准库的工程:

1.新建工程

首先,我们需要先建立一个存放工程的文件夹。起个名字,可以叫STM32Project。以后我们的工程都存在这个文件夹下,这样比较方便管理。

接着,我们打开Keil5软件,点击Project——New uVision Project

然后,选择我们刚才新建的文件夹,在这里要再新建一个文件夹,用来存放本次的工程。起个名字,叫2-1 STM32工程模板。

然后,点进去,接下来给工程文件起个名字,在这里,我们可以起个通用一点的名字,这个工程是干啥的我们可以在文件夹名称说明,文件夹的名称是很方便改的,这个名称以后不太方便改,所以我们就起个Project的名称,然后点击保存。

接下来选择器件型号,我们的芯片型号的STM32F103C8T6,所以这里选择STM32F103C8这个,点击OK。

这里弹出的是Keil软件的一个新建工程小助手,这个可以帮助我们快速新建工程。我们暂时不用这个小助手,可以把它关掉。

接下来工程就建好了,但是这里的工程文件是空空如也,现在这个工程还是不能直接用的,我们需要给它添加一些工程的必要文件。

打开固件库的文件夹。打FLibraries, CMSlS,CM3, Devicesupport,ST,STM32F10x,startup, arm。这些就是STM32的启动文件,STM32的程序就是从启动文件开始执行的。我们把这些文件全部都复制下来,然后回到工程模板文件夹里。

这些就是我们刚才新建工程自动生成的文件。

如果直接把启动文件也放在这里,就有点太乱了。所以我们需要新建一个文件夹,可以叫做Start,然后把启动文件粘贴到这里面。

接着我们回到固件库的STM32F10x文件夹,可以看到stm32f10x.h和两个system开头的文件。

这个stm32f10xh,就是STM32的外设寄存器描述文件。它的作用就跟51单片机的头文件REGX52.H一样,是用来描述STM32有哪些寄存器和它对应的地址的。

这两个system文件是用来配置时钟的。STM32主频72MHz,就是system文件里的函数配置的。

我们把这三个文件复制下来,也粘贴到Start文件夹下。

接下来,因为这个STM32是内核和内核外围的设备组成的,而且这个内核的寄存器描述和外围设备的描述文件不是在一起的,所以我们还需要添加一个内核寄存器的描述文件。

我们可以打开CM3,CoreSupport,这两个cm3(Cortex-M3)文件就是内核的寄存器描述。当然他还带了一些内核的配置函数,所以多了个.c文件,我们把它俩一并复制下来,也粘贴到Start文件夹下。

到此为止,我们工程的必要文件就复制完成了。

然后我们回到Keil软件,把我们刚才复制的那些文件添加到工程里来。我们可以点击选中这个Source Group,然后再单击一下,把这个组改一下名字,也叫Start。

接着右键,选择添加已经存在的文件到组里来。

打开Start文件夹,把下面这个文件过滤器选择All files,这样我们就能看到文件实里的所有文件了。

我们首先添加一下启动文件,这个启动文件有很多分类,我们只能添加其中一个。我们视频所用型号需要选择这个后缀为md.s的启动文件。至于启动文件这个怎么选择,我等会再讲。我们选中它,点击add。

然后剩下的.c和.h文件都要添加进来。我们可以按住Ctr键,然后依次选择它们,点击Add,然后Close。

这样,我们Start文件夹里面的文件就添加好了。这里的文件都是STM32里最基本的文件,是不需要我们修改的,我们添加进来即可。文件图标上带了个小钥匙,这个意思是它是个只读的文件,文件内容都是不让我们修改的。

最后我们还需要在工程选项里添加上这个文件夹的头文件路径,要不然软件是找不到.h文件的。

我们点击这个魔术棒按钮,打开工程选项,在C/C++里。

找到这个Include Paths栏,然后点击右边三个点的按钮

在这里新建路径,然后再点三个点的按钮,把Start的路径添加进来。

点击OK,这样就把这个文件夹的头文件路径添加进来了。

接下来我们再新建一个main函数,看看这个工程是不是可行。

我们打开工程文件夹,然后新建一个文件夹,叫做User,我们的main函数就放在这个文件夹里。

然后Keil里,在Target这里右键,点击添加组。改个名字叫User。

然后在User上右键,点击添加新文件。

选择C文件,名字叫main。下面的路径注意一下啊,要选择User文件夹,要不然默认是放在文件夹外面的。然后点击Add,这样我们就有了main.c文件了。

在工程文件夹的User目录下,也可以看到我们新建的main.c文件。

在这个main.c里,我们先右键,插入头文件,选择stmm32f10x.h。然后写一个main函数。这里注意main函数是一个int型返回值,void参数的函数。

文件的最后一行必须要是空行,要不然会报警告。

然后我们点击编译并建立工程

可以看到编译后下面提示的是0错误0警告。这个工程目前还没有添加STM32的库函数,所以它还是一个基于寄存器开发的工程。如果你想用寄存器开发STM32,那工程建到这里就可以了。 

2.直接操作寄存器

接下来,我先给大家演示一下如何通过配置寄存器来完成点灯的操作。当然直接操作寄存器的方式不是我们本课程的重点,了解一下即可。

字体大小及编码格式。

按图连接STLink

在Keil中配置一下调试器。

点击魔术棒按钮,选择Debug,这个调试器默认是ULINK,我们用的是STLINK,所以选择ST-Link Debugger。

然后再点击右边的设置按钮,在Flash下载这一项,把这个Reset and Run这一项勾上。勾上这一项之后,我们下载程序后会立马复位并执行,这样方便一些。否则每次下载之后,还需要按一下板子上的复位按键才能执行程序。

配置好调试器之后点击确认、ok,然后重新编译一下,没有报错。

再点击这个LOAD按钮,如果一切正常的话,这个程序就会下载到STM32里面了。

接下来,我们就配置一下寄存器,来点亮这个灯。只需要配置三个寄存器就可以点亮这个灯了。

我们打开STM32的参考手册,首先是RCC的一个寄存器,来使能GPIOC的时钟,GPIO都是APB2的外设,所以在这个APB2外设时钟使能寄存器RCC_APB2ENR里面配置。这里有个IOPCEN,这一位就是使能GPIOC的时钟的,这一位写1就是打开GPIOC的时钟。其他的无关项都先给0,二进制转换为16进制写入即可,这样就可以打开GPIOC的时钟了。

然后第二个寄存器,我们需要配置一下PC13口的模式。

我们可以找到端口配置高寄存器GPIOx_CRH,这个X可以是A到E的任何一个字母。然后右边的CNF13和MODE13就是用来配置13号口的。

这个CNF我们需要配置为通用推挽输出模式,也就是这两位为00。

MODE要配置为输出模式,最大速度可以给50MHz,也就是这两位为11。

最后我们对照上面的寄存器,这四位为0011,其他的我们也都给它配置为为0,这样整个寄存器的值换算成16进制就是00300000。

写入keil,接下来我们就可以给PC13口输出数据了。

我们可以看到这个端口输出数据寄存器GPIOX ODR,中间有一位ODR13,这一位写1,13号口就是高电平,写0就是低电平.如果写1的话,ODR的值就是00002000。

那在这里我们写上GPIOC的ODR=0x00002000;因为这个灯是低电工点亮的,所以我们给ODR全为0就是亮,给ODR 0x00002000就是就是灭。

这就是配置寄存器的方式进行点灯的操作,可以看出来,这种方式需要不断地查手册来了解每个寄存器的每一位都是干啥的。而且这个操作方式也有个弊端,就是我们把除了PC13之外的位都配置成了0,这样就会影响到其他端口的原有配置,如果要做到只配置PC13而不影响其他位,那还需要&=和|=的操作。所以这种寄存器的操作方式,虽然代码简洁,但是还是不太方便。

3.用库函数

那接下来我们就要为这个工程添加库函数了,看看库函数和寄存器的操作方式有哪些区别。

我们打开工程文件夹,在这里新建一个文件夹,叫Library,用来存放库函数。

接着打开固件库的文件夹,打开Libraries,STM32标准外设驱动,src,这些就是库函数的源文件。

这个misc是内核的库函数,其他的就是内核外的外设库函数了。这个misc就是混杂的意思。

我们按Ctrt+A全选,然后复制,在Library文件夹下粘贴。

然后再打开固件库的inc文件夹,这些是库函数的头文件,我们继续Ctrl+A全选,然后复制,在Library文件夹下粘贴。

接着回到keil软件,同样,在Target处右键,然后添加组,改个名字叫Library。

再右键,添加已经存在的文件,打开Library,Ctrl+A, Add,这样就把所有的库函数文件都添加进来了。

但是对于这个库函数来说,现在还不能直接使用,我们需要再添加一个文件。

我们打开固件库文件夹,打开Project,STM32Template。可以看到stm32f10x_confh和两个it结尾的文件。

这个conf(configuration)文件是用来配置库函数头文件的包含关系的,另外这里面还有个用来参数检查的函数定义,这是所有库函数都需要的。

两个it(interrupt)文件是用来存放中断函数的。

我们把这三个文件复制下来,然后粘贴到工程的User目录下。接着回到Keil软件,在User组里,把刚才那三个文件添加进来。

最后还需要一个宏定义,我们可以在这个头文件右键,打开文件,然后划到最下面复制此字符串。然后打开工程选项,在C/C++的Define栏目粘贴这个字符串,这样才能包含标准外设库,也就是库函数。

当然还有下面的头文件路径,也不要忘了。把User和Library日录的路径也都添加上,然后ok。

我们唯一需要更改的就是User组里的这些文件。点一下这个三个箱子的按钮,可以把这个Library往上挪一下。把这些不用改的都放到最上面,这样看着舒服一些。

编译一下0错误0警告

再用库函数来实现点灯的操作。

库函数其实就是间接的配置寄存器,所以步骤是一样的。

首先是使能时钟,有专门的库函数叫RCC APB2PeriphclockCmd,我们可以右键,跳到函数定义,这上面有函数的简介和参数说明。

我们可以看一下这个函数,它的内部其实还是配置RCC APB2ENR这个寄存器。但是经过函数的包装,我们不需要再去查手册,来确认哪一位是干啥的了。而且这里它已经帮我们用|=和&=来操作了。所以这个库函数的配置是不会影响到寄存器的其他位的,这就是库函数和寄存器的区别。代码虽然比寄存器长,但是语义更加明确,也不需要我们再查表计算这个寄存器的值了,我们只需要调用库函数,按照它的提示,把参数填好就行了。听以说从这点对比上来看,库函数是比寄存器是有很大优势的。

第二步是配置端口模式。我们需要用到GPIO_Init这个函数,根据提示来配置参数即可。最后设置端口的高低电平进行点灯。

4.启动文件的选择

我们新建工程第一个加的就是启动文件,这个启动文件有很多类型,至于选择哪一个,我们要根据芯片型号来选择。

这个表是STM32F1系列中的型号分类,根据Flash的大小分为了几类。

如:小容量产品,Flash为16~32K,简写为LD(Low Density)

如果你使用STM32F100的型号,就选择带VL的启动文件,然后再根据Flash的大小选择LD、MD、还是HD;

如果你使用STM32F101/102/103的型号,就选择不带VL的,然后根据Flash的大小选择LD、MD、HD还是XL;

如果你使用STM32F105/107的型号,直接选择CL的启动文件即可。

启动文件后面带的字母和这个表的字母都是对应的。

又因为C8T6的Flash是64K,所以选择MD的启动文件。

这就是STMB2F1系列的型号分类和启动文件的选取。

5.总结
(1)新建工程步骤

33:40

(2)工程架构

36:50

来看一下这个工程的每个文件都是干啥的,为啥需要这些文件

这个conf的文件就是用来配置头文件的包含关系的,conf文件include了所有的库函数头文件。同时我们在stm32fx.h的最后,又包含了conf。

所以,在使用这些库函数时,我们只需要包含stmm32f10x.h这一个头文件,就相当于包含了所有的库函数头文件,这样我们就可以任意地调用库函数了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值