搜索
bottom↓
回复: 0

《STM32MP1 M4裸机HAL库开发指南》 第十四章 新建HAL库版本MDK工程

[复制链接]

出0入234汤圆

发表于 2022-10-31 16:10:31 | 显示全部楼层 |阅读模式
本帖最后由 正点原子 于 2022-10-31 16:10 编辑

1)实验平台:正点原子STM32MP157开发板
2)购买链接:https://item.taobao.com/item.htm?&id=629270721801
3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-318813-1-1.html
4)正点原子官方B站:https://space.bilibili.com/394620890
5)正点原子STM32MP157技术交流群:691905614 lQLPJxaFi2zaB4UWWrDAMgIsFEW2pwLb3abnwDMA_90_22.png
lQDPJxaFi2nfFizMjM0CbLCPlxn_FVheIQLb3aGrwFQA_620_140.jpg

lQLPJxaFi2nfFhLMkM0BXrDNvOUyeU_FPgLb3aGvQNIA_350_144.png

第十四章 新建HAL库版本MDK工程

从本章开始,我们正式基于HAL库来开发,在使用HAL库来开发前,我们先新建HAL库版本的MDK工程,在以后的实验中我们都会以本工程为模板进行开发,这样可以节约新建工程的时间。
        本章将分为如下几个小节:
        14.1、新建工程文件夹;
        14.2、新建文工程;
        14.3、编译工程;


14.1 新建工程文件夹
        本实验配置好的实验工程已经放到了开发板光盘中,路径为:开发板光盘A-基础资料\1、程序源码\3、M4裸机驱动例程\ MP157-M4 HAL库V1.2\实验3 新建工程实验-HAL库版本。
14.1.1 准备工作
在新建工程之前,首先我们要做如下准备:
1)STM32Cube官方固件包:我们使用的固件包版本是STM32Cube_FW_MP1_V1.2.0,固件包路径:开发板光盘A-基础资料\7、STM32MP1参考资料\STM32MP157 Cube包。
2)开发环境搭建:前面已经第三章已教大家搭建。
14.1.2 新建文件夹
首先我们要在电脑某个路径下新建一个文件夹作为工程的根目录文件,后续的工程文件都将在这个文件夹里建立,我们把这个文件夹重命名为:实验0-3新建工程实验-HAL库版本。为了让工程的文件目录结构更加清晰,我们会在工程的根目录文件夹下建立以下几个文件夹,文件夹名称及其作用如下表:
F9862BE0-5F9F-484e-8FD9-9FDF593C5623.png
表14.1.2.1工程根文件目录下新建的文件夹

另外我们的工程根文件目录下还有一个名为keilkill.bat的可执行文件,双击便可执行。其作用是删除编译器编译后的无关文件,减少工程占用的内存。还有一个名为readme的记事本文件,其作用是介绍本实验的各种信息。最后得到我们的工程根文件目录如图14.1.2.1所示。
第十四章 新建HAL库版本MDK工程888.png
图14.1.2.1工程根文件目录

工程根目录的文件夹新建好后,我们分别看看每个新建好的文件夹里面还需要什么操作。
1. Drivers文件夹
Drivers用于存放与硬件相关的驱动层文件,包括:开发板板级驱动代码文件、ARM提供的CMSIS代码文件、ST提供的STM32MP157的 HAL库驱动代码文件、正点原子提供的系统级核心驱动代码文件。
首先我们把官方的STM32Cube固件包的必须驱动文件放到这个文件夹里面。打开固件包的Drivers文件夹,路径:STM32Cube_FW_MP1_V1.2.0\Drivers,直接拷贝该文件夹下的三个文件夹到我们工程的Drivers文件夹里,分别是:BSP、CMSIS和STM32MP1xx_HAL_Driver。拷贝的过程有点长,可以看到这三个文件夹占的内存很大,等待拷贝完成。拷贝完成后,这么多文件全部要放到我们的工程吗?当然不,我们只需要留下有用的文件,把没有用到的文件删除。
1)BSP文件夹
BSP文件夹里面的文件都是官方的板级驱动代码,并不合适我们的开发板,所以要把里面的内容全部删除。后面再新建我们自己开发板的板级驱动文件。
2)CMSIS文件夹
CMSIS文件夹只留下Device和Include文件夹,其他全部删除。然后打开CMSIS\Device\ ST\STM32MP1xx文件夹,STM32MP1xx文件夹里只留下Include和Source文件夹。
Include文件夹里都是芯片的头文件,我们只留下如图14.1.2.2这三个头文件,其他删除。
第十四章 新建HAL库版本MDK工程1550.png
图14.1.2.2 Include文件夹留下的文件

