如何使用MDK建立STM32H7双核编译工程

用MDK为多核的MCU创建编译工程要略比单核MCU复杂一些。本文以STM32H745双核MCU为例示范如何创建一个工程。其实,STM32CubeMX已支持自动生成MDK编译工程了,但其生成的文件树结构复杂,且还生成很多无用文件,所以这里示范如何以一种更直观的文件树结构创建工程。因只是介绍创建过程,不关注编程代码,这里借用了STM32CubeMX来快速生成源文件。

第一步:准备源文件

由于如何使用STM32CubeMX配置和生成源代码不是本文的主题,所以下面生成一个非常简单的工程,且设置过程也多有省略。如你对STM32CubeMX不熟悉,建议了解一下STM32CubeMX。如果你已经有自己的源代码了,可以跳过这一步。

打开STM32CubeMX后,开始选择MCU

如何使用MDK建立STM32H7双核编译工程_第1张图片

选择STM32H745ZI双核MCU或者选择你自己已有的双核MCU

如何使用MDK建立STM32H7双核编译工程_第2张图片

配置MCU外设

作为示范这里只简单配置了三个LED和一个按键,未配置其它外设。

如何使用MDK建立STM32H7双核编译工程_第3张图片

配置MCU时钟

如何使用MDK建立STM32H7双核编译工程_第4张图片

生成源代码

指定源代码的生成目录和工程名,然后选择IDE为MDK-ARM。我的MDK版本是5.29,所以选择了V5.27。你也可以选择V5.0,我没注意到有什么差别。

如何使用MDK建立STM32H7双核编译工程_第5张图片

生成源代码后直接退出STM32CubeMX

如何使用MDK建立STM32H7双核编译工程_第6张图片

查看新生成的工程文件夹,文件夹中应有如下文件和子目录

如何使用MDK建立STM32H7双核编译工程_第7张图片

第二步:创建MDK工程

为MDK工程创建一个文件夹

文件夹的位置和名称可自定义,这里以STM32H7MDK文件夹为例

如何使用MDK建立STM32H7双核编译工程_第8张图片

启动MDK,然后选择生成一个新工程

如何使用MDK建立STM32H7双核编译工程_第9张图片

在前面创建的MDK工程文件夹下指定一个工程文件名

如何使用MDK建立STM32H7双核编译工程_第10张图片

选择MCU

双核MCU下有两个核,分别是CM7和CM4,这里先选择其中任意一个即可。后面会在这个工程下再创建另一个。这里以先生成CM7核为例。

如何使用MDK建立STM32H7双核编译工程_第11张图片

不需要MDK生成任何源文件,所以这里直接按Cancel键退出

如何使用MDK建立STM32H7双核编译工程_第12张图片

在MDK中按下面的管理工程项图标,开始创建工程目录 

如何使用MDK建立STM32H7双核编译工程_第13张图片

创建工程目录

首先通过鼠标双击Target1更改其名称为STM32H7_CM7,这是为CM7核创建的目录。然后再为CM4核创建一个目录STM32H7_CM4。这两个目录的名称可以自定义成其它名称。

其次再通过鼠标双击Source Group 1更改其名称为App_CM7。这是为CM7应用层源代码建立的目录。然后再分别为CM4应用层,CMSIS公共层和STM32的驱动库层创建源代码目录。

如何使用MDK建立STM32H7双核编译工程_第14张图片

最后创建好的结果如下图,然后按OK退出。

如何使用MDK建立STM32H7双核编译工程_第15张图片

第三步:创建工程文件夹及拷贝源文件

通过前一步在新的MDK工程文件夹下已生成了如下的工程文件和子目录:

如何使用MDK建立STM32H7双核编译工程_第16张图片

在MDK工程文件夹下创建三个存放源代码文件的子目录

如何使用MDK建立STM32H7双核编译工程_第17张图片

在Objects子目录下为CM7和CM4核分别各创建一个目标文件子目录,用于存放编译生成的文件。

如何使用MDK建立STM32H7双核编译工程_第18张图片

将第一步用STM32CubeMX生成的源文件拷贝到MDK工程文件夹下

首先将CM4和CM7核的.c和.h源文件分别拷贝到AppCM4和AppCM7子目录下

如何使用MDK建立STM32H7双核编译工程_第19张图片

拷好的AppCM4子目录下应有如下源代码文件

如何使用MDK建立STM32H7双核编译工程_第20张图片

拷贝好的AppCM7子目录下应有如下源代码文件。注意尽管文件名称与AppCM4子目录内的文件相同,但拷贝的来源及源代码文件的内容是完全不同的。

如何使用MDK建立STM32H7双核编译工程_第21张图片

