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

2023-11-16

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

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

第三章 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 所示:

dfd73224c94c573f30a02f7dc0acc3b4.png

图 3.1.2.1 STM32CubeF4 包目录结构

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

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

1)Drivers 文件夹

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

夹具体说明请参考 3.1.2.2:

d8d58baf1896abc1efed03e0da94b0e4.png

表 3.1.2.2 Drivers 文件夹介绍

2)Middlewares 文件夹

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

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

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

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:

图 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 库都有一定的了解,这样才能在开

发中得心应手游韧有余。

在之前正点原子

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 单片机控制继电器实验

    单片机控制继电器实验 在各种自动控制设备中 都存在一个低压的自动控制电路与高压电气电路的互相连接问题 一方面要使低压的电子电路的控制信号能够控制高压电气电路的执行元件 如电动机 电磁铁 电灯等 另一方面又要为电子线路的电气电路提供良好的电隔
  • 如何安装以及用相关插件配置OBSIDIAN?

    之前看人推荐logseq就尝试了一下 吐槽跨设备同步难搞 然后被人种草了Obsidian 这几天使用下来感觉确实比logseq好用多了 第三方插件同步虽然有点冲突但大体上还好 现在考虑怎么去合理规划tag以及wiznote笔记的迁移 虽说感
  • 刷脸支付机会是留给敢迈出第一步的人

    从支付宝推出余额宝 花呗等功能大幅培养用户理财习惯 到微信支付通过微信红包打通朋友圈 微信支付和支付宝的擂台之战从未平息 面对10亿交易笔数到20亿的跨越 较量已经从扫码支付延伸至了各式各样的甚至难啃的场景 比如停车场无感支付 线下的刷脸支
  • Docker笔记(精简版)

    文章目录 初始Docker 学习背景 Docker解决依赖兼容问题 Docker解决操作系统环境差异 Docker架构 镜像和容器 DockerHub Docker架构 安装Docker 卸载 可选 安装Docker 启动docker 配置
  • VS静态编译C/C++解决程序丢失 VCRUNTIME140.dll

    VS静态编译C C 解决程序丢失 VCRUNTIME140 dll1VS静态编译C C 解决程序丢失 VCRUNTIME140 dll2VS静态编译C C 解决程序丢失 VCRUNTIME140 dll3VS静态编译C C 解决程序丢失 V
  • 【C++ 并发与多线程】std::thread类-为共享数据加锁 2

    正交 消除无关事务之间的影响 力求高内聚低耦合 死锁的概念略去不说 死锁有可能发生在使用多个互斥量的场景下 也可能存在没有使用互斥量的场景 两个线程都在等待对方释放互斥量 两个线程都调用了对方的join 函数 为了解决两个线程都在等待对方释
  • 实施前端微服务化的六七种方式

    微前端架构是一种类似于微服务的架构 它将微服务的理念应用于浏览器端 即将 Web 应用由单一的单体应用转变为多个小型前端应用聚合为一的应用 由此带来的变化是 这些前端应用可以独立运行 独立开发 独立部署 以及 它们应该可以在共享组件的同时进
  • 记一次Nginx代理Mysql服务的经历

    背景 根据组长背景描述 具备以下前提 1 Mysql服务器为 某A云厂商的RDS SAAS服务 但是不开通外网服务 2 EC2 服务器一台 某A云厂商LaaS服务 也不开通外网 3 阿里云服务器一台 这台服务器有服务需要连接Mysql服务
  • 多列索引

    单列索引与多列索引 索引可以是单列索引 也可以是多列索引 下面我们通过具体的例子来说明这两种索引的区别 假设有这样一个people表 CREATE TABLE people peopleid SMALLINT NOT NULL AUTO I
  • swiper实现无限滚动轮播、左右切换

    废话不多说 直接上代码 const mySwiper ref
  • 经典C语言程序设计100例,部分有个人注解

    经典C语言程序设计100例 程序1 题目 有1 2 3 4个数字 能组成多少个互不相同且无重复数字的三位数 都是多少 1 程序分析 可填在百位 十位 个位的数字都是1 2 3 4 组成所有的排列后再去 掉不满足条件的排列 当然这里的去掉并不
  • QT之读取文本文件中的GPS数据,并解析出经纬度

    include
  • Win10以管理员身份运行CMD命令提示符的四种方法

    方法一 1 我们可以在Windows10系统的开始菜单上 单击鼠标右键 这时候出现的菜单中 我们选择命令提示符 管理员 点击打开这样即可 方法二 1 点击开始菜单 然后界面中我们这里选择所有应用打开进入 如图所示 2 所有应用中 我们在Wi
  • QT中的库类

    目录 QFile详解 文件如果不存在则创建 判断文件是否存在 获得文件的各种详细信息 读写文件 1 QFile文件如果不存在则创建的方法 2 QFileInfo的方法获得文件的各种详细信息 3 QFile读写文件的内容 QTextStrea
  • redis集群拓扑结构自动更新:使用Lettuce连接Cluster集群实例时异常处理

    问题 使用lettuce连接Cluster集群实例 实例执行规格变更后 分片数有变化时 部分槽位 Slot 会迁移到新分片上 当客户端连接到新分片时会出现以下异常问题 java lang IllegalArgumentException C
  • Mybatis学习笔记

    文章目录 前言 1 Mybatis简介 1 1 什么是Mybatis 1 2 持久化 1 3 持久层 1 4 为什么需要Mybatis 2 第一个Mybatis程序 2 1 创建测试数据库 2 2 新建maven项目 2 2 1 新建项目
  • 计算机语句的简单练习

    1 求1000以内的水鲜花数 用while循环的方法 i 100 while i lt 1000 b int i 100 10 s int i 10 10 g int i 10 if b 3 s 3 g 3 i print i i 1 co
  • ubuntu14.04中java卸载_ubuntu如何完全卸载Java

    1 移除所有 Java相关包 Sun Oracle OpenJDK IcedTea plugins GIJ 1 apt get update 2 apt cache search java awk print 1 grep E e ia32