Source文件夹下的Templates文件夹留下如图14.1.2.3的内容。
第十四章 新建HAL库版本MDK工程1618.png
图8.1.2.3 Templates文件夹留下的文件

arm文件夹存放的是启动文件,我们只需要startup_stm32h750xx.s,其他全部删除。如图14.1.2.4所示。
第十四章 新建HAL库版本MDK工程1710.png
图14.1.2.4 arm文件夹留下的文件

最后就是CMSIS文件夹下的Include文件夹,里面都是内核的头文件,我们可以选择所有文件都留下,或者也可以只需要如图14.1.2.5的内容。
第十四章 新建HAL库版本MDK工程1807.png
图14.1.2.5 CMSIS/Include文件夹留下的文件

到这里CMSIS文件夹就处理完成了。
3)STM32MP1xx_HAL_Driver文件夹
STM32MP1xx_HAL_Driver文件夹存放的是HAL库驱动代码源文件,我们只需要如图14.1.2.6的内容。
第十四章 新建HAL库版本MDK工程1947.png
图14.1.2.6 STM32H7xx_HAL_Driver文件夹留下的文件

到这里,我们就完成了把官方固件包中必要的驱动文件添加到我们工程文件中了。
另外,我们还需要把正点原子提供的系统级核心驱动代码文件夹SYSTEM添加到我们自己新建的Drivers文件夹里,SYSTEM可以在路径:开发板光盘A-基础资料\1、程序源码\3、M4裸机驱动例程\实验3 新建工程实验-HAL库版本\Drivers中拷贝得到,最终我们新建的Drivers文件夹目录下的文件构成如图14.1.2.7所示。
第十四章 新建HAL库版本MDK工程2193.png
图14.1.2.7 工程根目录下的Drivers文件夹

关于工程根目录下的Drivers文件操作到这里就完成了,可以说步骤是有点多。在此过程遇到问题的话,请大家多参考我们提供的实验3 新建工程实验-HAL库版本工程,一步步操作。
2. Middlewares文件夹
Middlewares文件夹可以用于存放中间层组件文件和第三方中间层文件,比如:USMART、MALLOC、TEXT、FATFS、USB、LWIP、各种OS、各种GUI等等。我们新建工程实验暂时用不到,留空就行,后面的实验用到时将会陆续添加各种文件。
3. Output文件夹
Output文件夹用于存放编译器编译工程输出的中间文件,比如:.hex、.bin、.o文件等等。这里不需要操作,后面只需要在MDK里面设置该文件夹为编译输出文件的存放路径就行。
4. Projects文件夹
Projects文件夹用于存放MDK工程,因为我们的工程是基于ARM,所以我们在Projects文件夹里面新建一个命名为MDK-ARM的文件夹。
第十四章 新建HAL库版本MDK工程2644.png
图14.1.2.8 Projects文件夹

5. User文件夹
User文件夹用于存放HAL库用户配置文件、main.c、中断处理文件,以及分散加载文件。
我们首先从官方固件包里面直接拷贝官方的模板工程下的HAL库用户配置文件和中断处理文件到我们的User文件夹里。官方的模板工程路径:STM32Cube_FW_MP1_V1.2.0\Projects\STM32MP157C-DK2\Templates,打开Inc文件夹,如图14.1.2.9所示。
第十四章 新建HAL库版本MDK工程2872.png
图14.1.2.9 官方模板工程根目录

