【STM32H7教程】第4章 STM32H7工程模板建立(MDK5)

2023-12-17 02:38

本文主要是介绍【STM32H7教程】第4章 STM32H7工程模板建立(MDK5),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980

第4章   STM32H7工程模板建立(MDK5)

本章教程为大家介绍如何创建MDK5工程,配置方法以及经常用到的一些配置项。

目录

第4章   STM32H7工程模板建立(MDK5)

4.1   初学者重要提示

4.2   第1步,创建工程文件夹

4.3   第2步,创建新工程

4.4   第3步,设置工程名和工程分组名

4.5   第4步,添加工程文件

4.6   第5步,Target Options配置

4.6.1      Device选项

4.6.2      Target选项

4.6.3      Output选项

4.6.4      Listing选项

4.6.5      User选项

4.6.6      C/C++选项

4.6.7      Asm选项

4.6.8      Linker选项

4.6.9      Debug选项

4.6.10 Utilities选项

4.7   第6步,最后一步验证是否创建成功

4.8   MDK的字体,多核并行编译,语法提示等设置

4.8.1      Tab Size设置

4.8.2      使能多核并行编译

4.8.3      字体设置

4.8.4      语法提示和语法检测功能

4.9   总结


 

 

4.1   初学者重要提示

  1.  KEIL官方有一个专门的MDK上手文档mdk5-getting-started,在MDK的安装目录里面,坛友翻译了整个文档:http://www.armbbs.cn/forum.php?mod=viewthread&tid=31288。
  2.  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选项

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

更多这方面的信息可以看KEIL官网:http://www.keil.com/arm/microlib.asp 。

  1. STM32H7支持双精度浮点,所以这里选择Double Precision双精度浮点。
  2. STM32H743XIH的Flash首地址是0x0800 0000,大小0x200000,即2MB。
  3. 默认的RAM空间选择DTCM,首地址0x2000 0000,大小0x20000,即128KB。

地址0x2400 0000,大小0x80000,即512KB是AXI SRAM的空间。

4.6.3      Output选项

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

4.6.4      Listing选项

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

4.6.5      User选项

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

4.6.6      C/C++选项

  1. 预定义宏

    USE_HAL_DRIVER 表示使用HAL库。

    STM32H743xx 表示使用H743系列。

  2. 选择0级优化,优化等级低,方便调试。
    • 如何做MDK编译器的代码最小优化和性能最佳优化

    MDK之前做的应用笔记:http://www.armbbs.cn/forum.php?mod=viewthread&tid=1794 。

    选项One ELF Section per Function用于删除工程中没有用到的冗余函数。

  3. 使用C99规范,在第9章有介绍。
  4. 添加路径,把用到的头文件路径包含进来,点击最右侧的小按钮,弹出如下界面进行添加即可:

4.6.7      Asm选项

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

4.6.8      Linker选项

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

4.6.9      Debug选项

  1. 软件仿真不推荐大家用,问题比较多。
  2. 硬件仿真,这里选择的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://www.armbbs.cn/forum.php?mod=viewthread&tid=2293 。

安装微软雅黑的时候要注意,电脑端默认自带了一个微软雅黑,安装的时候会出现字体是躺着的。

 

选择此图标:

选择中文简体:

选择安装微软雅黑字体:

效果如下:

4.8.4      语法提示和语法检测功能

选择此图标:

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

4.9   总结

对于初学者来说,务必要实际动手操作一遍,以后移植其它程序代码大有裨益。

这篇关于【STM32H7教程】第4章 STM32H7工程模板建立(MDK5)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/502805

相关文章

Kali Linux安装实现教程(亲测有效)

《KaliLinux安装实现教程(亲测有效)》:本文主要介绍KaliLinux安装实现教程(亲测有效),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、下载二、安装总结一、下载1、点http://www.chinasem.cn击链接 Get Kali | Kal

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

spring security 超详细使用教程及如何接入springboot、前后端分离

《springsecurity超详细使用教程及如何接入springboot、前后端分离》SpringSecurity是一个强大且可扩展的框架,用于保护Java应用程序,尤其是基于Spring的应用... 目录1、准备工作1.1 引入依赖1.2 用户认证的配置1.3 基本的配置1.4 常用配置2、加密1. 密

WinForms中主要控件的详细使用教程

《WinForms中主要控件的详细使用教程》WinForms(WindowsForms)是Microsoft提供的用于构建Windows桌面应用程序的框架,它提供了丰富的控件集合,可以满足各种UI设计... 目录一、基础控件1. Button (按钮)2. Label (标签)3. TextBox (文本框

C#实现访问远程硬盘的图文教程

《C#实现访问远程硬盘的图文教程》在现实场景中,我们经常用到远程桌面功能,而在某些场景下,我们需要使用类似的远程硬盘功能,这样能非常方便地操作对方电脑磁盘的目录、以及传送文件,这次我们将给出一个完整的... 目录引言一. 远程硬盘功能展示二. 远程硬盘代码实现1. 底层业务通信实现2. UI 实现三. De

Java如何根据word模板导出数据

《Java如何根据word模板导出数据》这篇文章主要为大家详细介绍了Java如何实现根据word模板导出数据,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... pom.XML文件导入依赖 <dependency> <groupId>cn.afterturn</groupId>

ubuntu20.0.4系统中安装Anaconda的超详细图文教程

《ubuntu20.0.4系统中安装Anaconda的超详细图文教程》:本文主要介绍了在Ubuntu系统中如何下载和安装Anaconda,提供了两种方法,详细内容请阅读本文,希望能对你有所帮助... 本文介绍了在Ubuntu系统中如何下载和安装Anaconda。提供了两种方法,包括通过网页手动下载和使用wg

如何在Ubuntu上安装NVIDIA显卡驱动? Ubuntu安装英伟达显卡驱动教程

《如何在Ubuntu上安装NVIDIA显卡驱动?Ubuntu安装英伟达显卡驱动教程》Windows系统不同,Linux系统通常不会自动安装专有显卡驱动,今天我们就来看看Ubuntu系统安装英伟达显卡... 对于使用NVIDIA显卡的Ubuntu用户来说,正确安装显卡驱动是获得最佳图形性能的关键。与Windo

MyBatisX逆向工程的实现示例

《MyBatisX逆向工程的实现示例》本文主要介绍了MyBatisX逆向工程的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录逆向工程准备好数据库、表安装MyBATisX插件项目连接数据库引入依赖pom.XML生成实体类、

Python中Flask模板的使用与高级技巧详解

《Python中Flask模板的使用与高级技巧详解》在Web开发中,直接将HTML代码写在Python文件中会导致诸多问题,Flask内置了Jinja2模板引擎,完美解决了这些问题,下面我们就来看看F... 目录一、模板渲染基础1.1 为什么需要模板引擎1.2 第一个模板渲染示例1.3 模板渲染原理二、模板