正点原子mini板原理图_「正点原子STM32Mini板资料连载」第三章 MDK5 软件入门

1)实验平台:正点原子stm32mini 开发板

2)摘自《正点原子STM32 不完全手册(HAL 库版)》关注官方微信号公众号,获取更多资料:正点原子

f13d4f9c06541c449571549a10657cdc.png

第三章 MDK5 软件入门

本章将向大家介绍 MDK5 软件的使用,通过本章的学习,我们最终将建立一个自己的

MDK5 工程,同时本章还将向大家介绍 MDK5 软件的一些使用技巧,希望大家在本章之后,能

够对 MDK5 这个软件有个比较全面的了解。

本章分为如下个小结:

3.1,MDK5 简介;

3.2,新建 MDK5 工程;

3.3,MDK5 使用技巧;

3.1 MDK5 简介

MDK 源自德国的 KEIL 公司,是 RealView MDK 的简称。在全球 MDK 被超过 10 万的嵌

入式开发工程师使用。目前最新版本为:MDK5.21A,该版本使用 uVision5 IDE 集成开发环境,

是目前针对 ARM 处理器,尤其是 Cortex M 内核处理器的最佳开发工具。

MDK5 向后兼容 MDK4 和 MDK3 等,以前的项目同样可以在 MDK5 上进行开发(但是头文

件方面得全部自己添加), MDK5 同时加强了针对 Cortex-M 微控制器开发的支持,并且对传统

的开发模式和界面进行升级,MDK5 由两个部分组成:MDK Core 和 Software Packs。其中,

Software Packs 可以独立于工具链进行新芯片支持和中间库的升级。如图 3.1.1 所示:

be4bb21fdd6c5eb7920d04689e8ea8b4.png

图 3.1.1 MDK5 组成

从上图可以看出,MDK Core 又分成四个部分:uVision IDE with Editor(编辑器),ARM

C/C++ Compiler(编译器),Pack Installer(包安装器),uVision Debugger with Trace(调试跟踪

器)。uVision IDE 从 MDK4.7 版本开始就加入了代码提示功能和语法动态检测等实用功能,相

对于以往的 IDE 改进很大。

Software Packs(包安装器)又分为:Device(芯片支持),CMSIS(ARM Cortex 微控制器

软件接口标准)和 Mdidleware(中间库)三个小部分,通过包安装器,我们可以安装最新的组

件,从而支持新的器件、提供新的设备驱动库以及最新例程等,加速产品开发进度。

MDK5 安装包可以在:http://www.keil.com/demo/eval/arm.htm 下载到。而器件支持、设备

驱动、CMSIS 等组件,则可以在 http://www.keil.com/dd2/pack 这个地址下载(推荐),然后进

行安装,也可以点击 Pack Installer 按钮(不推荐),来进行各种组件的安装。具体安装步骤请参

考光盘“6,软件资料→1,软件→MDK5→安装过程.txt”即可。

在 MDK5 安装完成后,要让 MDK5 支持 STM32F103 的开发,我们还需要安装 STM32F1

的器件支持包:Keil.STM32F1xx_DFP.2.2.0.pack(STM32F1 的器件包)。这个包以及 MDK5.21A

安装软件,我们都已经在开发板光盘提供了,大家自行安装即可。

3.2 STM32CubeF1 简介

STM32Cube 是 ST 提供的一套性能强大的免费开发工具和嵌入式软件模块,能够让开发人

员在 STM32 平台上快速、轻松地开发应用。它包含两个关键部分:

1、 图形配置工具 STM32CubeMX。允许用户通过图形化向导来生成 C 语言工程。

2、 嵌入式软件包(STM32Cube 库)。包含完整的 HAL 库(STM32 硬件抽象层 API),配套

的中间件(包括 RTOS,USB,TCP/IP 和图形),以及一系列完整的例程。

嵌入式软件包完全兼容 STM32CubeMX。对于图形配置工具 STM32CubeMX 入门使用,由于需

