首页 > 其他分享 >MDK-ARM开发软件的使用(上)

MDK-ARM开发软件的使用(上)

时间:2024-07-21 18:00:20浏览次数:11  
标签:MDK 开发软件 文件 标签 仿真器 文件夹 软件 ARM

前言

在进行嵌入式开发学习中,大部分人都使用过MDK-ARM开发软件,由于陌生的英文界面,不知道有那些实用功能,使得开发过程走弯路。工程是基于HAL建立,下面是博主在使用此软件的一些经验,希望对大家有用。

MDK软件的使用可以分为4个步骤

新建工程------工程设置-------程序编译和下载--------程序调试

一,新建工程

文件结构

在CubeMX的文件夹下,自动生成了名为“text15.3(用户自命名)”的文件夹。在 text15.3文件夹下,生成了如图所示的相关文件和文件夹。

       文件夹中图标为蓝色MX的文件是由 CubeMX软件生成的 CubeMX 工程文件。如果用户需要修改之前的设置,如引脚分配和外设配置等,就可以直接点击,启动 CubeMX 软件来完成相关的设置。
工程文件中还生成了四个文件夹,分别是 Drivers、Inc、MDK-ARM 和 Src。(bsp文件为我自己选择添加,只是为了方便存储用户自己建立的文件而设立,不属于软件生成文件结构)

1.Drivers 文件夹


存放与驱动相关的文件,里面包含两个子文件夹:
1)CMSIS 子文件夹
Cortex-M 内核微控制器的软件接口标准。
2)STM32F4xx HAL Driver 子文件夹
STM32F4 系列微控制器的 HAL库驱动文件。


2.Inc 文件夹


存放用户头文件,包含以下3个文件:
1)emain.h
用户主程序的头文件。
2)stm32f4xx hal conf.h
HAL库配置头文件。该文件主要用于对 HAL库的裁剪。例如,修改外部晶振的频率,使能或禁能相应的片内外设。
3)estm32f4xx it.h
中断服务程序的头文件。

3.MDK-ARM 文件夹

存放 MDK 软件的工程文件,里面比较重要的是两个文件

Demo.uvprojx
MDK 软件的工程文件。
estarlup_stm32f411xe.s
芯片启动代码,主要功能是配置系统堆和栈的大小以及初始化中断向量表。

4.Src 文件夹

存放用户源文件,包含以下4个文件:

main.c :
用户主程序。
stm32f4xx_hal_msp.c
与目标 MCU 相关的片内外设初始化程序,
stm32f4xx it.c
中断服务程序,定义了常用的中断服务函数。
system_stm32f4xx.c
系统初始化代码,主要完成系统初始化操作。

点击 MDK-ARM 文件夹下面的 Demo.uvprojx文件,就可以启动MDK软件,并打开对应的工程文件。MDK 软件的主界面可以分成5部分

二,工程配置

完成工程的建立后,我们需要配置工程的开发环境。在 MDK 软件主界面的工具栏中点击 魔术棒 按钮,进入工程配置界面(Options for Target'Demo')。在工程配置界面中,一共有十个标签页。


1.Device(器件)标签页


用于选择微控制器的型号。一般情况下,在新建工程时已经选择好了芯片型号。如果用户需要更改芯片型号,可以在 Device 标签页中进行修改。

2.Target(目标)标签页


用于硬件配置,一般使用默认配置即可,其中几个重要的设置选项如下:

Xtal( MHz )
        用于设置外接晶振的频率,如图所示。用户需要根据实际情况进行修改,该值主要用于软件仿真。
 ARM Compiler
        用于选择进行程序编译的编译器,如图所示。MDK 软件提供了 V5 和V6 两种编译器。利用 CubeMX 软件所生成的 MDK 工程,默认使用的是 V5 编译器。而直接利用 MDK 软件新建工程时,默认使用的是 V6 编译器。由于 V6 编译器对 HAL,库的支持还不太完善,直接编译时会出现一些警告和错误,因此建议初学者使用 V5 编译器
Use Micro LIB
         使用微库,如图所示。为了适应 MCU 存储空间较小的情况,Keil 公司专门开发了一套小型的C语言标准库函数,比普通C语言的标准库函数代码量更小。例如,我们使用 printf()函数时就会调用微库。用户调用C语言的标准库函数时,需要勾选该选项。
Read/Only Memory Areas 和 Read/Write Memory Areas
        设置片内和片外存储器的起始地址和大小,包括 ROM 和 RAM,如图 所示。对于 Cortex-M内核微控制器而言,一般不用进行片外存储器的扩展,只使用片内存储器。存储器的起始地址和大小会根据芯片型号自动分配。
       对于 STM32F411RET芯片而言,片内ash的起始地址为0x8000000,大小为 512 KB。
片内 SRAM 的起始地址为 0x20000000,大小为 128 KB。

3:Output(输出)标签页


