【正点原子STM32连载】 第七章 Geehy标准库版本MDK工程创建 摘自【正点原子】APM32F407最小系统板使用指南

news2025/1/15 13:02:41

1)实验平台:正点原子stm32f103战舰开发板V4
2)平台购买地址:https://detail.tmall.com/item.htm?id=609294757420
3)全套实验源码+手册+视频下载地址: http://www.openedv.com/thread-340252-1-1.html#

第七章 Geehy标准库版本MDK工程创建

在上一章的内容中简单介绍了Geehy标准库,本章将详细讲解使用Geehy标准库创建MDK工程的步骤,本章创建好的MDK工程存放路径为A盘4,程序源码标准例程实验0 基础入门实验实验0-3 新建工程实验-标准库版本,读者在创建工程时若遇到问题,可打开该工程进行对比。
本章分为如下几个小节:
7.1 Geehy标准库版本MDK工程创建
7.2 下载验证

7.1 Geehy标准库版本MDK工程创建
在开始进行工程创建前,要求读者提前做好如下准备:
①:获取到Geehy提供的APM32F4xx_SDK(参考第六章)
②:搭建好开发环境(参考第三章)
Geehy标准库版本MDK工程的创建可分为四个步骤,如下:
①:构建工程文件夹
②:添加文件到工程目录
③:创建MDK工程
④:配置MDK工程
7.1.1 构建工程文件夹
构建工程文件夹前需要先确定工程文件夹结构,建议初学者使用本书配套实验例程工程的文件夹结构,该工程文件夹结构也是正点原子所有实验例程的工程文件夹结构,读者可任意打开一个本书配到的实验例程根目录,如下图所示:
在这里插入图片描述

图7.1.1.1 工程文件夹结构
该工程文件夹结构清晰,其中各个子文件夹的作用如下表所示:
在这里插入图片描述

表7.1.1.1 工程子文件夹介绍
接下来,就按照上面介绍的工程文件夹结构构件工程文件夹,如下图所示:
在这里插入图片描述

图7.1.1.2 构建工程文件夹
上图中还另外添加了keilkill.bat的脚本文件和readme.txt文本文件,其中keilkill.bat脚本文件用于清除工程文件夹中编译工程产生的中间文件,方便工程的存档和传输,readme.txt文本文件主要是对该工程的描述,包括工程功能、使用的硬件资源等信息。
7.1.2 添加文件到工程目录
在该步骤中,涉及了五个文件夹,如下:
①:Drivers文件夹
Drivers文件夹用于存放与硬件相关的驱动文件,如下表所示:
在这里插入图片描述

表7.1.2.1 Drivers文件夹介绍
其中CMSIS、Device和APM32F4xx_StdPeriphDriver都可以从APM32F4xx_SDK中获取;而SYSTEM文件夹是正点原子提供的系统级核心驱动代码,主要提供了系统时钟初始化、延时、串口收发等基础功能,读者可在本书配套的任意一个实验例程中获取到该文件夹;BSP文件夹为开发板板级支持包驱动代码,在初次创建工程时留空即可,在后续的实验中会逐渐完善BSP文件夹。
添加好文件的Drivers文件夹,如下图所示:
在这里插入图片描述

图7.1.2.1 Drivers文件夹
②:Middlewares文件夹
Middlewares文件夹用于存放正点原子提供的中间组件(USMART、MALLOC等)和第三方中间组件(FatFs、FreeRTOS等)在初次创建工程时,并不会用到这些中间组件,因此留空即可。
③:Output文件夹
Output文件夹用户存放MDK工程编译后产生的二进制文件和编译过程文件等,这些文件均由MDK软件在进行工程编译的时候产生,留空即可。
④:Projects文件夹
Projects文件夹主要用于存放MDK的工程文件,在Projects文件夹中创建一个MDK-ARM的空文件夹,用于下文创建MDK工程时,存放MDK的工程文件,如以下图所示:
在这里插入图片描述

图7.1.2.2 Projects文件夹
⑤:User文件夹
User文件夹用于存放用户编写的应用代码,例如main.c等,main.c文件中提供了main()函数(必须有该函数),对于初次创建的工程,可以从“实验0-3 新建工程实验-标准库版本”的工程中复制。另外,在该文件夹下还会存放apm32f4xx_int.c和apm32f4xx_int.h这两个文件,这两个文件主要是用于管理程序中的中断服务函数,这两个文件直接从“实验0-3 新建工程实验-标准库版本”的工程中复制即可。
添加好文件的User文件夹,如下图所示:
在这里插入图片描述