我们将以上Inc文件夹下的lock_resource.h、stm32mp1xx_hal_conf.h、stm32mp1xx_it.h文件拷贝到User文件夹下,然后再在User文件夹下新建SCRIPT文件夹,该文件夹用于存放分散加载文件,我们从STM32Cube_FW_MP1_V1.2.0\Projects\STM32MP157C-DK2\Templates\MDK-ARM下拷贝stm32mp15xx_m4.sct到新建的SCRIPT文件夹下:
第十四章 新建HAL库版本MDK工程3119.png
图14.1.2.10拷贝官方模板工程文件

14.2 新建工程
        下面我们新建一个工程,并将工程保存在前面新建的MDK-ARM文件夹下。
14.2.1. 建立初步工程
打开Keil uVision5,点击菜单Project -->New Uvision Project,如图14.2.1.1所示。
第十四章 新建HAL库版本MDK工程3269.png
图14.2.1.1 新建工程

然后弹出工程命名和保存的操作窗口,工程文件保存路径为:实验3 新建工程实验-HAL库版本\Projects\MDK-ARM,工程名字我们取:atk_mp1_m4,最后点击保存即可。具体操作窗口如图14.2.1.2所示。
第十四章 新建HAL库版本MDK工程3396.png
图14.2.1.2工程命名和保存

接下来会弹出一个选择Device的界面,就是选择我们的芯片设备型号,大家根据自己使用的芯片型号依次选择即可。STM32MP157开发板的芯片型号是:STM32MP157DAAx,所以我们选择:STMicroelectronicsSTM32MP1 SeriesSTM32MP157STM32MP157DAAx(如果使用的是其他芯片,选择相应的型号就可以了),如图14.2.1.3所示。
第十四章 新建HAL库版本MDK工程3610.png
图14.2.1.3选择芯片型号

特别注意:一定要安装对应的器件支持包(即pack包)才会显示这些内容哦,如果没得选择,请关闭MDK,然后安装光盘:开发板光盘A-基础资料\3、软件\MDK5\ Keil.STM32MP1xx_DFP.1.3.0.pack这个安装包后重试。
点击OK后,弹出Manage Run-Time Environment对话框,如图14.2.1.4所示:
第十四章 新建HAL库版本MDK工程3801.png
图14.2.1.4 Manage Run-Time Environment界面

在这个界面,我们可以添加自己需要的组件,从而方便构建开发环境,不过这里我们不需要。我们直接点击Cancel即可。这样就得到了我们的初步工程,如图14.2.1.5所示。
第十四章 新建HAL库版本MDK工程3927.png
图14.2.1.5 初步工程

这只是一个工程的框架,我们还需要把自己需要用到的文件添加到工程里面。虽然前面,我们在工程文件夹里放了很多文件,但是它们并没有关联到工程里面。
我们看看初步工程建立好后,MDK-ARM文件夹的内容,如图114.2.1.6所示。
第十四章 新建HAL库版本MDK工程4057.png
图14.2.1.6工程文件夹MDK-ARM 目录

这里我们说明一下,atk_mp1_m4.uvprojx是工程文件,非常关键,不能轻易删除,MDK5生成的工程文件是以.uvprojx为后缀。DebugConfig,Listings和Objects三个文件夹是MDK自动生成的文件夹。其中DebugConfig文件夹用于存储一些调试配置文件,Listings和Objects文件夹用来存储MDK编译过程的一些中间文件。这里,我们把Listings和Objects文件夹删除,我们后面会把编译中间文件存放到Output文件夹。当然,我们不删除这两个文件夹也没有关系,只是我们不用它而已。
14.2.2. 构建工程框架
1. 工程分组
下面我们开始构建工程框架。右键点击Target1,选择Manage Project Items,如下图14.2.2.1所示:
第十四章 新建HAL库版本MDK工程4437.png
图14.2.2.1 点击Management Project Itmes

