【STM32H7教程】第4章 STM32H7工程模板建立(MDK5)
完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980
第4章 STM32H7工程模板建立(MDK5)
本章教程为大家介绍如何创建MDK5工程,配置方法以及经常用到的一些配置项。
4.1 初学者重要提示
4.2 第1步,创建工程文件夹
4.3 第2步,创建新工程
4.4 第3步,设置工程名和工程分组名
4.5 第4步,添加工程文件
4.6 第5步,Target Options配置
4.7 第6步,最后一步验证是否创建成功
4.8 MDK的字体,多核并行编译,语法提示等设置
4.9 总结
4.1 初学者重要提示
- KEIL官方有一个专门的MDK上手文档mdk5-getting-started,在MDK的安装目录里面,坛友翻译了整个文档:http://forum.armfly.com/forum.php?mod=viewthread&tid=31288 。
- MDK5的工程创建过程还是比较重要的,务必实际上手操作一遍。
4.2 第1步,创建工程文件夹
创建一个文件夹,里面包含如下文件(直接将跑马灯例子的Project文件里面内容全部删除,然后整个工程复制进来即可)。

- Doc文件夹
用于记录例程的修改记录和例子简介。
- Libraries文件夹
在第一章详细介绍从官网的下载方法。
- Project文件夹
这个是本章的重点,在这个文件夹里面再建立两个文件夹,MDK-ARM(uV5)文件夹里面用于存放MDK工程,EWARMv8文件夹用于存放IAR工程,方便以后创建IAR的工程。
- User文件夹
这个是要用户提供的,开发板已经都提供好,bsp文件夹里面是开发板各个外设的驱动,segger文件夹是硬件异常分析代码。
- 删除目标文件.bat
这个是批处理文件,用于删除MDK和IAR工程编译后生成的obj和list临时文件。
4.3 第2步,创建新工程
打开MDK,选择Project ->New uVision Project:

工程名设置为project:

选择器件:STM32H743XIHx

点击OK后弹出如下界面,点击Cancel取消,当前我们还不使用RTE环境创建,

4.4 第3步,设置工程名和工程分组名
默认新建的工程是下面这样的:

打开Manage Project Items,双击Targer1修改名字为Flash,或者任何其它方便自己管理的名称,设置完毕后点击OK。

可以看到已经修改为Flash:

再次打开Manage Project Items,添加如下分组内容:

可以看到左侧工程列表已经更新:

4.5 第4步,添加工程文件
添加方法跟第2步,第3步一样,可以通过Manage Project Items添加:

也可以直接双击工程列表里面的分组添加(注意文件类型里面推荐设置为ALL files所有文件):

- 添加User分组需要的文件

main.c文件位于文件夹User,实现了一个简单的跑马灯效果。
- 添加BSP分组需要的内容

bsp.c 位于路径\User\bsp,主要用于MPU、Cache、时钟和外设初始化。
bsp.h位于路径\User\bsp,此文件是各种头文件的集中汇总贴,方便管理。
bsp_led.c位于路径\User\bsp\src,用于LED驱动。
bsp_key.c位于路径\User\bsp\src,用于按键驱动。
bsp_timer.c位于路径\User\bsp\src,用于软件定时器组和微妙级单次延迟。
bsp_fmc_io.c位于路径\User\bsp\src,用于IO扩展,这里LED要用到。
bsp_uart_fifo.c位于路径\User\bsp\src,用于8串口FIFO驱动。
stm32h7xx_it.c位于路径User\bsp,用于部分系统中断服务程序。
- 添加MDK-ARM分组需要的内容

startup_stm32h743xx.s 位于路径\Libraries\CMSIS\Device\ST\STM32H7xx\Source\Templates\arm,主要用于堆和栈空间设置,中断向量表也在这个文件。
- 添加HAL_Driver分组需要的内容

stm32h7xx_hal_conf.h位于路径\User\bsp,主要用于HAL库的配置。
其它文件路径:\Libraries\STM32H7xx_HAL_Driver\Src,用到什么外设添加什么驱动文件即可,有些外设驱动跟DMA也有关联,直接添加进来即可。
- 添加CMSIS分组需要的内容

system_stm32h7xx.c位于路径\Libraries\CMSIS\Device\ST\STM32H7xx\Source\Templates,主要用于复位RCC相关寄存器和中断向量表位置设置。
- 添加SEGGER/HardFault分组需要的内容