图7.1.2.3 User文件夹
7.1.3 创建MDK工程
在完成了以上两大步骤后,接下来可以开始创建MDK工程了,首先打开MDK软件,依次点击菜单栏中的ProjectNew uVision Project,如下图所示:
在这里插入图片描述

图7.1.3.1 新建MDK工程
随后在弹出的窗口中选择工程文件的保存路径和工程文件名,如下图所示:
在这里插入图片描述

图7.1.3.2 保存工程文件
点击保存后,会弹出选择设备的窗口,其实就是选择所使用的MCU型号,这里选择GeehyAPM32F4 SeriesAPM32F407APM32F407ZG,如下图所示:
在这里插入图片描述

图7.1.3.3 选择MCU型号
正确选择MCU型号并点击“OK”按钮后,会弹出RTE(Run Time Environment,运行时环境,由MDK提供)的管理窗口,本文配套的所有实验例程均不使用RTE,点击窗口下方的“Cancel”按钮关闭窗口即可。
至此,就能看到MDK工程的一个雏形了,如下图所示:
在这里插入图片描述

图7.1.3.4 MDK工程雏形
7.1.4 配置MDK工程
配置MDK工程主要就是为工程添加一些源码文件,以及对MDK工程进行一些配置等。
在添加源码文件之前,先创建一些分组,使工程的结构更加清晰明了。点击工具栏上的按钮打开工程项目管理窗口,在工程项目管理窗口中可以管理工程目标名和项目分组,按照下图所示,需改工程目标名并创建几个项目分组,如下图所示:
在这里插入图片描述

图7.1.4.1 工程项目管理窗口
上图中共创建了五个项目分组,但还未向分组中添加项目文件,接下来分别介绍各个项目分组中应该添加那些项目文件。
①:Startup项目分组
Startup用于存放启动文件,对于APM32F407ZG型号的MCU,其启动文件的路径为DriversDeviceGeehyAPM32F4xxSourcearmstartup_apm32f40x.s,添加项目文件后的Startup项目分组,如下图所示:
在这里插入图片描述

图7.1.4.2 Startup项目分组
②:User项目分组
User主要用于存放用户的应用代码及其相关的文件,如下图所示:
在这里插入图片描述

图7.1.4.3 User项目分组
main.c文件的路径为Usermain.c;
apm32f4xx_int.c文件的路径为Userapm32f4xx_int.c;
system_apm32f4xx.c文件的路径为DriversDeviceGeehyAPM32F4xxSourcesystem_apm32f4xx.c。
③:Drivers/SYSTEM项目分组
Drivers/SYSTEM用于存放SYSTEM文件夹中的C源文件,如下图所示:
在这里插入图片描述

图7.1.4.4 Drivers/SYSTEM项目分组
sys.c、delay.c和usart.c文件的路径均在Drivers/SYSTEM文件夹中。
④:Drivers/APM32F4xx_StdPeriphDriver项目分组
Drivers/APM32F4xx_StdPeriphDriver用于存放Geehy标准库中的C源文件,如下图所示:
在这里插入图片描述

图7.1.4.5 Drivers/APM32F4xx_StdPeriphDriver项目分组
这部分的文件可以按需添加,以减少工程的编译时间,但对Geehy标准库还不太了解的读者,全部添加即可。Geehy标准库C源文件的路径为Drivers/APM32F4xx_StdPeriphDriver/src。
⑤:Readme项目分组
Readme用于存放工程根目录下的readme.txt文本文件,如下图所示:
在这里插入图片描述

图7.1.4.6 Readme项目分组
至此,项目文件基本添加完毕,后续读者应根据实际需求再往工程中添加所需的项目文件。
接下来点击工具栏上的按钮,打开Options for Target窗口,首先可以看到Target选项卡中的ARM Compiler默认选择了“Use default compiler version 6”即AC6,由于APM32F4xx_SDK并不支持AC6,因此要将该选项修改为“Use default compiler version 5”即AC5,如下图所示:
在这里插入图片描述

图7.1.4.7 Target选项卡
接着是Output选项卡,点击“Select Folder for Objects…”按钮指定编译输出的文件保存路径为工程根目录下的Output文件夹中,再勾选“Create HEX File”使工程成功编译后生成Hex文件,方便后续通过串口烧录程序,如下图所示:
在这里插入图片描述

图7.1.4.8 Output选项卡
接着是Listing选项卡,点击“Select Folder for Listing…”按钮指定map等文件的输出目录为根文件夹下的Output文件夹,如下图所示:
在这里插入图片描述