将公共头文件和启动代码等拷贝到CMSIS子目录下

由于STM32CubeMX将这些文件生成在不同的子目录下,所以需要从多个地方拷贝。

首先拷贝共通的头文件:

如何使用MDK建立STM32H7双核编译工程_第22张图片

然后拷贝STM32H745的相关头文件(或选择与你使用的MCU相关的头文件)

如何使用MDK建立STM32H7双核编译工程_第23张图片

再拷贝底层汇编语言的启动文件

如何使用MDK建立STM32H7双核编译工程_第24张图片

还有拷贝上层C语言的启动文件

如何使用MDK建立STM32H7双核编译工程_第25张图片

以上所有文件拷贝完后,CMSIS子目录下应有如下这些文件

如何使用MDK建立STM32H7双核编译工程_第26张图片

将STM32H7的驱动函数库整个目录拷贝到MDK工程文件夹下

如何使用MDK建立STM32H7双核编译工程_第27张图片

将编译链接配置文件拷贝到MDK工程文件夹下

如何使用MDK建立STM32H7双核编译工程_第28张图片

至此所有源代码相关文件都拷贝完了,MDK工程文件夹下应有如下文件和子目录

如何使用MDK建立STM32H7双核编译工程_第29张图片

第四步:在MDK工程中加入源代码

前一步拷贝到MDK工程文件夹下的源代码文件还没有加入到MDK工程中。下面回到MDK中加入相关的源代码。在MDK中按下面的管理工程项图标:

如何使用MDK建立STM32H7双核编译工程_第30张图片

选择App_CM7,然后按Add Files...添加CM7核的应用层源文件

如何使用MDK建立STM32H7双核编译工程_第31张图片

选择AppCM7子目录下的所有.c文件,然后添加进来。

如何使用MDK建立STM32H7双核编译工程_第32张图片

添加完后的结果如下

如何使用MDK建立STM32H7双核编译工程_第33张图片

再选择App_CM4,与前面的步骤相同,按Add Files...添加CM4核的应用层源文件,将AppCM4子目录下的所有.c文件添加进来。

如何使用MDK建立STM32H7双核编译工程_第34张图片

添加启动文件

启动文件有两类:.c文件和.s汇编文件。注意添加汇编文件时要先选择.s后缀,然后才能选择并添加。

如何使用MDK建立STM32H7双核编译工程_第35张图片

添加STM32库文件

由于我们只生成了一个非常简单的工程,除GPIO外没有配置其它外设,所以这里只添加必用的库文件。其它库文件与配置的外设有关,需要根据你的配置添加。

如何使用MDK建立STM32H7双核编译工程_第36张图片

由于文件很多,上图只显示出了部分要添加的库文件。下图显示了所有需要添加的库文件。添加完后,按OK键返回。

如何使用MDK建立STM32H7双核编译工程_第37张图片

第五步:设置编译选项

编译选项需要对CM7和CM4分别设置。这里先选CM7,然后按下面的目标选项图标:

如何使用MDK建立STM32H7双核编译工程_第38张图片

设置CM7核的内存区间

如何使用MDK建立STM32H7双核编译工程_第39张图片

设置CM7核的生成目标代码的文件名,并选择生成HEX文件,然后选择生成目标文件的子目录

MDK缺省时,对CM7和CM4核使用了相同的目标文件名和目标文件子目录,所以编译后会相互覆盖彼此的文件。这里将其分开,分别取不同的目标文件名和子目录。

如何使用MDK建立STM32H7双核编译工程_第40张图片

目标文件子目录选择Objects子目录下的STM32H7_CM7文件夹。鼠标双击STM32H7_CM7文件夹进入后,按OK键返回。

如何使用MDK建立STM32H7双核编译工程_第41张图片

如下图箭头所指,确认目标文件路径选择正确后,进入下一项设置。

如何使用MDK建立STM32H7双核编译工程_第42张图片

添加CM7核的编译宏定义,然后选择添加include文件路径名

如何使用MDK建立STM32H7双核编译工程_第43张图片

反复按右上角的方框添加include文件路径如下:

如何使用MDK建立STM32H7双核编译工程_第44张图片

添加完后的结果如下。然后进入下一项设置。

如何使用MDK建立STM32H7双核编译工程_第45张图片

设置CM7核的编译链接文件

首先要取消缺省设置,然后按...选择自定义的链接文件。

如何使用MDK建立STM32H7双核编译工程_第46张图片

自定义的链接文件选择MDK工程文件夹下的stm32h745xx_flash_CM7.sct文件。
如何使用MDK建立STM32H7双核编译工程_第47张图片

