STM32单片机(二)STM32环境搭建

奋斗吧
奋斗吧
擅长邻域:未填写

标签: stm32

2023-05-29 18:23:30 73浏览

本节主要对STM32环境搭建过程进行简单介绍,其中包括软件安装和新建工程两部分;其中软件安装包括安装Keil5 MDK、安装器件支持包、软件注册、安装STLINK驱动、安装USB转串口驱动等;新建工程部分包括STM32开发方式简介以及新建标准库工程等。

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。
☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋。
🌙专栏目标:实现从零基础入门51单片机和STM32单片机,力求在玩好单片机的同时,能够了解一些计算机的基本概念,了解电路及其元器件的基本理论等。

⭐️ 专栏主要内容: 主要学习STM32单片机的功能、各个模块、单片机的外设、驱动等,最终玩好单片机和单片机的外设,全程手敲代码,实现我们所要实现的功能。
🌴 专栏说明 :如果文章知识点有错误的地方,欢迎大家随时在文章下面评论,我会第一时间改正。让我们一起学习,一起进步。
💑专栏主页:http://t.csdn.cn/HCD8v

本学习过程参考:https://space.bilibili.com/383400717

STM3单片机安装软件、各种资料以及源码的路径:
链接:https://pan.baidu.com/s/1snD0uuTfMhchFqOMWvAiHA?pwd=asdf#list/path=%2F
提取码:asdf

链接里压缩包的解压密码:32

本节主要对STM32环境搭建过程进行简单介绍,其中包括软件安装和新建工程两部分;其中软件安装包括安装Keil5 MDK、安装器件支持包、软件注册、安装STLINK驱动、安装USB转串口驱动等;新建工程部分包括STM32开发方式简介以及新建标准库工程等。

一、软件安装

软件的下载链接:
STM3单片机安装软件、各种资料以及源码的路径:
链接:https://pan.baidu.com/s/1snD0uuTfMhchFqOMWvAiHA?pwd=asdf#list/path=%2F
提取码:asdf

链接里压缩包的解压密码:32

1.1 安装Keil5 MDK

解压 资料/Keil5 MDK.zip,解压之后,双击MDK524.EXE文件,开始安装软件,选Next->勾选同意许可协议->Next->选择安装目录(如果不想放在C盘,也可以在创建英文目录,记得创建文件夹时起英文名字)->Next->填写个人信息(随便填)->Next,等待安装即可;

安装过程中会让选择是否安装ULINK驱动,选择是就行:
在这里插入图片描述
可以将Show Release Notes 取消勾选:
在这里插入图片描述

最后点击Finish,接下来就会自动弹出一个Pack Installer的窗口,这个窗口就是用来安装器件支持包的,我们先把它叉掉,后面再讲:在这里插入图片描述

1.2 安装器件支持包

首先来介绍一下为什么需要要安装器件支持包,这个支持包是Keil5才需要安装的,想Keil4和之前的老版本,是不需要安装的;这是因为现在的ARM芯片型号是非常多的,升级换代速度也快;新型号的芯片也是不断地推出来,那Keil软件总不能出一款芯片就升级一下软件吧,而且同时支持所有型号的芯片,这个占用内存也是非常大的,所以Keil5之后,芯片的器件支持包就被独立出来了;我们开发哪种芯片,就安装对应的支持包就行;如果你不安装支持包,那在新建工程时,是不会出现相应的器件型号的;

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

1.2.1 离线安装

首先介绍一下离线安装:
打开Keil5 MDK的安装包文件夹,打开支持包文件夹:
在这里插入图片描述

在这里插入图片描述

在这里已经提前准备了常见的支持包,我们本课程使用的是STM32F1系列, 我们就需要选择这个Keil.STM32F1xx_DFP的文件,双击打开,这里的目标路径会自动选择我们安装时的那个目录:在这里插入图片描述

直接点击Next即可,等待一小会儿即可安装完成;安装完成点击Finish即可。此时再打开Keil5软件,新建工程:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

可以发现这里就出现了STM32F1的器件列表,展开之后我们可以选择F103,然后F103C8,这样就可以新建工程了;

在这里插入图片描述

到这里,我们离线安装器件支持包的方式就介绍完了;

1.2.2 在线安装

在线安装是离线安装的扩展部分,主要是为了防止以后开发其他芯片找不到型号;大概了解一下即可;

因为在1.2.1的安装包里,只提供了部分的器件支持包,所以如果以后想开发其他芯片,比如STM32F2的系列或者其他公司的ARM芯片,那到时候找不到器件支持包不就尴尬了嘛,,,这个时候就可以用上在线安装了。