弹出工程目录管理界面,其中Project Targets一栏,我们将Target名字修改为HAL_LED,然后在Groups一栏删掉Source Group1:
第十四章 新建HAL库版本MDK工程4557.png
图14.2.2.2修改工程目录

然后再分别建立五项目录分组:Startup、User、Drivers/SYSTEM、Drivers/STM32MP1xx_HAL_Driver、Drivers/BSP和Readme,如图14.2.2.3所示。
第十四章 新建HAL库版本MDK工程4680.png
图14.2.2.3新建GROUP

点击OK就新建好分组,在工程中也会对应显示这分组,如图14.2.2.4所示。
第十四章 新建HAL库版本MDK工程4738.png
图14.2.2.4工程分组情况

接下来我们要往各个分组添加我们需要的文件,方法如图14.2.2.5所示。值得注意的是,图中步骤5还可以通过双击完成,这样对于一个分组要添加多个文件的时候很有用。步骤4默认是选择.c文件类型,当我们打开对应路径找不到我们需要添加的文件时,就可以通过步骤4的下拉选项选择“All files”,从而可以查看所有文件类型。图中选择实验3 新建工程实验-HAL库版本\Drivers\CMSIS\Device\ST\STM32MP1xx\Source\Templates\arm下的startup_stm32mp15xx.s文件:
第十四章 新建HAL库版本MDK工程5018.png
图14.2.2.5分组添加文件方法

按照这个方法往每个分组添加需要的文件,这个过程可能还需要用到这几个按钮,如图14.2.2.6所示。
第十四章 新建HAL库版本MDK工程5088.png
图14.2.2.6 添加分组文件一些操作按钮

当我们选择好所以需要添加的文件后,点击OK,自动回到工程主界面,最终工程目录如图14.2.2.7所示。
第十四章 新建HAL库版本MDK工程5165.png
图14.2.2.7 工程分组情况

可以看到分组中stm32mp1xx_hal.c文件有个小钥匙的符号,这可能是因为官方的固件包的文件设置了只读权限,我们取消只读权限就好了,方法如图14.2.2.8所示。
第十四章 新建HAL库版本MDK工程5269.png
图14.2.2.8 取消工程文件夹的只读权限

接下来我们在Drivers/User下新建并保存main.c文件,如图14.2.2.9所示。
第十四章 新建HAL库版本MDK工程5341.png
图14.2.2.9 工程文件新建保存方法

同样这样新建的文件也是没有关联到我们的工程中的,需要我们自己在User分组里添加,方法请参考图14.2.2.5,最后如下图:
第十四章 新建HAL库版本MDK工程5427.png
图14.2.2.10工程分组情况

2. 设置MDK搜索路径
接下来我们要在MDK里面设置头文件搜索路径。也就是告诉MDK在那些目录下面去寻找已经被包含的头文件。如果没有设置,那么工程会出现报错头文件路径找不到。具体操作如图14.2.2.11所示。
74B1A829-77CD-418c-9DC0-345A30492E7D.png
图14.2.2.11添加MDK搜索路径

选好以后点击OK,头文件路径就添加完毕了。到这里我们就完成了构建整个工程的框架,就是包括:工程分组和MDK搜索路径。
14.2.3. 魔术棒设置
1. 添加全局宏定义标识符
对于STM32MP157系列的工程,需要添加全局宏定义标识符,所谓全局宏定义标识符,就是在工程中任何地方都可见。添加方法是点击魔术棒之后,进入C/C++选项卡,然后在Define输入框连输入CORE_CM4,USE_HAL_DRIVER,STM32MP157Dxx,注意这里标识符之间用英文逗号隔开,关于这三个宏定义,我们在第八章节分析stm32mp1xx.h文件的时候有详细介绍过。操作步骤过程如下图14.2.3.1所示:
第十四章 新建HAL库版本MDK工程5875.png
图14.2.3.1 添加全局宏定义标识符