按Open后,下图箭头所指位置应正确显示该链接文件名。到此为止,CM7核的编译选项就设置完了,按OK键返回,准备开始CM4核的设置。

如何使用MDK建立STM32H7双核编译工程_第48张图片

先在目标目录框中选择CM4核

如何使用MDK建立STM32H7双核编译工程_第49张图片

然后按目标选项图标开始为CM4进行设置

如何使用MDK建立STM32H7双核编译工程_第50张图片

选择设备

因为最开始生成MDK工程时选择的是CM7核,所以这里要将设备切换为CM4核,然后按Target开始CM4核的编译选项设置。

如何使用MDK建立STM32H7双核编译工程_第51张图片

CM4核的编译选项设置过程与CM7相同,先设置内存空间,然后进入下一项。

如何使用MDK建立STM32H7双核编译工程_第52张图片

设置CM4核的生成目标代码的文件名,并选择生成HEX文件,然后选择生成目标文件的子目录如何使用MDK建立STM32H7双核编译工程_第53张图片

目标文件子目录选择Objects子目录下的STM32H7_CM4文件夹。鼠标双击STM32H7_CM4文件夹进入后,按OK键返回。

如何使用MDK建立STM32H7双核编译工程_第54张图片

如下图箭头所指,确认目标文件路径选择正确后,进入下一项设置。

如何使用MDK建立STM32H7双核编译工程_第55张图片

添加CM4核的编译宏定义,然后选择添加include文件路径名

如何使用MDK建立STM32H7双核编译工程_第56张图片

按右上角的方框添加include文件路径如下。注意这里选择的是AppCM4子目录而不是AppCM7子目录

如何使用MDK建立STM32H7双核编译工程_第57张图片

确认添加完后的结果后。进入下一项设置。

设置CM4核的编译链接文件

首先要取消缺省设置,然后按...选择自定义的链接文件。如何使用MDK建立STM32H7双核编译工程_第58张图片

自定义的链接文件选择MDK工程文件夹下的stm32h745xx_flash_CM4.sct文件。

如何使用MDK建立STM32H7双核编译工程_第59张图片

按Open后,确认下图箭头所指位置显示的链接文件名,然后按OK结束设置。至此CM4和CM7核的编译选项全部设置完了。

如何使用MDK建立STM32H7双核编译工程_第60张图片

第六步:屏蔽编译文件

也许你已经注意到了,App_CM7和App_CM4下的源文件都存在与两个核的目录内,这样编译任意一个核时,两类源文件都会编译进来,这显然是我们不希望的。所以要在编译CM7核时屏蔽掉CM4的源文件,同理在编译CM4核时屏蔽掉CM7的源文件。

首先在CM4核的目录中屏蔽CM7的源文件

鼠标点击要屏蔽的App_CM7目录,然后按鼠标右键弹出子对话框,再按其第一个选项。

如何使用MDK建立STM32H7双核编译工程_第61张图片

取消右上角选项,然后按OK键。

如何使用MDK建立STM32H7双核编译工程_第62张图片

此时你应注意到App_CM7目录及其以下的文件都添加了一个禁止图标。然后还要屏蔽CM7核的启动文件,鼠标点击startup_stm32h745xx_CM7.s文件,然后按鼠标右键弹出子对话框,再按其第一个选项。

如何使用MDK建立STM32H7双核编译工程_第63张图片

取消右上角选项,然后按OK键。如何使用MDK建立STM32H7双核编译工程_第64张图片

然后再选择CM7核,屏蔽CM4核的相关源文件

如何使用MDK建立STM32H7双核编译工程_第65张图片

鼠标点击要屏蔽的App_CM4目录,然后按鼠标右键弹出子对话框,再按其第一个选项。

如何使用MDK建立STM32H7双核编译工程_第66张图片

取消右上角选项,然后按OK键。

如何使用MDK建立STM32H7双核编译工程_第67张图片

鼠标点击startup_stm32h745xx_CM4.s文件,然后按鼠标右键弹出子对话框,再按其第一个选项。

如何使用MDK建立STM32H7双核编译工程_第68张图片

取消右上角选项,然后按OK键。

如何使用MDK建立STM32H7双核编译工程_第69张图片

第七步:编译生成目标文件

按编译图标开始编译CM7核的目标文件

如何使用MDK建立STM32H7双核编译工程_第70张图片

编译成功后,再选择CM4核开始编译。

如何使用MDK建立STM32H7双核编译工程_第71张图片

最后CM4核也编译成功,整个MDK工程生成完成。

如何使用MDK建立STM32H7双核编译工程_第72张图片

到此结束。

你可能感兴趣的:(stm32,单片机,arm)