图7.1.4.9 Listing选项卡
接着是User选项卡,默认情况下,MDK软件会在工程成功编译后自动进入调试模式,若想禁用该功能,则取消勾选Start Debugging复选框即可,如下图所示:
在这里插入图片描述

图7.1.4.10 User选项卡
接着是C/C++选项卡,为了正常使用Geehy标准库在Define编辑框中添加“APM32F40X”的全局共定义,再接着就是通过在Include Paths中添加头文件路径,如下图所示:
在这里插入图片描述

图7.1.4.11 C/C++选项卡
在这里插入图片描述

图7.1.4.12 添加头文件路径
再接着就是与调试相关的配置,若读者需使用仿真器进行调试,请参考第4.3小节使用DAP烧录及调试程序。
至此,一个最基础的基于Geehy标准库的MDK工程就创建好了,读者可以打开main.c文件查看本工程实现的功能,如下图所示:
在这里插入图片描述

图7.1.4.13 main.c文件
可以看到,在main()函数中先进行了一些基本的初始化工作(主要是初始化系统时钟、延时功能和串口),接着在一个while循环中重复通过串口输出“Hello, APM32F407\r\n”字符串。
接下来点击工具栏中的按钮尝试编译工程,若编译无误,则说明工程创建成功了,若有错误,建议读者仔细根据本小节的内容再好好检查一下创建的工程。
7.2 下载验证
在前面的章节中,介绍了通过串口(4.2 使用串口烧录程序)和仿真器(4.3.1 使用DAP烧录程序)的方式烧录程序,两种方式烧录程序的结果都是一样的,但仿真器使用起来更加方便,且还具有调试功能,因此从本小节开始,都将使用仿真器进行程序烧录。
点击MDK软件上方工具栏上的按钮进行程序烧录,程序烧录成功后,按照3.4小节的描述将开发板的USB_UART接口通过USB数据线与PC进行连接,随后打开PC端的串口调试助手(推荐使用ATK-XCOM,该软件可在A盘6,软件资料1,软件串口调试助手软件(ATK-XOMC)下找到),选择对应的COM口并按下图配置好串口参数后点击“打开串口”按钮,随后便能看到串口调试助手不断输出“Hello, APM32F407”字符串,如下图所示:
在这里插入图片描述

图7.2.1 串口输出结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/885486.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图解 Paxos 算法

👏作者简介:大家好,我是爱写博客的嗯哼,爱好Java的小菜鸟 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦 📝个人博客:敬请期待 📕系列…

Dubbo基础学习(笔记一)

目录 第一章、概念介绍1.1)什么是RPC框架1.2)什么是分布式系统1.3)Dubbo概述1.3)Dubbo基本架构 第二章、服务提供者2.1)目录结构和依赖2.2)model层2.3)service层2.4)resources配置文…

vector【2】模拟实现(超详解哦)

vector 引言(实现概述)接口实现详解默认成员函数构造函数析构函数赋值重载 迭代器容量size与capacityreserveresizeempty 元素访问数据修改inserterasepush_back与pop_backswap 模拟实现源码概览总结 引言(实现概述) 在前面&…

VMware虚拟安装Ubuntu,然后切换Ubuntu内核版本

无论你选择哪种方法,一旦进入 GRUB 引导菜单,你应该能够选择需要的内核版本并启动系统。 打开终端:你可以通过按下 Ctrl Alt T 快捷键来打开终端。 使用 sudo:切换内核需要管理员权限,因此你需要使用 sudo 命令。首…

QtCreator 配置 MSVC 编译工具

在官网下载的 Qt 都是配置 mingw,没法使用 webenginewidgets,只有使用 msvc 编译的 Qt,才带有 web 控件。原理都是下载 Visual Studio 安装,使用其中的 msvc 工具,如果只下载 msvc 而不必下载使用 VS 其它工具&#xf…

【日常积累】使用frp进行内网穿透

frp 是什么? frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。 为什么使用 frp? 通过在具…

我记不住的grep和find命令

前言: Linux操作中总是会用到查找操作,无论是查找文件、目录,还是查找文件中的内容等。grep命令用于在某个文件文本中查找指定的字符串,类似于word中的ctrlF,而find命令用于在某个指定的目录中查找某个文件或某个目录。…

深入学习SpringCloud Alibaba微服务架构,揭秘Nacos、Sentinel、Seata等核心技术,助力构建高效系统!