随机推荐

  • 前端响应式

    文章目录 什么是响应式 响应式web交互设计 怎么实现响应式布局 1 百分比布局 2 媒体查询 3 rem响应式布局 4 vw vh响应式布局 5 flex弹性布局 什么是响应式 总所周知 我们前端也被称为响应式web交互设计 那么什么是响
  • 搭建个人静态blog

    前言 也是无意间看到一个写个人博客的 看着非常的好看 于是乎一个牛逼而又der想法就产生了 我也要搞一个人的blog 就显摆一下 就是玩 于是这个blog就产生了 写完之后的也是非常的激动 赶紧发给朋友 显摆显摆 后来朋友也都很惊讶 确实还
  • 机器学习-k-近邻算法

    k 近邻算法 一 k 近邻算法概述 1 1 使用python导入数据 1 2 从文本文件中解析数据 二 使用k 近邻算法改进约会网站的配对效果 2 1 准备数据 2 2 数据预处理 2 3 分析数据 2 4 测试算法 2 5使用算法 三 手
  • [docker]笔记-基础配置

    1 docker启动和设置开机启动 root localhost systemctl start docker root localhost systemctl enable docker 2 更换docker镜像网站 默认docker镜像
  • SpringSecurity学习笔记一

    SpringSecurity学习笔记 一 Java配置 Web安全 创建Security过滤器 通过springSecurityFilterChain负责所有安全过滤请求 基本例子 EnableWebSecurity public clas
  • Android 中SharedPreferences的详解

    博主前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住也分享一下给大家 点击跳转到网站 一 SharedPreferences 首选项 介绍 存储软件的配置信息 存储的信息 很小 简单的数据 比如 自动登录 记住密码 小说a
  • 入门级详细USB移植教程——致正在为USB烦恼的朋友

    同上一篇MPU6050一样 我还是写一篇关于USB的帖子 在圈圈等玩USB的大神面前 我掌握的USB知识实在是九牛一毛 所以这篇帖子加上了入门级的修饰语 写这篇帖子主要是为了那些想快速开发USB的人 至于想深入了解USB协议 可以先学完我这
  • 游戏开发unity编辑器扩展知识系列:AssetDatabase.SaveAssets

    插眼 总结 在Editor运行c 脚本时 可以修改资源 这时如果想要保存修改 可以调用AssetDatabase SaveAssets 参考 官方文档 https docs unity3d com ScriptReference Asset
  • 记一次ES线上异常

    记一次ES线上异常解决过程 周六线上es报警es not green 由于没有带笔记本回家并且考虑到集群容量本身就很紧张以及最近的读写压力确实很大 并没有多余的机器可以加入集群 觉得应该不会是什么大问题 就没有太多在意 周末去上班打开电脑一
  • 如何调用百度接口来实现全国的撒点效果(在这里把百度接口的文档荡到本地了)

  • LogisticRegression用户流失预测模型初探【推荐】

    什么是逻辑回归 Logistic回归与多重线性回归实际上有很多相同之处 最大的区别就在于它们的因变量不同 其他的基本都差不多 正是因为如此 这两种回归可以归于同一个家族 即广义线性模型 generalizedlinear model 这一家
  • 「c++小学期」实验题目及代码

    面向对象编程的C 和平时做题用的C 还是有差距的 实验的题目都是小题目 就都做一下吧 实验一 简单C 程序设计 1 猜价格游戏 编写C 程序完成以下功能 1 假定有一件商品 程序用随机数指定该商品的价格 1 1000的整数 2 提示用户猜价
  • 【AI with ML】第 8 章 :使用 TensorFlow 创建文本

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • styled-components设置组件属性

    问题 最近在试着用react做一个音乐播放器 在这之前其实并不了解styled components 但由于使用css in js并且想实现hover效果 百度各种解决方案后发现了styled components这个好东西 如果你看到了这
  • RGMII接口(KSZ9031)

    概述 RGMII的时序是时钟双沿采样 在默认的RGMII时序中 时钟 RXC TXC 边沿与数据边沿 TXD RXD TX CTL RX CTL 的对齐 因此 FPGA想要正确收发数据 需要对TXC或RXC进行适当的延迟 由于最高时钟为12
  • 二手房交易差额款需要一次交清?

    在签订购房合同的时候 房东要求添加条款 在房产过户当日收取差额款 差额款应该一次性给他 还是可以按比例付 拿到房产证后付清 他给我写收条的时候 我应该注意什么 找法网小编为您详细介绍 网友咨询 我通过本地的老牌中介买房的 在签订购房合同的时
  • 时间序列数据特征提取TsFresh

    文章目录 1 源码和数据地址 2 TsFresh安装 3 代码部分说明 3 1 数据下载 3 2 从文件读取数据 4 特征拓展 4 1 默认参数 4 2 ComprehensiveFCParameters参数 4 3 EfficientFC
  • 电子工程师的自我修养 - OD输出

    开漏输出 Open Drain Output OD门 漏极开路 Open Drain 电路特点 利用外部电路的驱动能力 减少IC内部的驱动 可以将多个开漏输出的pin连接到一条线上 通过一个上拉电阻 在不增加任何器件的情况下 形成 线与 关
  • 使用myisamchK 命令修复数据

    使用myisamchk 命令修复表 myisam使用程序可以用来获得有关你的数据库表的统计信息 检查 修复 优化他们 命令格式 myisamchk option tables frm 常用的检查选项 information i 打印所检察标
  • 韦东山 IMX6ULL和正点原子_「正点原子NANO STM32开发板资料连载」第三章 MDK5 软件入门1...

    1 实验平台 ALIENTEK NANO STM32F411 V1开发板 2 摘自 正点原子STM32F4 开发指南 HAL 库版 关注官方微信号公众号 获取更多资料 正点原子 第三章 MDK5 软件入门 本章将向大家介绍 MDK5 软件和