要 STM32F1 基础才能入门使用,所以我们安排在后面给大家讲解。本小节,我们主要讲解

STM32Cube 的嵌入式软件包部分。在讲解之前,首先我们来看看库函数和寄存器开发的关系。

3.2.1 库开发与寄存器开发的关系

很多用户都是从学 51 单片机开发转而想进一步学习 STM32 开发,他们习惯了 51 单片机

的寄存器开发方式,突然一个 STM32 固件库摆在面前会一头雾水,不知道从何下手。下面我

们将通过一个简单的例子来告诉 STM32 固件库到底是什么,和寄存器开发有什么关系?其实

一句话就可以概括:固件库就是函数的集合,固件库函数的作用是向下负责与寄存器直接打交

道,向上提供用户函数调用的接口(API)。

在 51 的开发中我们常常的作法是直接操作寄存器,比如要控制某些 IO 口的状态,我们直

接操作寄存器:

P0=0x11;

而在 STM32 的开发中,我们同样可以操作寄存器:

GPIOF->BSRR=0x00000001; //这里是针对 STM32F1 系列

这种方法当然可以,但是这种方法的劣势是你需要去掌握每个寄存器的用法,你才能正确使用

STM32,而对于 STM32 这种级别的 MCU,数百个寄存器记起来又是谈何容易。于是 ST(意法

半导体)推出了官方固件库,固件库将这些寄存器底层操作都封装起来,提供一整套接口(API)

供开发者调用,大多数场合下,你不需要去知道操作的是哪个寄存器,你只需要知道调用哪些

函数即可。

比如上面的控制 BSRRL 寄存器实现电平控制,官方 HAL 库封装了一个函数:

void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin,

GPIO_PinState PinState)

{

assert_param(IS_GPIO_PIN(GPIO_Pin));

assert_param(IS_GPIO_PIN_ACTION(PinState));

if(PinState != GPIO_PIN_RESET)

{

GPIOx->BSRR = GPIO_Pin;

}

else

{

GPIOx->BSRR = (uint32_t)GPIO_Pin << 16;

}

}

这个时候你不需要再直接去操作BSRRL寄存器了,你只需要知道怎么使用HAL_GPIO_WritePin

这个函数就可以了。在你对外设的工作原理有一定的了解之后,你再去看固件库函数,基本上

函数名字能告诉你这个函数的功能是什么,该怎么使用,这样是不是开发会方便很多?

任何处理器,不管它有多么的高级,归根结底都是要对处理器的寄存器进行操作。但是固

件库不是万能的,您如果想要把 STM32 学透,光读 STM32 固件库是远远不够的。你还是要了

解一下 STM32 的原理,了解 STM32 各个外设的运行机制。只有了解了这些原理,你在进行固

件库开发过程中才可能得心应手游刃有余。只有了解了原理,你才能做到“知其然知其所以然”,

所以大家在学习库函数的同时,别忘了要了解一下寄存器大致配置过程。

2.2 STM32CubeF1 固件包介绍

STM32Cube 目前几乎支持 STM32 全系列,本手册,我们讲解的是 STM32F1 的使用,所

以我们主要讲解 STM32CubeF1 相关知识。如果大家使用的是其他系列的 STM32 芯片,请到

ST 官网下载对应的 STM32Cube 包即可。完整的 STM32CubeF1 包在我们开发板配套光盘有提

供,目录为:8,STM32 参考资料1,STM32CubeF1 固件包

接下来我们看看 STM32CubeF1 包目录结构,如下图 3.2.2.1 所示:

3b39ac8fa49fe34ea7291152dc1ab494.png

图 3.2.2.1 STM32CubeF1 包目录结构

对于 Documentation 文件夹,里面是一个 STM32CubeF1 的英文说明文档,这里我们就不做过多解释。接下来我们通过几个表格依次来介绍一下 STM32CubeF1 中几个关键的文件夹。

1)Drivers 文件夹。Drivers 文件夹包含 BSP,CMSIS 和 STM32F1xx_HAL_Driver 三个子文件