课程链接: 链接: https://pan.baidu.com/s/1hRN0R8VFcwjyCTWCEsz-8Q?pwdj6ej 提取码: j6ej 复制这段内容后打开百度网盘手机App,操作更方便哦 --来自百度网盘超级会员v4的分享 课程介绍: 📚【第01阶段】课程简介:全…

函数性能探测:更简单高效的 Serverless 规格选型方案

作者:拂衣、丛霄 2019 年 Berkeley 预测 Serverless 将取代 Serverful 计算成为云计算新范式。Serverless 为应用开发提供了一种全新系统架构。借助 2023 年由 OpenAI 所带来的 AIGC 风潮,以阿里云函数计算 FC、AWS Lambda 为代表的 Serverless 以其更高…

软件压力测试对软件产品起到什么作用?

一、软件压力测试是什么? 软件压力测试是一种通过模拟正常使用环境中可能出现的大量用户和大数据量的情况,来评估软件系统在压力下的稳定性和性能表现的测试方法。在软件开发过程中,经常会遇到一些性能瓶颈和稳定性问题,而软件压力测试的作…

AlexNet网络结构详解

AlexNet论文地址: https://proceedings.neurips.cc/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.pdf 1、简介 AlexNet是2012年ISLVRC(ImageNet Large Scale Visual Recognition Challenge)竞赛的冠军网络,图像分类的正确率从70%提升到80%&…

《财讯》期刊简介及投稿要求

《财讯》杂志是经国家新闻出版总署批准,面向国内外公开发行的“全国综合性教育理论学术期刊 面向全国各级各类大、中专经济院校工作者;银行、经贸委、财政及行政管理人员,是作者科研、晋级等方面权威依据的优秀期刊。 主管单位:…

什么是冒烟测试?什么时候做冒烟测试?冒烟测试的用例哪儿来的?

什么是冒烟测试? 冒烟测试(Smoke Testing) 是软件测试中的一项基础测试,也称为构建验证测试(Build Verification Testing),通常用于确认新版本的软件是否可以进行基本的功能测试或者是否能够正…

常见期权策略类型有哪些?

这几天在做一个期权策略类型的整理分类,怎么解释期权策略,期权策略是现代金融市场中运用非常广泛、变化非常丰富、结构非常精妙的金融衍生产品;同时也是一种更为复杂也更为灵活的投资工具,下文介绍常见期权策略类型有哪些&#xf…

图片转换成pdf格式?这几种转换格式方法了解一下

图片转换成pdf格式?将图片转换成PDF格式的好处有很多。首先,PDF格式具有通用性,可以在几乎任何设备上查看。其次,PDF格式可以更好地保护文件,防止被篡改或者复制。此外,PDF格式还可以更好地压缩文件大小&am…

BitLocker已加密 - 解决方案

BitLocker介绍 Bitlocker 是 Windows 磁盘加密功能,旨在通过为整个卷提供加密来保护数据。 BitLocker 解决了因设备丢失、被盗或不适当解除授权而遭受数据盗窃或泄露的威胁。 BitLocker虽然增强了数据安全性,但也增加了用户的使用困难度,因为…

Ansys Zemax | 手机镜头设计 - 第 1 部分:光学设计

本文是 3 篇系列文章的一部分,该系列文章将讨论智能手机镜头模组设计的挑战,从概念、设计到制造和结构变形的分析。本文是三部分系列的第一部分,将专注于OpticStudio中镜头模组的设计、分析和可制造性评估。(联系我们获取文章附件…

【猿灰灰赠书活动 - 02期】- 【Java从入门到精通2023年7月最新(第7版)】

说明:博文为大家争取福利,与清华大学出版社合作进行送书活动 图书:《Java从入门到精通》 一、好书推荐 图书介绍 Java入门经典,95万Java程序员的入行选择。配备升级版Java开发资源库,在线大咖课在线答疑,学…

shell脚本之函数及数组

shell脚本之函数及数组 一函数1.1函数的作用1.2函数的基本格式1.3函数的注意事项1.4函数调用的方法1.5函数的返回值1.6函数的传参1.7在外部调用函数1.8函数变量的作用范围1.9函数的递归 二.数组2.1shell数组的定义2.2定义属组的方式2.3数组的数据类型2.4获取数组的数据列表2.5获…

回归预测 | MATLAB实现GRU门控循环单元多输入多输出

回归预测 | MATLAB实现GRU门控循环单元多输入多输出 目录 回归预测 | MATLAB实现GRU门控循环单元多输入多输出预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 MATLAB实现GRU门控循环单元多输入多输出,数据为多输入多输出预测数据,输入10个…