用于设置编译过程中输出的中间文件的存放路径,如图5-7所示,一般采用默认配置即可,其中几个重要的设置选项如下:

Select Folder for Objects
用于选择编译过程中输出的中间文件的存放路径。利用CubeMX软件生成的MDK工程将自动设置该路径为 MDK-ARM 文件夹下与工程名同名的文件夹。
Name of Executable
生成的可执行文件名称,默认和工程名一致。
Create Executable
该选项默认选中。它包含三个子选项:
1)Debug Information
生成调试信息。

2)Create HEX File
生成 HEX 格式的编程文件。
Browse Information生成浏览信息,如查看程序中定义的变量和函数等。三个子选项默认为选中状态,以便生成详细的调试信息和浏览信息以及 Hex格式的编程文件。
3)Create Library
生成Lb 文件(库文件)。如果用户希望隐藏自己的程序源码时,可以选中该选项,样就可以以库文件的形式提供程序,而不必公开源代码。

4.Listing(列表)标签页


用于生成列表文件。列表文件中包含了生成代码的详细信息,如代码大小、变量所。
用的存储器地址等,如图所示,一般使用默认配置即可。



5.User(用户)标签页


用于设置在编译之前或编译之后运行的一些用户命令,比如拷贝文件或删除文件等批处理操作,如图所示,一般使用默认配置即可。


6.C/C++ 标签页


用于在C或者 C++程序中设置预定义的宏、程序优化等级以及头文件路径,如图 5-10所示,其中几个重要的设置选项如下:

 Define
用于设置预定义的宏,其作用与在程序中用 defne 关键字定义的宏一样。如果利用CubeMx 软件生成的 MDK工程,已经默认添加了两个预定义的宏:USE HAL DRIVER 和STM32F411xE,如图 中序号①所示。如果是手动建立工程,则需要用户自行添加。

 USE HAL DRIVER
表示使用 HAL库。定义这个宏之后,才会包含“stm32f4xx_hal.h”头文件,才能使用HAL库中的接口函数。
STM32F411xE
表示使用的芯片型号。定义这个宏之后,才会包含“stm32f431xx.h”,才能访问芯片内部的寄存器。

Optimization
用于设置程序的优化等级,默认的优化等级是 Level3,如图 中所示。建议初学者选择1emd0,也就是不进行程序优化,这样可以使于观察程序中全部变量以及设置断点。如果配置成Lewd13,在硬件伤真时,可能会由于程序的优化而无法察觉,无法在某些代码行设置断点以及单步调试时出现代码运行不连续

Include Paths
用于添加头文件路径,如图中所示。如果利用CubeMx软件生成MDK工程,会自动添加所需的头文件路径。如果直接利用 MDK 软件建立工程或着用户在当前工程的基础上添加了新的文件,则需要用户手动添加对应的头文件路径。头路径没有正确添加时,编译将会报错。


7.Asm 标签页

用于在汇编程序中设置预定义的宏和文件的包含路径等,功能与C/C++标签页类如图 所示,一般使用默认配置即可。

8.Linker(链接器)标签页


用于设置程序的链接地址和分散加载文件,如图 所示,一般使用默认配置即可。

9.Debug(调试)标签页


用于程序仿真方式的设置,如图 所示。


           MDK 软件支持软件仿真和硬件仿真,软件仿真主要用于验证算法和程序的流程是否正确。在实际工程中,一般采用硬件仿真进行程序的调试和错误的排查。
          使用硬件仿真时,首先要选择所使用的仿真器:如果使用官方开发板(如Nucee开发板),板上集成了ST-Lnk 仿真器,则选择ST-Link Debuesr。如果是用户设计的电路则需要根据所使用的仿真器类型来选择。MDK软件所支持的仿真器类型如图中所所示。

       选择好仿真器后,还需要进行仿真器设置。点击仿真器右边的“Setlings”按钮,如图所示,将进入仿真器设置窗口。
          仿真器设置窗口分成了 Debug、Trace 和 Flash Download 三个子标签页,如图 所示。一般情况下,只需要设置 Debug 子标签页和 Fash Download 子标签页。


Debug 子标签页


     用于显示仿真器的名称、序列号、硬件版本号和固件版本号等基本信息,如图所示。
如果仿真器连接正确,并且用户的电路板设计正确。电路板上电后,在SW Device 窗口中将显示芯片的ID号,如图 所示。如果无法显示仿真器的相关信息,可以检意传真器是否插紧,仿真器的驱动程序是否安装。如果无法显示芯片的ID号,先检查是否上电。如果电路板已经上电则考虑微控制器的最小系统电路问题,可以通过检查时钟电路、复位电路和调试电路来排查错误。

Flash Download 子标签页


       用于下载程序的配置,如图所示,一般使用默认配置即可。如果希望程序下载完毕后自动运行,则需要勾选“Reset and Run”选项,如图所示。如果不选该选项,则下载程序后,需要按一下电路板上的复位按钮,程序才能运行。

        在 Programming Algorithm(编程算法)部分可以设置MCU片内Flash 的编程算法,片内 Fash 的编程算法会根据芯片型号自动添加,如图 所示。

