1. 前言
本文的目的是从0开始搭建一个基于MM32单片机的MDK工程,使用的主控芯片是MM32F3277G9P,移植使用的SDK是灵动微官方的MindSDK。
2. SDK的获取
2.1 SDK在官网的位置
在写本文的时候(2022.5.7),灵动微官方将其最新的MindSDK放在其官网的【支持】栏中:
要获取这个SDK的资源需要注册登录。
2.2 选择SDK
- 选择开发工具
官方支持的开发工具有:armgcc、MDK和IAR,按需选择:
本文选择的是MDK。
- 选择主控
目前(2022.5.7)官方支持的有3种主控对应其三张评估板:
本文选择的是F3270系列的评估板。
- 构建工程
根据自己的需求选择好开发工具和主控之后,就点击【BUILD PROJECT】构建工程:
构建好之后,就会跳转到生成的SDK样板记录,点击标题即可下载到本地:
3. SDK的结构
从官网下载下来的SDK文件目录如图所示:
- components(组件):提供了一些三方组件的源文件,如LVGL,内存管理、TinyUSB等;
- demo_apps:提供了一些三方组件的例程;
- device:当前处理器的一些库文件和核心文件:
其中【mdk】中的linker下的文件,是MDK工程中需要我们指定的分散加载链接文件,在稍后新建工程的时候会介绍到。
- driver_examples:当前处理器基于此SDK的一些驱动例程;
对于中这个SDK,我们要移植到自己工程中的只有【device】下的文件,其它文件夹都是给我们做参考用。
4. 新建工程
4.1 构建工程结构
在新建MDK工程之前,理应先设计好自己的工程的目录结构,以便于管理文件,这个地方完全根据个人习惯或者公司规定,没有定式,我个人习惯构建如下的工程目录结构:
这些文件夹的作用如图所示:
我们将MM32的SDK中的【device】下的所有文件和文件夹copy到【7_CoreDevice】中:
4.2 创建MM32F3277G9P的MDK工程
- 新建工程
- 选择工程的保存路径:【ProjectName】–>【8_Project】;
- 给工程取名字,例如【Template】,然后保存:
- 选择主控芯片型号:MM32F3277G9P
选择好之后点击【确定】,然后回弹出来一个管理软件组件的窗口,我们一开始先不管这个,直接点击【OK】。
4.3 管理MDK工程结构
刚才初创了MDK工程后,原始的MDK工程结构通常是无法满足我们自己的工程管理需求的,因而需要进行重新设计管理。
改变MDK工程名
- 点击菜单栏的【工程管理按钮】:
- 在【Project Targets】中我们可以增加、删除、修改工程名:
我们将目标工程名字和我们之前初创的时候取的工程名一样:
管理目标工程的文件组
- 在【Groups】窗口中就是当前目标工程会包含的文件组,我们将其设计为和我们在【4.1】小节构建的工程结构一致,只是对于工程结构中的【8_Project】这一项去掉:
- 当一个文件组中有很多的层次时,比如我们的【7_CoreDevice】中有核心文件,也有HAL库文件,我们可以根据层次进行这样的设计:
添加文件
当我们将文件组设计好之后,就可以根据这个设计添加文件到对应的组别了,比如我们可以将HAL库文件添加到【7_CoreDevice/HAL】这个文件组中:
对于HAL库文件,我们不一定都要全部添加进来,通常都是按需添加。
我们需要添加的MCU核心文件如图所示:
一个是系统配置文件【systetem_mm32f3277g.c】,另一个是系统启动文件【startup_mm32f3277g7.s】。
至此,管理目标工程的基本步骤就到此结束了,如果后续的开发需要添加额外的目标工程、文件组或者文件,根据这几步按需做就好了。
4.4 配置工程
当我们管理好基本的工程之后,还要设置这个工程,比如编译器版本选择、编译条件选择、编译路径选择、分散加载等等,我们来分别说明下。
首先点击菜单栏的【Options for Target】进入工程配置界面:
- 编译器版本选择
MDK的编译器版本支持V5和V6两种,目前常用的是V5版本,也有V6版本的,V6版本对比于V5,是在编译优化上的提升,通常V6编译速度会比V5快,且MindSDK的分散加载文件的指令用到了V6编译器的指令,所以我们默认还是选择V6版本的编译器:
- 编译条件
编译条件主要涉及两个东西,一个是全局宏定义标志,另一个是代码全局设置,比如是否支持C99,优化等级选择多高等等:
红框中选中的是最低等级的优化等级,然后后面的C99使用MindSDK所必须要选择设置上的,因为MindSDK的库文件代码使用了这种标准。
- 编译路径
编译器在编译过程中的预处理阶段会去展开源文件中#include
的头文件,如果不指定使用到的这些头文件所在的路径,那么编译器就找不到无法展开,编译就会出错,所以我们需要设置这里的编译路径:
凡是源文件中会用到的头文件(自定义的或者库文件的头文件)所在路径都必须在这里设置添加进来,C标准库的不用(比如stdio.h这些):
选择好之后点击【OK】就完成了编译路径的设置,如果后续有新增文件夹路径,再来这里添加进去就好。
- 指定分散加载文件
MindSDK有个特别的地方就是,它提供的启动代码在初始化堆栈指针的时候,是通过分散加载文件完成的,而不是直接在启动文件中完成的,就是我们在前文提到的【mdk】中的linker下的那个文件,因而我们需要去指定那个文件到MDK工程的链接中:
① 在【Options for Target】中选择【Linker】项;
② 此项去勾选;
③ 选择MindSDK提供的分散加载文件;
设置好后的结果如下图所示:
- 设置调试器
根据自己的调试器类型选择,比如ST-Link/J-Link等,我使用的是官方评估板,上面自带有他们的MM32-Link:
选择好调试器之后,点击旁边的【Settings】进入调试器设置:
① 点击【Settings】进入设置;
② 此处可以观察调试器是否将PC和处理器正常连接了;
③ 此处勾选上后,在MDK中下载程序到处理器之后,处理器就可以自动复位运行程序;
当上述的工程配置都完成之后,就点击【OK】退出配置。
5. 编译工程
5.1 新建源文件/头文件
经过前面的步骤,我们对当前工程完成了基本设置,但是还缺少一个东西:main函数。至于为何mdk工程必须要有一个确切实现的main函数,大家可以翻阅ARM的C标准库的手册,里面有详细说明。
我们将main函数放到源文件【main.c】中定义实现,但是当前工程是没有【main.c】的,因而我们需要新建一个:
点击这个快捷键后,在MDK的编辑区就会弹出一个新的文件编辑窗口:
这时候我们点击保存或者按快捷键【ctrl+s】保存:
我们将main.c保存到【1_App】中,理所应当的,文件名处我们就填写【main.c】就好:
然后点击【保存】即可。
新建文件之后,如果是源文件,且还期望其能被编译,就要将这个文件添加到MDK工程中,添加文件的步骤前面已经讲过了,除了那种方式,我们也可以在目标文件组双击鼠标左键去寻找添加,大家自己尝试:
5.2 编辑文件
编辑没啥好说的,根据C语言规则以及我们的设计需求设计程序就好,我们这里做模板工程用,因而就在【main.c】中定义实现main函数就好:
1 |
|
5.3 编译
按快捷键【F7】或者在菜单栏点击编译选项编译:
- 本文作者: 摘星星的小朋友
- 本文链接: http://slhking.github.io/2022/05/07/MM32-1-CreateMDKProject/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!