夹。三个子文件夹具体说明请参考下表 3.2.2.2

b17043218c99fbcbf91a7113b35ee3de.png

表 3.2.2.2 Drivers 文件夹介绍

2)Middlewares 文件夹。

该文件夹下面有 ST 和 Third_Party 2 个子文件夹。ST 文件夹下面存放的是 STM32 相关的

一些文件,包括 STemWin 和 USB 库等。Third_Party 文件夹是第三方中间件,这些中间价都是

非常成熟的开源解决方案。具体说明请见下表 3.3.2.3:

6bd72e7e5454586c6826717f34b283e6.png

表 3.2.2.3 Middlewares 文件夹介绍

3)Projects 文件夹。

该文件夹存放的是一些可以直接编译的实例工程。每个文件夹对应一个 ST 官方的 Demo

板。里面有很多实例,我们都可以用来参考。这里大家注意,每个工程下面都有一个 MDK-ARM

子文件夹,该子文件夹内部会有名称为 Project.uvprojx 的工程文件,我们只需要点击它就可以

在 MDK 中打开工程。

4)Utilities 文件夹。

该文件夹下面是一些其他组件,在项目中使用得不多。有兴趣的同学可以学习一下,这里

我们不做过多介绍。

3.2.3 HAL 库和标准库选择

ST 先后提供了两套固件库:标准库和 HAL 库。STM32 芯片面市之初只提供了丰富全面的

标准库,大大便利了用户程序开发,为广大开发板所推崇,同时也为 ST 积累了大量标准库用

户。有过 STM32 基础的同学想必对标准库非常熟悉。我们正点原子目前的所有 STM32F1 开发

板以及探索者 STM32F407 开发板都有使用标准库的例程。

大约到 2014 年左右,ST 在标准库的基础上又推出了 HAL 库。实际上,HAL 库和标准库

本质上是一样的,都是提供底层硬件操作 API,而且在使用上也是大同小异。有过标准库基础

的同学对 HAL 库的使用也很容易入手。个人认为 ST 官方之所以这几年大力推广 HAL 库,是

因为 HAL 的结构更加容易整合 STM32Cube,而 STM32CubeMX 是 ST 这几年极力推荐的程序

生成开发工具。所以这几年新出的 STM32 芯片,ST 直接只提供 HAL 库。

那么有很多同学不禁要问,我们是使用 HAL 库还是标准库好呢?这里我们想说的是,HAL

库和标准库都非常强大,对于目前标准库支持的芯片采用标准库开发也非常方便实用。大家不

需要纠结自己学的是 HAL 库还是标准库,无论使用哪种库,只要理解了 STM32 本质,任何库

都是一种工具,使用起来都非常方便。学会了一种库,另外一种库也非常容易上手,程序开发

思路转变也非常容易。如果你是一个 STM32 熟手,长期从事 STM32 开发,那么有必要对标准

库和 HAL 库都有一定的了解,这样才能在项目开发中得心应手游刃有余。

3.3 新建基于 HAL 库的工程模板和工程结构讲解

在前面的章节我们介绍了 STM32F1xx 官方 HAL 库包的一些知识,这些我们将着重讲解建

立基于 HAL 库的工程模板的详细步骤。在新建模板之前之前,首先我们要准备如下资料:

1) HAL 库开发包:STM32Cube_FW_F1_V1.8.0 这是 ST 官网下载的 STM32CubeF1 包完

整版,我们光盘目录(压缩包):

“8,STM32 参考资料1,STM32CubeF1 固件包 en.stm32cubef1.zip”。

2) MDK5.23 开发环境(我们的板子的开发环境目前是使用这个版本)。这在我们光盘

的软件目录下面有安装包:软件资料软件MDK5。

3.3.1 新建基于 HAL 库工程模板

在新建之前,首先我们要说明一下,这一小节我们新建的工程放在光盘目录,路径为:“4,

程序源码标准例程-库函数版本实验 0-1 Template 工程模板-新建工程章节使用” 下面,大家

在学习新建工程过程中间遇到一些问题,可以直接打开这个模板,然后对比学习。

