正点原子STM32MP157之《新建HAL库版本MDK工程》

一、新建工程文件夹

1、准备工作
        在新建工程之前,首先我们要做如下准备:
        1) STM32Cube 官方固件包:我们使用的固件包版本是 STM32Cube_FW_MP1_V1.2.0 ,固件包 路径: 开发板光盘 A- 基础资料 \7 STM32MP1 参考资料 \STM32MP157 Cube
        2) 开发环境搭建。
2、新建文件夹
        首先我们要在电脑某个路径下新建一个文件夹作为工程的根目录文件,后续的工程文件都
将在这个文件夹里建立,我们把这个文件夹重命名为: 实验 0-3 新建工程实验-HAL 库版本 。为
了让工程的文件目录结构更加清晰,我们会在工程的根目录文件夹下建立以下几个文件夹,文
件夹名称及其作用如下表:

 工程根文件目录下新建的文件夹

工程根文件目录

         工程根目录的文件夹新建好后,我们分别看看每个新建好的文件夹里面还需要什么操作。

2.1  Drivers 文件夹

         Drivers 用于存放与硬件相关的驱动层文件,包括:开发板板级驱动代码文件、ARM 提供 的 CMSIS 代码文件、ST 提供的 STM32MP157 HAL 库驱动代码文件、正点原子提供的系统 级核心驱动代码文件。

        首先我们把官方的 STM32Cube 固件包的必须驱动文件放到这个文件夹里面。打开固件包 的 Drivers 文件夹,路径:STM32Cube_FW_MP1_V1.2.0\Drivers,直接拷贝该文件夹下的三个文件夹到我们工程的 Drivers 文件夹里,分别是:BSPCMSIS STM32MP1xx_HAL_Driver。拷贝的过程有点长,可以看到这三个文件夹占的内存很大,等待拷贝完成。拷贝完成后,这么多文件全部要放到我们的工程吗?当然不,我们只需要留下有用的文件,把没有用到的文件删除。

1 BSP 文件夹
        BSP 文件夹里面的文件都是官方的板级驱动代码,并不合适我们的开发板,所以要把里面
的内容全部删除。后面再新建我们自己开发板的板级驱动文件。
 2) CMSIS 文件夹
        CMSIS 文件夹只留下 Device Include 文件夹,其他全部删除。然后打开 CMSIS\Device\
ST\STM32MP1xx 文件夹, STM32MP1xx 文件夹里只留下 Include Source 文件夹。
        Include 文件夹里都是芯片的头文件,我们只留下如图 这三个头文件,其他删除。

Include 文件夹留下的文件

        Source 文件夹下的 Templates 文件夹留下如图的内容。

Templates 文件夹留下的文件

        arm 文件夹存放的是启动文件,我们只需要 startup_stm32h750xx.s,其他全部删除。如图所示。

arm 文件夹留下的文件
        最后就是 CMSIS 文件夹下的 Include 文件夹,里面都是内核的头文件,我们可以选择所有
文件都留下,或者也可以只需要如图 的内容。

CMSIS/Include 文件夹留下的文件
3 STM32MP1xx_HAL_Driver 文件夹
        STM32MP1xx_HAL_Driver 文件夹存放的是 HAL 库驱动代码源文件,我们只需要如图的内容。

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

工程根目录下的 Drivers 文件夹

二、 Middlewares 文件夹

        Middlewares 文件夹可以用于存放中间层组件文件和第三方中间层文件,比如: USMART 、 MALLOC、TEXT FATFS USB LWIP 、各种 OS 、各种 GUI 等等。我们新建工程实验暂时用不到,留空就行,后面的实验用到时将会陆续添加各种文件。

三、 Output 文件夹

        Output 文件夹用于存放编译器编译工程输出的中间文件,比如: .hex .bin .o 文件等等。
这里不需要操作,后面只需要在 MDK 里面设置该文件夹为编译输出文件的存放路径就行。

四、Projects 文件夹

        Projects 文件夹用于存放 MDK 工程,因为我们的工程是基于 ARM ,所以我们在 Projects
文件夹里面新建一个命名为 MDK-ARM 的文件夹。

Projects 文件夹

五、 User 文件夹

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

 官方模板工程根目录

       我们将以上 Inc 文件夹下的 lock_resource.hstm32mp1xx_hal_conf.hstm32mp1xx_it.h 文件拷贝到 User 文件夹下,然后再在 User 文件夹下新建 SCRIPT 文件夹,该文件夹用于存放分 散加载文件,从 STM32Cube_FW_MP1_V1.2.0\Projects\STM32MP157C-DK2\Templates\MD K-ARM 下拷贝 stm32mp15xx_m4.sct 到新建的 SCRIPT 文件夹下:

拷贝官方模板工程文件

六、新建工程

        下面我们新建一个工程,并将工程保存在前面新建的 MDK-ARM 文件夹下。
1.  建立初步工程
        打开 Keil uVision5 ,点击菜单 Project -->New Uvision Project ,如图 所示。

 新建工程

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