打开keil5软件,点击下面的绿色按钮:
在这里插入图片描述
弹出来的就是我们之前叉掉的那个Pack Installer界面:

在这里插入图片描述
那这个就可以用来安装支持包,并且所有可以用keil软件来开发的芯片都可以找到,使用还是非常方便的,就是网速比较慢哈;

注意,在这个页面一定要联网;

然后进来之后它就会自动在Keil官网上获取最新的器件列表了;左下角提示的就是正在获取的东西,右边有进度条显示进度;

在这里插入图片描述

这个网速还是挺慢的,大家得多等一会儿;

如果你点进来没有自动获取的话,可以点一下这个更新按钮,这样就可以获取最新列表了:

点击刷新后,经过漫长的等待,这个器件列表总算是加载完了哈:

在这里插入图片描述

可以看到,这里有很多公司的名称,里面包含了Keil支持的所有ARM芯片,其中这个GigaDevice公司下,就有目前做的还不错的国产兼容STM32的芯片,叫GD32,里面有这个叫GD32F103C8的型号,基本和STM32F103C8T6的芯片一样;

在这里插入图片描述

还有下面这个MindMotion公司,里面也有MM32F103C8T,也是可以兼容STM32F103C8T6的国产芯片:

在这里插入图片描述

现在STM32涨价比较厉害,所以国产这些芯片也取得了一定的发展;大家可以了解一下;

接着往下划,下面这个STMicroelectronics里面就有STM32了,里面包含了现在STM32的所有型号,其中就有我们刚才安装的STM32F1系列:

在这里插入图片描述

那比如我们以后想要开发STM32F2的系列,我们就可以选择这个STM32F2;因为刚刚在离线安装中我们已经安装好了STM32F1,所以此次我们是拿STM32F2来演示在线下载:
在右边找到这个后缀是DFP的文件,然后点击Install,安装即可:

在这里插入图片描述

那接下来,它就会自动在Keil的官网下载DFP文件,然后自动帮我们安装上;
当然也可以用浏览器到这个网站上下载,下载之后,就和离线安装的方式是一样的了:

在这里插入图片描述

现在又是需要一段漫长的时间来下载哈,等提示完成后即可叉掉这个窗口了,叉掉后,会出来一个弹窗,如下所示,提示软件的支持包已经更改,是否要重新加载支持包,选择是就行:

在这里插入图片描述
然后再新建工程,就可以看到有STM32F2系列的芯片了:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这就是在线安装的整个过程了,有个印象就行;

1.3 软件注册

这个Keil软件是一个付费软件,如果不注册的话,功能上会有很大限制的,如果我们个人用户学习的话,使用盗版问题也不大,但是企业用户就必须得用正版了。

首先我们先关闭软件, 然后再Keil5图标上右键,选择以管理员身份运行(这里需要注意,必须是右键->以管理员身份运行)然后点击File->LicenseManagement,把这个CID复制下来:

在这里插入图片描述

在这里插入图片描述

然后打开安装包,将Keygen的压缩包解压:

在这里插入图片描述
打开解压后的文件夹,可以看到这个注册机(如果解压后看不到该文件,可能是被杀毒软件杀掉了,那就需要将杀毒软件关掉再重新解压),双击打开:

在这里插入图片描述
然后将刚刚复制的CID码复制进来,右边的Target选择ARM,点击Generate,
在这里插入图片描述
最后将生成的序列码复制下来,就可以退出这个软件了,

在这里插入图片描述
最后回到Keil5软件,将刚刚生成的序列码粘贴到LIC位置,点击Add LIC即可,如下图所示:
在这里插入图片描述
提示LIC添加成功,并且上面的MDK-ARM这一行的使用期限显示2032年,就表示软件注册完成了。

在这里插入图片描述

1.4 安装STLINK驱动

首先,我们需要将STLINK插到电脑上,

在这里插入图片描述

然后在 此电脑->右键->设备管理器,打开设备管理器的窗口,在其他设备里面可以看到这个STLINK是在其他设备的列表上,并且图标带了个感叹号,说明我们的电脑上目前是没有安装STLINK驱动的; 如下图所示

在这里插入图片描述
如果插上STLINK,在这个列表里找一下,能找到STLINK的设备且没有感叹号,那说明你的电脑已经装过STLINK的驱动了,就不需要进行这一步了。

如果没有安装STLINK驱动,我们则需要安装一下:

这个驱动程序Keil软件自带的就有,我们可以打开Keil5的安装目录,在ARM->STLink->USBDriver里面,找到amd64.exe就是64位的,X86是32位的:

在这里插入图片描述

我的电脑是64位的,那么双击这个64,然后一直Next即可。安装完成后,可以发现没有感叹号了:
在这里插入图片描述

另外这个目录下,还有JLINK的驱动,JLINK也是一种常用的调试器,如果你想安装JLINK驱动的话可以打开这里的Segger文件夹,

在这里插入图片描述
这里面就可以安装JLINK的驱动了。

1.5 安装USB转串口驱动

在这里插入图片描述

同样我们先把USB串口模块插在电脑上,这个USB转串口的芯片是CH340,和之前51开发板上的一样,如果之前学过51,那么大概率已经装过该驱动了。

在这里插入图片描述
如果这里有感叹号,就需要装一下驱动,如果能正常识别,就不需要装了。

CH340的驱动在资料文件夹里,打开工具软件,打开USB转串口CH340驱动,双击以下EXE程序:

在这里插入图片描述
在这里插入图片描述
点击安装

在这里插入图片描述

出现驱动安装成功就ok了;

在这里插入图片描述
设备管理器里感叹号也消失了。

二、新建工程

本小节我们来建立一个STM32的工程,STM32的工程结构还是比较复杂的,需要用到很多文件,之后我们的代码也都是需要建立在工程结构上的,所以在开始学习后续内容之前,我们先来学习以下如何新建STM32的工程;

2.1 STM32开发方式简介

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

  • 基于寄存器的方式和我们51单片机的开发方式一样,是用程序直接配置寄存器,来达到我们想要的功能;这种方式最底层、最直接、效率会更高一些;但是由于STM32的结构复杂、寄存器太多,所以基于寄存器的方式目前是不推荐的;
  • 基于库函数的方式是使用ST官方提供的封装好的函数,通过调用这些函数来间接的配置寄存器,由于ST对寄存器封装的比较好,所以这种方式既能满足对寄存器的配置,对开发人员也比较友好,有利于提高开发效率,我们本课程使用的就是库函数的开发方式;
  • 最后一个基于HAL库的方式可以利用图像化界面快速配置STM32,这个比较适合快速上手STM32的情况,但是这种方式隐藏了底层逻辑,如果你对STM32不熟悉,基本只能停留在很浅的水平,所以目前不推荐HAL库。

既然我们要使用库函数的方式,我们需要准备一个STM32库函数的压缩包,大家可以在百度云链接提供的资料里找到固件库的文件,如下图所示:

在这里插入图片描述

可以看到STM32F10x标准外设库的这个压缩包,解压后就可以看到库函数的文件夹目录了,

在这里插入图片描述

  • _htmresc文件夹里放的是图片,没啥用
  • Libraries文件夹里放的是库函数的文件了,我们之后建工程时会用到
  • Project时官方提供的工程示例和模板,以后使用库函数的时候可以参考一下;
  • Utilities是STM32官方评估板的相关例程,这个评估板就是官方用STM32做的一个小电路板,用来测评STM32的;这个文件夹里面存的就是这个小电路板的测评程序;
  • 接下来后面的两个文件,一个是库函数的发布文档,一个是使用手册;发布文档里有一些版本的说明,使用手册里有教怎么使用这些库函数的;

2.2 新建标准库工程

2.2.1 新建工程

接下来我们就正式开始新建一个基于标准库的工程,首先我们需要建立一个存放工程的文件夹,为了方便,我就在桌面新建该文件夹了,起个名字叫STM32Project,以后我们的工程都存在这个文件夹下,这样比较方便管理;

接着打开Keil5软件,点击Project->New uVision Project
在这里插入图片描述

然后选择我们刚才新建的文件夹(桌面上的STM32Project),在里面再新建一个文件夹,用来存放本次的工程,如下图:

在这里插入图片描述

起个名字,就叫2-1 STM32工程模板,

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

在这里插入图片描述

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

在这里插入图片描述
点击ok后,会弹出keil软件的一个新建工程小助手,这个小助手可以帮助我们快速新建工程,我们暂时不用这个小助手,可以直接把它叉掉:

在这里插入图片描述

接下来工程就已经建好了,但是这里的工程文件是空空如也,

在这里插入图片描述

2.2.2 添加启动文件

2.2.2.1 添加启动文件

现在这个工程还是不能直接用的,我们需要给他添加一个工程的必要文件,那我们打开我们的固件库文件夹,路径如下图:

在这里插入图片描述
打开Libraries->CMSIS->CM3->DeviceSupport->ST->STM32F10x->startup->arm

在这里插入图片描述
这些就是STM32的启动文件,STM32的程序就是从启动文件开始执行的;我们把这些文件复制下来,然后回到工程模板文件夹里,可以看到我们刚刚新建工程后自动生成的文件:

在这里插入图片描述

在这里新建一个文件夹Start用来存放启动文件,将刚刚复制的启动文件复制到Start文件夹里:

在这里插入图片描述

2.2.2.2 添加寄存器描述文件

然后将资料库里的以下三个文件也复制到Start里面:

在这里插入图片描述

其中stm32f10x.h是STM32的外设寄存器描述文件,作用类似于51单片机的头文件REGX52.H,是用来描述STM32有哪些寄存器和它对应的地址的;

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

这三个文件也都复制到Start下面;

2.2.2.3 添加内核寄存器描述文件

在这里插入图片描述
打开以上路径,将两个core文件复制到Start文件夹下;

这两个cm3(Cortex-M3)文件就是内核的寄存器描述;当然他还带了一些内核的配置函数,所以多了个.c文件。

到此为止,我们工程的必要文件就复制完成了,最终Start文件夹下包含的所有文件如下所示:在这里插入图片描述

2.2.2.4 以上文件添加到工程

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

在这里插入图片描述
然后右键,选择添加已经存在的文件夹到组里来

在这里插入图片描述
打开Start文件夹把下面这个文件过滤器选择All files,

在这里插入图片描述
然后将startup_stm32f10x_md.s、以及所有的.c.h文件都添加进来(至于为什么这么多启动文件单单只添加md.s,这个后面再讲),选好后,点击Add;然后Start文件夹里面的文件就添加好了,如下图所示:

在这里插入图片描述
这里的文件都是STM32里最基本的文件,是不需要我们修改的,我们添加进来即可。且我们可以看到这些文件图标上带了个小钥匙,表示他们是只读的文件;

在这里插入图片描述

2.2.2.5 在工程中添加头文件路径

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

在这里插入图片描述

点击魔术棒按钮,打开工程选项,在C/C++里,找到Include Paths栏,然后点击右边三个点的按钮,

在这里插入图片描述

在这里点新建路径,

在这里插入图片描述

然后再点三个点的路径,把Start的路径添加进来:

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

2.2.3 新工程测试

接下来我们新建一个main函数测试一下这个工程是否可行;

打开工程文件夹,新建一个User文件夹:

在这里插入图片描述

我们的main函数就放在这个文件夹里,然后再keil里,在Target 1这里点击右键,点击添加组:

在这里插入图片描述
在这里插入图片描述
然后将名字改为User:

在这里插入图片描述

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

在这里插入图片描述
选择C文件,名字叫main:

在这里插入图片描述
下面的路径注意一下,要选择User文件夹,要不然默认是放在文件夹外面的:

在这里插入图片描述
然后点击Add,这样我们就有了main.c文件了:

在这里插入图片描述
在main.c里,我们先右键插入头文件,选择stm32f10x.h

在这里插入图片描述

然后写一个main函数,并写入测试代码,然后点击build:

在这里插入图片描述

可以看到结果为编译通过,0警告0错误,则证明工程建立成功了:

在这里插入图片描述

这里需要注意,文件的最后一行必须要空一行,否则会报警告。

这个工程目前还没有添加STM32的库函数,所以它还是一个基于寄存器开发的工程,如果你想用寄存器开发STM32,那工程建到这里就可以了。

2.2.4 配置寄存器实现点灯

下面演示一下通过配置寄存器来完成点灯操作,当然直接操作寄存器不是本节的重点,了解一下即可。

首先拿出STM32的最小系统板、STLINK和四根母对母的杜邦线, 按照插针边上的标识,把3.3V、SWDIO、SWCLK、GND对应连接好:

在这里插入图片描述

连接好之后如下图所示:

在这里插入图片描述

然后把STLINK插在电脑上

在这里插入图片描述

插上电之后,板子上的电源灯应该会常亮,另一个谅解在PC13口上的灯默认应该是闪烁状态,这是芯片里的一个测试程序;

然后我们再在Keil里面配置一下调试器:点击魔术棒按钮->选择DEBUG->,这个调试器默认是ULINK,改成ST-Link Debugger

在这里插入图片描述
然后再点击上图3旁边的Settings按钮,在Flash Download里,把Reset and Run这一项勾上:

在这里插入图片描述
勾上这一项的目的是,我们下载程序后会立马复位并执行,这样方便一些;否则每次下载之后还要按一下板子上的复位按键才能执行程序;配置好之后点击确认即可。

然后将以下代码写进main.c里:

在这里插入图片描述
然后编译并下载,

在这里插入图片描述

现象是灯就会灭:

在这里插入图片描述

如果将代码改为以下:

在这里插入图片描述

灯就会被亮:
在这里插入图片描述

这就是通过寄存器控制LED灯,通过寄存器配置LED灯要一直查手册,来了解每一个寄存器的每一位是干啥的, 才能成功点亮。

2.2.5 使用库函数实现点灯

新建一个文件夹叫Library,用来存放库函数,

在这里插入图片描述
接着打开固件库的文件夹,打开Libraries->STM32标准外设驱动->src:如下图
在这里插入图片描述

这些就是库函数的源文件,这个misc.c是内核的库函数,其他的就是内核外的外设库函数了;这个misc就是混杂的意思;按ctrl+A全选,然后复制,在Library下粘贴,如下图所示:

在这里插入图片描述
然后再打开固件库的inc文件夹:

在这里插入图片描述
这些是库函数的头文件,继续全选并复制,同样在Library文件夹下粘贴:

在这里插入图片描述
然后回到Keil软件,同样在Target1处右键,添加组,

在这里插入图片描述
改个名字叫Library:

在这里插入图片描述

再右键,添加已经存在的文件,打开Library,ctrl+A,Add:
在这里插入图片描述

在这里插入图片描述
这样就把所有的库函数文件都添加进来了;但是对于这个库函数来说,现在还不能直接使用,需要再添加一个文件:打开固件库的文件夹(路径为固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template),找到如下三个文件:

在这里插入图片描述
其中stm32f10x_conf.h是用来配置库函数头文件的包含关系的,另外这里面还有个用来参数检查的函数定义,这是所有库函数都需要的;两个it结尾的文件是用来存放中断函数的;

把这三个文件复制下来,粘贴进工程的User目录下:

在这里插入图片描述
接着回到Keil软件, 在User组里,把刚发财那三个文件添加进来:
在这里插入图片描述
在这里插入图片描述

因为在头文件中定义了如下代码:

在这里插入图片描述
所以我们需要对USE_STDPERIPH_DRIVER宏进行定义,才能包含到stm32f10x_conf.h头文件:

添加该宏的步骤如下:

在这里插入图片描述
这样我们基于库函数的工程就建好了;我们可以看一下,这个Library里面的库函数也都带了钥匙,说明只读;

在这里插入图片描述
此时编译一下,结果如下:

在这里插入图片描述
0错误0警告,所以我们的工程建立是成功的。

然后我们用库函数实现点灯的操作,代码如下:

#include "stm32f10x.h"                  // Device header

int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOC, &GPIO_InitStructure);
//	GPIO_SetBits(GPIOC, GPIO_Pin_13);
	GPIO_ResetBits(GPIOC, GPIO_Pin_13);
	while (1)
	{
		
	}
}

代码解释:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);表示配置GPIOC的外设时钟;

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);

先定义一个GPIO_InitTypeDef 结构体,然后对其进行赋值,最后调用GPIO_Init函数,来配置GPIO模式;

最后设置端口的高低电平来进行点灯:
GPIP_SetBIts这个函数可以把指定端口设置为高电平,GPIO_SetBits(GPIOC, GPIO_Pin_13)代码的意思是将PC13号口设置为高电平;

GPIO_ResetBits这个函数可以将指定端口设置为低电平,GPIO_ResetBits(GPIOC, GPIO_Pin_13);代码的意思是将PC13号口设置为低电平;

以上代码的现象(注释掉了PC13号口的低电平,使用的是低电平),所以灯会亮:

在这里插入图片描述

2.2.6 补充:库函数中的启动文件选择

在第2.2.2.4 节中,添加启动文件时,我们选择了md.s结尾的启动文件,
在这里插入图片描述

为什么选择这个而不选择添加其他的呢?

先看一下下面的表:

在这里插入图片描述
我们使用的STM32F103系列C8T6,其Flash大小是64K,按照表中的对应关系,需要选择MD的启动文件。

2.2.7 总结:新建工程的步骤

在这里插入图片描述
工程架构:

在这里插入图片描述

好博客就要一起分享哦!分享海报

此处可发布评论

评论(0展开评论

暂无评论,快来写一下吧

展开评论

您可能感兴趣的博客

客服QQ 1913284695