1) 在建立工程之前,我们建议用户在电脑的某个目录下面建立一个文件夹,后面所建立的工

程都可以放在这个文件夹下面,这里我们建立一个文件夹为 Template。这是工程的根目录文件

夹。然后为了方便我们存放工程需要的一些其他文件,这里我们还新建下面 4 个子文件夹:

CORE ,HALLIB,OBJ 和 USER。至于这些文件夹名字,实际上是可以任取的,我们这样取名只是为了方便识别。对于这些文件夹用来存放什么文件,我们后面的步骤会一一提到。新建

好的目录结构如下图 3.3.1.1.

5e72484c735337a0045295e96b3be6bb.png

图 3.3.1.1 新建文件夹

2) 接下来,打开 MDK,点击菜单 Project –>New Uvision Project ,然后将目录定位到刚才建

立的文件夹 Template 之下的 USER 子目录,工程取名为 Template 之后点击保存,工程文件就都

保存到 USER 文件夹下面。 操作过程如下图 3.3.1.2 和 3.3.1.3 所示:

38c920bacec53d5b9abb79f4756c1883.png

图 3.3.1.2 新建工程

38248d9dbcfc29a0a43d35c0eda46238.png

图 3.3.1.3 定义工程名称

接下来会出现一个选择 Device 的界面,就是选择我们的芯片型号,这里我们定位到

STMicroelectronics 下面的 STM32F103RC (针对我们的正点原子 mini STM32F103RCT6 板子是

这个型号)。这里我们选择 STMicroelectronics→STM32F1 Series→STM32F103→STM32F103RC(如果使用的是其他系列的芯片,选择相应的型号就可以了,例如我们的探索者 STM32 开发

板是 STM32F407ZG。特别注意:一定要安装对应的器件 pack 才会显示这些内容)。

7ddda532ee98dc58da2453e0a381dced.png

图 3.3.1.4 选择芯片型号

点击 OK,MDK 会弹出 Manage Run-Time Environment 对话框,如图 3.3.1.5 所示:

1485c1eb6245b1ec1d2368f6b87915bd.png

图 3.3.1.5 Manage Run-Time Environment 界面

这是 MDK5 新增的一个功能,在这个界面,我们可以添加自己需要的组件,从而方便构建

开发环境,不过这里我们不做介绍。所以在图 3.3.1.5 所示界面,我们直接点击 Cancel,即可,得到如图 3.3.1.6 所示界面:

c686ea97c6804ffc9882a5032842d915.png

图 3.3.1.6 工程初步建立

3) 现在我们看看 USER 目录下面内容,如下图 3.3.1.7:

dbd70feb1d0a2ce24623e5fa56b59797.png

图 3.3.1.7 工程 USER 目录文件

这里我们说明一下, Template.uvprojx 是工程文件,非常关键,不能轻易删除,MDK5.23

生成的工程文件是以.uvprojx 为后缀。DebugConfig,Listings 和 Objects 三个文件夹是 MDK 自

动生成的文件夹。其中 DebugConfig 文件夹用于存储一些调试配置文件,Listings 和 Objects 文

件夹用来存储 MDK 编译过程的一些中间文件。这里,我们把 Listings 和 Objects 文件夹删除,

我们会在下一步骤中新建一个 OBJ 文件夹,用来存放编译中间文件。当然,我们不删除这两个

文件夹也没有关系,只是我们不用它而已。

4) 接下来我们将从官方 stm32cubeF1 包里面复制一些我们新建工程需要的关键文件到我们的工程目录中。首先,我们要将 STM32CubeF1 包里的源码文件复制到我们的工程目录文件夹下

面。打开官方 STM32CubeF1 包,定位到我们之前准备好的 HAL 库包的目录:

STM32Cube_FW_F1_V1.8.0DriversSTM32F1xx_HAL_Driver 下面,将目录下面的 Src,Inc 文件

夹复制到我们刚才建立的 HALLIB 文件夹下面。Src 存放的是固件库的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值