韦东山 IMX6ULL和正点原子_「正点原子NANO STM32开发板资料连载」第三章 MDK5 软件入门1...

1)实验平台:ALIENTEK NANO STM32F411 V1开发板

2)摘自《正点原子STM32F4 开发指南(HAL 库版》关注官方微信号公众号,获取更多资料:正点原子

韦东山 IMX6ULL和正点原子_「正点原子NANO STM32开发板资料连载」第三章 MDK5 软件入门1..._第1张图片

第三章 MDK5 软件入门

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

基于 HAL 库的 MDK5 工程,同时本章还将向大家介绍 MDK5 软件的一些使用技巧,希望大家

在本章之后,能够对 MDK5 这个软件有个比较全面的了解。

本章分为如下个小结:

3.1,STM32CubeF4 简介

3.2,MDK5 简介与安装

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

3.4,程序下载与调试;

3.5,MDK5 使用技巧;

3.1 STM32CubeF4 简介

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

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

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

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

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

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

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

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

开发的关系。

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

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

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

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

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

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

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

接操作寄存器:

P0=0x11;

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

GPIOx->BSRR = 0x0011;

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

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

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

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

函数即可。

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

void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState

PinState)

{

if(PinState != GPIO_PIN_RESET)

{

GPIOx->BSRR = GPIO_Pin;

}

else

{

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

}

}

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

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

固件库函数,基本上函数名字能告诉你这个函数的功能是什么,该怎么使用,这样是不是开发

会方便很多?

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

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

解一下 STM32 的原理,而这些原理了解了,你在进行固件库开发过程中才可能得心应手游刃

有余。只有谅解了原理,你才能做到“知其然知其所以然”,所以大家在学习库函数的同时,

别忘了要了解一下寄存器大致配置过程。

3.1.2 STM32CubeF4 固件包介绍

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

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

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

目录为:7,STM32 参考资料1,STM32CubeF4 固件包

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

韦东山 IMX6ULL和正点原子_「正点原子NANO STM32开发板资料连载」第三章 MDK5 软件入门1..._第2张图片

图 3.1.2.1 STM32CubeF4 包目录结构

对于 Ducumentation 文件夹,里面是一个 STM32CubeF4 的英文说明文档,这里我们就不做

过多解释。接下来我们通过几个表格依次来介绍下 STM32CubeF4 中几个关键的文件夹。

1)Drivers 文件夹

Drivers 文件夹包含 BSP,CMSIS 和 STM32F4xx_HAL_Driver 三个子文件夹。三个子文件

夹具体说明请参考 3.1.2.2:

154879ea57b00b49646b92b627a6298d.png
韦东山 IMX6ULL和正点原子_「正点原子NANO STM32开发板资料连载」第三章 MDK5 软件入门1..._第3张图片

表 3.1.2.2 Drivers 文件夹介绍

2)Middlewares 文件夹

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

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

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

韦东山 IMX6ULL和正点原子_「正点原子NANO STM32开发板资料连载」第三章 MDK5 软件入门1..._第4张图片
d9b192d632809191f6b485fe52616255.png

表 3.1.2.3 Middlewares 文件夹介绍

3) Project 文件夹

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

板。这里我们讲解的是 STM32F411RC 开发板,所以我们打开子文件夹 STM32F411RET6-Nucleo

即可(RET6 FLASH 容量会大点)。里面有很多实例,我们都可用来参考。这里大家注意,每

个工程下面都有一个 MDK-ARM 子文件夹,该子文件夹内部都会有名称为 Project.uvprojx 的工

程 文 件 , 我 们 只 需 要 点 击 它 就 可 以 MDK 中 开 打 工 程 , 例 如 我 们 打 开

STM32Cube_FW_F4_V1.24.0ProjectsSTM32F411RE-Nucleo

TemplatesMDK-ARM 文件夹,内容如下图所示 3.1.2.4:

韦东山 IMX6ULL和正点原子_「正点原子NANO STM32开发板资料连载」第三章 MDK5 软件入门1..._第5张图片

图 3.1.2.4 Templates 工程中 MDK-ARM 文件内容

3)Utilities 文件夹该文件夹下面是一些其他组件,在项目中使用不多。有兴趣的同学可以学习一下,这里我们就不做过多介绍。

3.1.3 HAL 库和标准库选择

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

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

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

发板以及探索者 STM32F407 开发板都是采用的标准库。目前网络学习资料和源码,绝大多数

都是采用的标准库。

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

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

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

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

序生成开发工具。所以这两年推出的 STM3232 芯片,ST 直接只提供 HAL 库,在新型的 STM32

芯片中,用 HAL 库逐步淘汰彼标准库。

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

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

前网络资料和程序大部分都是讲解的标准库。大家不需要纠结自己学的是 HAL 库还是标准库,

无论使用哪种库,只要理解了 STM32 本质,任何库都是一种工具,使用起来都非常方便,学

会了一种库,另外一种库也非常容易上手,程序开发思路转变也非常容易。如果你是一个 STM32

熟手,长期从事 STM32 开发,那么有必要对标准库和 HAL 库都有一定的了解,这样才能在开

发中得心应手游韧有余。

在之前正点原子

你可能感兴趣的:(韦东山,IMX6ULL和正点原子)