这两个文件位于路径:\User\segger\HardFaultHandlerMDK,主要用于硬件异常分析。
- 添加Doc分组需要的内容

这两个文件位于Doc文件夹,主要用于说明例程的功能和更新记录。
4.6 第5步,Target Options配置
MDK的配置基本都集中在Target Options对话框里面:

4.6.1 Device选项
这个选项不用管,因为我们在创建的时候已经选择了STM32H743XIHx

4.6.2 Target选项

- 因为我们一般不用软件仿真,这个选项不用管,也不推荐大家用MDK提供的软件仿真,问题比较多。
- 选择编译器,使用默认的AC5即可。当前AC6支持的还不够好,仅MDK自家的软件都支持了,第三方的问题稍多。
- 我们这里使用微库MicroLib,这个库针对嵌入式应用,MicroLIB做了深度优化,比使用C标准库所需的RAM和FLASH空间都大大减小。比如调用:<math.h>,<stdlib.h>,<stdio.h>,<string.h>。

更多这方面的信息可以看KEIL官网:http://www.keil.com/arm/microlib.asp 。
- STM32H7支持双精度浮点,所以这里选择Double Precision双精度浮点。
- STM32H743XIH的Flash首地址是0x0800 0000,大小0x200000,即2MB。
- 默认的RAM空间选择DTCM,首地址0x2000 0000,大小0x20000,即128KB。
地址0x2400 0000,大小0x80000,即512KB是AXI SRAM的空间。
4.6.3 Output选项

- 用于存放MDK编译过程中生成的obj临时文件路径,MDK在创建的时候已经帮我们创建好文件夹Objects,这里无需修改,使用默认即可。
- Debug Information表示调试信息,选上。
- Create HEX File表示是否生成hex文件,选上。
- Browse Information表示是需要go to def的支持,使用HAL库话,推荐先不要选上,因为MDK5使用AC5编译HAL库时间比较长.

4.6.4 Listing选项

- 用于存放MDK编译过程中生成的list临时文件路径,MDK在创建的时候已经帮我们创建好文件夹Listings,这里无需修改,使用默认即可。
- 是否生成*.lst文件,选上。
- 查看MAP文件要用上,全部选上。
4.6.5 User选项

这个选项基本用不上,可以不用管,主要是用来指定编译之前和编译之后执行的用户程序。对于本教程配套的例子来说在这里添加了一个批处理功能,用来实现Objects文件夹里面的hex文件复制到路径Project\MDK-ARM(uV5)里面,方便查找。

4.6.6 C/C++选项

- 预定义宏
USE_HAL_DRIVER 表示使用HAL库。
STM32H743xx 表示使用H743系列。
- 选择0级优化,优化等级低,方便调试。
- 如何做MDK编译器的代码最小优化和性能最佳优化
MDK之前做的应用笔记:http://forum.armfly.com/forum.php?mod=viewthread&tid=1794 。
选项One ELF Section per Function用于删除工程中没有用到的冗余函数。
- 使用C99规范,在第9章有介绍。
- 添加路径,把用到的头文件路径包含进来,点击最右侧的小按钮,弹出如下界面进行添加即可:

4.6.7 Asm选项

这个选项用不到,不用管。
4.6.8 Linker选项

这个选项用不到,不用管。
4.6.9 Debug选项

- 软件仿真不推荐大家用,问题比较多。
- 硬件仿真,这里选择的STLINK,大家根据自己用的那种调试器选择相应型号即可。

具体的调试设置在下一章有详细说明,本章主要是保证创建的工程能够正常编译。
4.6.10 Utilities选项

这个选项主要用于编程工具选择,大家根据自己用的那种下载器选择相应型号即可。
Update Target before Debugging表示调试前更新芯片的程序。
4.7 第6步,最后一步验证是否创建成功
点击全编译:

编译结果:0错误,0警告,编译成功。

4.8 MDK的字体,多核并行编译,语法提示等设置
这里将MDK经常用到的设置做个说明。
4.8.1 Tab Size设置
教程配套例子的Tab size要设置为4,否则代码显示不整齐:
选择此图标:

弹出的窗口里面设置Tab size为4:

4.8.2 使能多核并行编译
电脑有几个核,都选上,加快编译速度。
选择此图标:

我这里是四核:

4.8.3 字体设置
推荐大家用下微软雅黑,而且可以防止复制粘贴的时候出现乱码问题,字体下载在此贴:http://forum.armfly.com/forum.php?mod=viewthread&tid=2293 。
安装微软雅黑的时候要注意,电脑端默认自带了一个微软雅黑,安装的时候会出现字体是躺着的。
选择此图标:

选择中文简体:

选择安装微软雅黑字体:

效果如下:

4.8.4 语法提示和语法检测功能
选择此图标:

MDK的语法提示和语法检测功能还行,大家可以根据需要开启:

4.9 总结
对于初学者来说,务必要实际动手操作一遍,以后移植其它程序代码大有裨益。
【STM32H7教程】第4章 STM32H7工程模板建立(MDK5)的更多相关文章
- 【STM32H7教程】第6章 STM32H7工程模板建立(IAR8)
完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第6章 STM32H7工程模板建立(IAR8) 本章 ...
- 【STM32H7教程】第13章 STM32H7启动过程详解
完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第13章 STM32H7启动过程详解 本章教 ...
- 【STM32H7教程】第8章 STM32H7的终极调试组件Event Recorder
完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第8章 STM32H7的终极调试组件Event Re ...
- 【STM32H7教程】第3章 STM32H7整体把控
完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第3章 STM32H7整体把控 初学STM32H7一 ...
- 【STM32H7教程】第32章 STM32H7的TIM定时器基础知识和HAL库API
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第32章 STM32H7的TIM定时器基础知识和H ...
- 【STM32H7教程】第31章 STM32H7的USART应用之RS485
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第31章 STM32H7的USART应用之RS48 ...
- 【STM32H7教程】第30章 STM32H7的USART应用之八个串口FIFO实现
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第30章 STM32H7的USART应用之八个串口 ...
- 【STM32H7教程】第29章 STM32H7的USART串口基础知识和HAL库API
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第29章 STM32H7的USART串口基础知识和 ...
- 【STM32H7教程】第18章 STM32H7的GPIO应用之跑马灯
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第18章 STM32H7的GPIO应用之跑马灯 本 ...
随机推荐
- vi 常用命令使用說明
vi是一種文字模式全螢幕文字編輯軟體(Text Editor).對初學者來說,vi是個很難用的工具,一般需要2個星期的時間才能得心應手.之所以介紹vi,其理由如下: vi是Unix上的標準文字編輯軟體 ...
- git添加本地的项目到git远程管理仓库
目标:将本地存在的项目添加到git远程仓库管理 步骤: 1. 需要一个git远程仓库管理地址 例如:https://github.com/xingfupeng/test.git git@github. ...
- 通过Django Channels设计聊天机器人WEB框架
这两个月都在忙着设计针对银联客服业务的智能聊天机器人,上一周已经交完设计报告,这一周还和部门同事一起分享了系统设计及运行效果.因为时间的关系,系统原型我使用了Flask+jQuery的组合,感觉用以原 ...
- javascript 易漏点
javascript 是一种解释型语言,不是java或c++那样的编译语言.javascript指令以普通文本形式传递给浏览器,然后依次解释执行.它们不必首先“编译”成只有计算机处理器能理解的机器码. ...
- python爬虫入门(五)Selenium模拟用户操作
爬虫(Spider),反爬虫(Anti-Spider),反反爬虫(Anti-Anti-Spider) 之间恢宏壮阔的斗争... 小莫想要某站上所有的电影,写了标准的爬虫(基于HttpClient库), ...
- jieba库词频统计练习
在sypder上运行jieba库的代码: import matplotlib.pyplot as pltfracs = [2,2,1,1,1]labels = 'houqin', 'jiemian', ...
- 如何书写一篇能看懂的html和CSS代码
在书写html和CSS过程中,如果只是想要实现网页的外观和基本功能,那么简单的书写代码就可以满足需求,甚至不需要使用类名或者注释等.但实际上,这么写肯定是不行的,首先对于类同结构的重复书写就是一件很浪 ...
- Python_字符串之删除空白字符或某字符或字符串
''' strip().rstrip().lstrip()分别用来删除两端.右端.左端.连续的空白字符或字符集 ''' s='abc ' s2=s.strip() #删除空白字符 print(s2) ...
- Maven学习(七)-- 使用Maven构建多模块项目
摘自:http://www.cnblogs.com/xdp-gacl/p/4242221.html 在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分层开发,最常见的就是分为doma ...
- java位 、字节 、字符的梳理
1字节(byte)=8位(bit) char=2字节(这是因为char是Java中的保留字,Java用的是Unicode,所以char在Java中是16位即2个字节的.) 附: String str= ...