10.Utilities(工具)标签页


           用于选择 MDK软件中没有支持的第三方仿真器以及对第三方仿真器的配置,如图所示。大多数情况下我们会选择 MDK 软件中支持的仿真器,因此在该标签页中不做任何修改,使用默认配置即可。

标签:MDK,开发软件,文件,标签,仿真器,文件夹,软件,ARM
From: https://blog.csdn.net/m0_67669662/article/details/140586506

相关文章

  • ARM体系结构和接口技术(十)按键中断实验①
    一、按键中断实验(一)分析按键电路图(二)芯片手册二、按键中断实验分析注:NVIC----Cortx-M核GIC----Cortx-A核(一)查看所有外设的总线以及寄存器基地址注:GIC的总线是A7核的内部总线,也就是说,它是由ARM公司完成的注:EXTI的时钟源无需手动使能,它一直是使能状态(二)RCC章节(......
  • ARM体系结构和接口技术(九)异常
    文章目录(一)异常模式(二)Cortex-A7核的异常处理流程分析1.保存现场(系统自动完成)2.恢复现场(程序员手动完成)3.异常处理流程(三)软中断验证异常处理函数异常就是处理器从用户模式切换到对应的异常模式的事件,进入异常模式之后执行对应的异常代码。异常源:引发处理器进入......
  • SolarMarker 正在使用水坑攻击与伪造的 Chrome 浏览器更新进行攻击
    在过去的三个月里,eSentire的安全研究团队发现信息窃密恶意软件SolarMarker都没有发动攻击,却在最近忽然重返舞台。此前,SolarMarker的运营者使用SEO投毒或者垃圾邮件来引诱受害者,受害者试图下载一些文档的免费模板,就被攻击者盯上了。最新的攻击中,攻击者开始利用伪造的Chro......
  • SolarMarker 正在使用水坑攻击与伪造的 Chrome 浏览器更新进行攻击
    在过去的三个月里,eSentire的安全研究团队发现信息窃密恶意软件SolarMarker都没有发动攻击,却在最近忽然重返舞台。此前,SolarMarker的运营者使用SEO投毒或者垃圾邮件来引诱受害者,受害者试图下载一些文档的免费模板,就被攻击者盯上了。最新的攻击中,攻击者开始利用伪造的Chro......
  • SolarMarker 正在使用水坑攻击与伪造的 Chrome 浏览器更新进行攻击
    在过去的三个月里,eSentire的安全研究团队发现信息窃密恶意软件SolarMarker都没有发动攻击,却在最近忽然重返舞台。此前,SolarMarker的运营者使用SEO投毒或者垃圾邮件来引诱受害者,受害者试图下载一些文档的免费模板,就被攻击者盯上了。最新的攻击中,攻击者开始利用伪造的Chro......
  • 对 Pyarmor 文件进行反混淆
    我有一个pythonpyarmor混淆文件,我想对其进行反混淆。pyarmor混淆文件包含以下内容我可以找到一种方法来取回包含在pyarmor中的源代码吗?frompyarmor_runtime_000000import__pyarmor____pyarmor__(__name__,__file__,b'PY000000/*....etc....)我尝试......
  • HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 单选题序号1
    本来打算找到工作再整理高级的题库,但一直没什么面试机会。宅在家里也不知道干些什么。索性就把高级的题库整理出来了。也算有头有尾。高级的题库更新之后,专业性更强了,不是真正从事这一行的,很难做出来。本人就是个小菜鸡,有一些题,我也不想不明白。题目的答案我尽可能的找到出......
  • 如何在 Pycharm IDE 中折叠或更好地组织长 Jupyter 笔记本单元?
    我正在使用包含大量单元格和输出的长Jupyter笔记本(.ipynb文件),在PyCharm中导航它们变得很麻烦。IDE似乎本身并不支持单元格折叠,这使得管理笔记本变得相当困难。是否有任何插件、设置或解决方法可以更好地组织或折叠PyCharm中的单元格?如何使我的笔记本文件在此IDE中......
  • Starmap 与 tqdm 结合?
    我正在做一些并行处理,如下所示:withmp.Pool(8)astmpPool:results=tmpPool.starmap(my_function,inputs)其中输入如下所示:[(1,0.2312),(5,0.52)...]即int和float的元组。代码运行良好,但我似乎无法将其包装在加载栏(tqdm)上,例如可以使用imap方......
  • 在 Windows 中将 EOF 发送到 PyCharm 控制台
    我正在Windows上学习PyCharmIDE。如何将文件结束信号发送到其调试控制台?CTRL+Z不起作用。Ctrl+Z确实在PyCharm的控制台中发送EOF(文件结束)。但是,它的行为方式可能与的预期不同。在大多数控制台(例如cmd或PowerShell)中,Ctrl+Z......