工程命名和保存
        接下来会弹出一个选择 Device 的界面,就是选择我们的芯片设备型号,大家根据自己使用的芯片型号依次选择即可。STM32MP157 开发板的芯片型号是: STM32MP157DAAx ,所以我们选择:STMicroelectronics-> STM32MP1 Series-> STM32MP157-> STM32MP157DAAx (如果使
用的是其他芯片,选择相应的型号就可以了),如图 所示。

选择芯片型号 

         特别注意:一定要安装对应的器件支持包(即 pack 包)才会显示这些内容哦,如果没得选择,请关闭 MDK,然后安装光盘: 开发板光盘A- 基础资料 \3 、软件 \MDK5\ Keil.STM32MP1xx_DFP.1.3.0.pack 这个安装包后重试。

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

Manage Run-Time Environment 界面

        在这个界面,我们可以添加自己需要的组件,从而方便构建开发环境,不过这里我们不需
要。我们直接点击 Cancel 即可。这样就得到了我们的初步工程,如图 所示。

 初步工程

         这只是一个工程的框架,我们还需要把自己需要用到的文件添加到工程里面。虽然前面,我们在工程文件夹里放了很多文件,但是它们并没有关联到工程里面

        我们看看初步工程建立好后,MDK-ARM 文件夹的内容,如图所示。

 工程文件夹 MDK-ARM 目录

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

 点击 Management Project Itmes

        弹出工程目录管理界面,其中 Project Targets 一栏,我们将 Target 名字修改为 HAL_LED
然后在 Groups 一栏删掉 Source Group1

修改工程目录

        然后再 分 别 建 立 五 项 目 录 分 组 : Startup User Drivers/SYSTEM 、 Drivers/STM32MP1xx_HAL_Driver、 Drivers/BSP Readme ,如图 所示。

 

 新建 GROUP

        点击 OK 就新建好分组,在工程中也会对应显示这分组,如图所示。

工程分组情况

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

分组添加文件方法
        按照这个方法往每个分组添加需要的文件,这个过程可能还需要用到这几个按钮,如图所示。

添加分组文件一些操作按钮
        当我们选择好所以需要添加的文件后,点击 OK ,自动回到工程主界面,最终工程目录如图所示。

工程分组情况
        可以看到分组中 stm32mp1xx_hal.c 文件有个小钥匙的符号,这可能是因为官方的固件包的
文件设置了只读权限,我们取消只读权限就好了,方法如图 所示。

取消工程文件夹的只读权限

        接下来我们在 Drivers/User 下新建并保存 main.c 文件,如图所示。  

工程文件新建保存方法

        同样这样新建的文件也是没有关联到我们的工程中的,需要我们自己在 User 分组里添加,
方法请参考图 ,最后如下图:  

工程分组情况
2.2  设置 MDK 搜索路径
        接下来我们要在 MDK 里面设置头文件搜索路径。也就是告诉 MDK 在那些目录下面去寻
找已经被包含的头文件。如果没有设置,那么工程会出现报错头文件路径找不到。具体操作如
所示。

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

添加全局宏定义标识符
3.2  设置编译中间文件存放路径

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

 设置 Output 选项卡

 设置 Listing 选项卡

        然后,原来创建工程的时候生成的 Listings Objects 文件夹可以删除掉:

 可以删除 Listings Objects 文件夹

4. 设置编译生成 .hex 文件
        STM32MP157 的 M4 没有可用的 Flash ,我们实际上仿真的时候需要用到的编译后生成
.axf 文件进行仿真。下面我们配置编译后生成的文件,编译器默认编译后不生成 .hex 文件的,
需要我们自己设置,方可生成,我们将以下 3 个选项都勾选,如下图所示。

生成 .hex 文件设置方法
        另外默认勾选 Browse Information 选项 ,其作用是,浏览程序的时候具有跳转功能,方便
一层层的寻找各种函数,变量定义。但是有个不好的点是,勾选该选项后,编译器编译工程的
时间会更长。
5. 设置分散加载文件
        分散加载文件也叫做链接脚本,用来描述程序在编译的时候应该怎么链接,关于分散加载
文件我们前面已经分析过。

     设置分散加载文件  

        ①、点击 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 版本的编译器来说编译器检查规则更严格,出现的告警会更多,且两
者的语法规则有些不同,例如:

 AC5 AC6 语法不同

        关于两个版本的编译器不同,可以参考 ARM 官网:
        http://www.keil.com/appnotes/docs/apnt_298.asp
        为了能兼容我们以前工程的代码,例如 SYSTEM 下的代码,我们设置编译器为 V5 版本,
否则编译时会报错:
        

 选择编译器 5

七 编译工程

        在编译前,我们先添加 main 函数,如果不添加 main 函数,编译的时候会提示找不到 main
函数。添加好以后保存工程,可以编译看看是否报错,如下图,编译无报错:

                编译测试

        最后编译生成了 atk_mp1_m4.axf 文件。至此,基本的 HAL 库工程就添加完成了,我们可以在工程中添加我们的代码进行开发。

 编译生成文件

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

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值