2. 设置编译中间文件存放路径
前面我们讲过,MDK默认编译后的中间文件存放目录为MDK-ARM目录下面的Listings和Objects子目录,这里为了和我们正点原子工程结构保持一致,我们重新选择存放到Output文件夹里。其中包括两项选项卡输出设置,操作过程如图14.2.3.2和图14.2.3.3所示。
第十四章 新建HAL库版本MDK工程6053.png
图14.2.3.2设置Output选项卡

第十四章 新建HAL库版本MDK工程6077.png
图14.2.3.3 设置Listing选项卡

        然后,原来创建工程的时候生成的Listings和Objects文件夹可以删除掉:
第十四章 新建HAL库版本MDK工程6144.png
图14.2.3.4可以删除Listings和Objects文件夹

3. 设置编译生成.hex文件
STM32MP157的M4没有可用的Flash,我们实际上仿真的时候需要用到的编译后生成的.axf文件进行仿真。下面我们配置编译后生成的文件,编译器默认编译后不生成.hex文件的,需要我们自己设置,方可生成,我们将以下3个选项都勾选,如下图所示。
第十四章 新建HAL库版本MDK工程6319.png
图14.2.3.5 生成.hex文件设置方法

另外默认勾选Browse Information选项,其作用是,浏览程序的时候具有跳转功能,方便一层层的寻找各种函数,变量定义。但是有个不好的点是,勾选该选项后,编译器编译工程的时间会更长。
4. 设置分散加载文件
        分散加载文件也叫做链接脚本,用来描述程序在编译的时候应该怎么链接,关于分散加载文件我们前面已经分析过,在前面第 六章 新建工程(不是HAL库工程)的时候也有进一步解释,下面我们直接配置:
第十四章 新建HAL库版本MDK工程6547.png
图14.2.3.6设置分散加载文件

        ①、点击Linker标签,进行链接相关配置。
        ②、取消勾选“Use Memory Layout from Target Dialog”,不使用MDK默认的配置,使用我们自己创建的分散加载文件。
        ③、点击此按钮找到要使用的分散加载文件。
        ④、选择前面我们创建工程的时候添加的分散加载文件。
        ⑤、如果需要编辑分散加载文件内容的话就直接点击“Edit”即可在MDK下编辑。
        ⑥、点击OK完成设置。
6. 设置编译器版本
        新版本的MDK提供两个版本编译器,分别是 ARM Compiler 5和 ARM Compiler 6(ARM Compiler 5简称为AC5,将ARM Compiler 6简称AC6),默认使用的是V6版本的编译器, V6版本的编译器相较于V5版本的编译器来说编译器检查规则更严格,出现的告警会更多,且两者的语法规则有些不同,例如:
第十四章 新建HAL库版本MDK工程6950.png
图14.2.3.7 AC5和AC6语法不同

        关于两个版本的编译器不同,可以参考ARM官网:        http://www.keil.com/appnotes/docs/apnt_298.asp
        为了能兼容我们以前工程的代码,例如SYSTEM下的代码,我们设置编译器为V5版本,否则编译时会报错:
第十四章 新建HAL库版本MDK工程7098.png
图14.2.3.8 选择编译器5

14.3 编译工程
        在编译前,我们先添加main函数,如果不添加main函数,编译的时候会提示找不到main函数。添加好以后保存工程,可以编译看看是否报错,如下图,编译无报错:
第十四章 新建HAL库版本MDK工程7207.png
图14.3.1 编译测试

        最后编译生成了atk_mp1_m4.axf文件。至此,基本的HAL库工程就添加完成了,我们可以在工程中添加我们的代码进行开发。如果要仿真,可以参考前面第六章 6.4小节的步骤来操作。
第十四章 新建HAL库版本MDK工程7315.png
图14.3.2编译生成文件

        本工程中只添加了部分HAL库文件,以后实验中我们需要什么文件再往里边添加即可,例如,如果我们要测试窗口看门狗实验,我们需要往Drivers/STM32MP1xx_HAL_driver里边添加stm32mp1xx_hal_wwdg.c文件。本工程只是一个简单的模板,我们也可以根据自己的实际情况更改工程中的目录和文件存放的位置。

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 09:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表