keil
是ARM的软件子公司,MDK-Arm
是keil的一个产品,把它称作keil也是可以的。
arm 链接:https://developer.arm.com/Tools%20and%20Software/Keil%20MDK#Overview
keil:https://www.keil.com/download/
keil MDK是一个完整的软件开发解决方案,用于创建,构建和调试基于Arm的微控制器的嵌入式应用程序。keil MDK包括µVision IDE和调试器,
Arm C/C++编译器,和必要的中间件组件。它支持所有的硅厂商,有超过9500种设备,并且易于学习和使用。keil MDK有多个版本,根据不同的目标设备,主机平台,中间件,安全认证套件和试用许可进行区分。
keil MDK的组成如下:
编译器和中间件都集成在µVision IDE中,你可以在项目管理器中选择和配置它们。你也可以在Manage Run-Time Environment窗口中添加或删除中间件组件。
它有四个版本,分别是 免费版、基础版、增强版和专业版,它们的功能和价格有所不同。
许可证有一年和永久两种选择,还有锁定和共享两种类型。锁定许可证只能在一台计算机上使用,共享许可证可以在多台计算机上使用,但同一时间只能有一台计算机激活。下面是一年、共享许可证的价格:
CMSIS
是Cortex微控制器软件接口标准(Common Microcontroller Software Interface Standard)的缩写,它是一套工具,API,框架和工作流,用于简化微控制器软件的开发和重用,降低微控制器开发者的学习曲线,加速项目的构建和调试,从而缩短新应用的上市时间。CMSIS在GitHub上公开开发。
CMSIS为Cortex-M和入门级Cortex-A处理器提供了一致和高效的接口,它包括以下几个部分:
ULINK
是一种调试探头,它可以连接你的PC的USB端口和你的目标系统,让你可以在目标硬件上编程和调试你的应用程序。ULINK支持多种处理器目标,包括Arm Cortex-M,Cortex-R,Cortex-A,8051等。ULINK可以和MDK一起使用,让你可以控制处理器,设置断点,读写内存,以全速运行处理器。ULINK有多个版本,如ULINK2,ULINKpro,ULINKplus等,它们有不同的功能和性能。
ULINK,JLINK和STLINK三种调试探头的一些特点:
调试探头 | 厂商 | 支持的平台 | 支持的处理器 | 支持的接口 | 下载速度 | 特殊功能 |
---|---|---|---|---|---|---|
ULINK | Keil | 仅Keil | Arm Cortex-M,Cortex-R,Cortex-A,8051等 | JTAG/SWD | 1MB/s | Flash Breakpoints |
JLINK | SEGGER | Keil,IAR,ADS等多个平台 | Arm Cortex-M,Cortex-R,Cortex-A,RISC-V,8051等多种架构和厂商的处理器 | JTAG/SWD/SPI | 4MB/s | Flash Breakpoints,Real-Time Transfer,VCOM |
STLINK | ST | Keil,IAR,Eclipse等多个平台 | STM32和STM8微控制器 | SWIM/JTAG/SWD | 25KB/s | 无 |
keil MDK的最新版本是5.38a,发布于2022年12月。这个版本支持Cortex和Arm设备的开发环境,包括最新的Ethos-U55微神经处理器。
keil 5.38相比于之前的版本,有以下一些升级和特性:
- keil 5.38支持更多的ARM设备,包括Cortex-M23、Cortex-M33、Cortex-M35P等。
- keil 5.38包含了ARM Compiler 6.16,它提供了更好的代码优化、诊断和C++14支持。
- keil 5.38修复了一些已知的错误和问题,提高了软件的稳定性和性能。
- keil 5.38提供了一个免费的非商业版MDK-Community,它包含了完整的软件开发套件,适用于基于Cortex-M的微控制器。
- keil 5.38与ULINK调试适配器相结合,提供了先进的实时调试、跟踪和分析功能。
自己去keil官网下载最新版MDK-Arm
即可,安装即可。
keil安装时的core和pack文件夹是指:
安装后,使用激活码激活,至于激活码是你自己去官方买,还是怎么样(crack),我不分享这些负能量的了。
以管理员身份打开keil,在file,license management里面填写激活码即可。
注意,这是最新版软件,你要是汉化什么的,注意替换的那个UV4是不是最新版,否则会出现一些错误哦。我的建议是用英文原版就行了。
上面几行分别是:
菜单栏的很多选项都不常用,或者一般使用工具栏的快捷图标。
另外,在代码区域右键,也会有部分选项。
File菜单包含了以下功能:
Device Database
用于管理和存储各种微控制器(MCU)和其他嵌入式设备的信息。这个数据库包含了大量的设备规格、特性、寄存器定义以及其他相关信息。它提供了一个集中的地方,供开发人员查找和选择他们所使用的特定设备。
使用Device Database的主要好处如下:
设备信息查找:通过Device Database,开发人员可以方便地查找所需的设备。他们可以按照特定的厂商、系列、型号等来筛选设备,以找到符合他们项目需求的合适设备。
设备配置:Device Database还提供了设备配置的选项。开发人员可以选择他们所使用的设备,并对其进行各种配置,如时钟频率、外设模块的使能与配置等。这些配置选项可以帮助开发人员更轻松地初始化设备,并设置其特定的功能。
代码生成:Keil软件通常配备了一些代码生成工具,可以根据所选择的设备自动生成初始化代码和驱动程序。Device Database中的设备信息提供了必要的参数和寄存器定义,这些信息可以被代码生成工具使用,以生成与所选设备兼容的代码。
总之,Keil的Device Database是一个集中存储和管理嵌入式设备信息的地方,它可以帮助开发人员方便地查找、配置和生成与所选设备相对应的代码。这使得嵌入式开发过程更加高效和方便。
Edit菜单包含以下子菜单:
Go To Matching Brace
: 跳转到匹配的括号 Ctrl+EGo To Definition of current Word
: 转到当前字定义Go To Next Reference of current Word
: 转到当前字下一个引用Go To Declaration of current Word
: 转到当前字申明Configuration
: 配置Bookmark
是一种用于在编辑器中标记代码位置的功能,它可以方便地在不同的代码段之间跳转和查看。Bookmark在编辑器的边缘显示为紫色的方块或圆圈,可以通过右键菜单或工具栏按钮来设置、删除或清除。Bookmark不会影响程序的运行。
View菜单是一个控制显示和隐藏各种窗口的菜单,它有以下子菜单:
以上是在编辑模式下的View菜单,在调试模式下还有以下子菜单:
Books:当你选择某个芯片时,Books会显示相关的Datasheet等资料,官网英文原版
Project菜单是一个用于管理工程的菜单,它有以下子菜单:
Options for Target
: 工程目标选项配置,可以设置目标的设备、输出、编译器、链接器、调试器等参数。Flash菜单是一个用于下载、擦除和配置目标芯片的Flash存储器的菜单,它只有在编辑模式下可以使用,它有以下子菜单:
Debug菜单是一个用于调试和仿真程序的菜单,它有以下子菜单:
Peripherals菜单是一个用于查看和修改目标芯片的外设寄存器的菜单,它只有在调试模式下可以使用,它有以下子菜单:
Tools菜单是一个用于配置和使用外部工具的菜单,它有以下子菜单:
PC-Lint
是一个用于C/C++代码静态分析的工具,它可以检查程序的语法错误、潜在的错误隐患、不合理的编程习惯等。它可以与keil等开发环境集成,提高代码的质量和正确性。
添加第三方工具,比如代码格式化:Keil代码一键对齐工具
SVCS菜单是一个用于配置和使用软件版本控制系统的菜单,它可以与git、svn等工具集成,实现代码的管理和协作。它有以下子菜单:
Window菜单是一个用于管理和调整编辑器窗口的菜单,它有以下子菜单:
Help菜单是一个用于提供帮助文档和支持信息的菜单,它有以下子菜单:
工具栏中大多数选项都是常用的。
keil的工具栏分为两行,第一行是文件工具栏,第二行是编译工具栏(实际布局不一定是这样,知道各个选项什么作用即可)。
它们的功能如下:
此外,还可能有一些其他的选项,比如查找替换、项目设置、设置等等。
pack
是指一种软件包,它包含了针对特定硬件设备或芯片的软件组件、驱动程序、中间件和例程等。这些软件组件和资源被整合在一起,以便用户可以方便地在Keil开发环境中使用它们。
Keil中的pack通常由芯片制造商、芯片供应商或第三方开发者提供。它们包含了与特定芯片或开发板相关的软件工具和文件,例如CMSIS(Cortex Microcontroller Software Interface Standard)组件、设备驱动程序、外设库、示例代码和文档等。
使用pack可以极大地简化在Keil中开发嵌入式系统的过程。通过导入适当的pack,开发人员可以轻松地访问与目标芯片或设备相关的资源和功能,并且可以更高效地进行软件开发和调试。
示例:在keil中安装STM32F1xx、4xx
的pack的步骤如下:
打开keil MDK软件,点击Pack Installer图标,或者在菜单栏中选择Project -> Manage -> Pack Installer。
在Pack Installer的Devices标签中,找到STMicroelectronics,点击+号展开支持的微控制器系列,选择STM32F1 Series。
在Pack Installer的Packs标签中,找到Keil::STM32F1xx_DFP这个软件包,点击Install按钮,开始下载和安装这个软件包。
Edit菜单下Configuration选项或者工具栏的扳手就是keil设置。
keil的configuration是指IDE的一些设置,包括编辑器、颜色和字体、用户关键字、文本补全、快捷键和工具栏等。这些设置可以影响您的编程体验和效率。
在configuration中,有六个选项卡,分别是:
Editor
:编辑器的一些通用设置,如自动缩进、虚拟空间、显示空白、高亮当前行等。Colors & Fonts
:颜色和字体的设置,如语法颜色、打印颜色、右边距等。User KeyWords
:用户关键字的设置,如添加自定义关键字、设置关键字颜色等。Text Completion
:文本补全的设置,如启用代码补全列表、设置触发字符等。Shortcuts
:快捷键的设置,如为常用功能分配快捷键等。Toolbars
:工具栏的设置,如显示或隐藏工具栏、自定义工具栏按钮等。您好,这是Bing。我可以帮您了解keil的options for target
的所有选项。
options for target是指工程目标选项,通常用于设置编译器和链接器的选项,如设备类型、晶振频率、内存分配、输出格式、调试器类型等。这些选项可以影响编译结果和调试过程。
可以通过以下方法打开options for target:
这个对话框有十个标签页,分别是:
先安装pack,然后就可以根据你的芯片型号选择了。
Target选项是用来设置目标的一些基本信息,如晶振频率、操作系统、编译器、内存等。
Target选项有以下几个部分:
可以点击Target选项下面的Edit按钮来修改以上设置,也可以直接编辑工程文件(.uvprojx)来修改。
IROM和IRAM的值可以在前面讲到的Device Database里面看到:
CPU=IRAM(0x20000000,0x00005000) IROM(0x08000000,0x00010000)
CPUTYPE(“Cortex-M3”) CLOCK(12000000) ELITTLE FLDLL=UL2CM3(-S0 -C0 -P0
-FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0(KaTeX parse error: Can't use function '$' in math mode at position 19: …ice:STM32F103C8$̲Flash\STM32F10x…Device:STM32F103C8$SVD\STM32F103xx.svd
use microLIB是一个编译器的选项,用来选择是否使用microLIB库,这是一个高度优化的库,适用于用C编写的基于ARM的嵌入式应用程序。
使用use microLIB有以下一些优点和缺点:
是否使用use microLIB取决于工程需求和芯片特性,一般来说,如果您需要优化代码空间,并且不需要浮点运算或C++等功能,可以选择使用use microLIB。
如果您需要使用浮点运算或C++等功能,并且不在乎代码空间的大小,可以选择不使用use microLIB。
如果选择使用use microLIB,需要在编译器的选项中勾选use microLIB,并且在源文件中添加一些代码来避免使用半主机模式和重定向输入输出设备。
如果选择不使用use microLIB,那么您需要在编译器的选项中取消勾选use microLIB,并且在源文件中不要使用标准C库中的一些函数,比如printf等。
Output选项是用来设置输出的路径、文件名、格式等,可以选择输出可执行文件或库文件,可以选择输出调试信息、HEX文件、浏览信息等。
Output选项有以下几个部分:
.axf
的文件,这个文件包含了代码、数据和调试信息,可以用于调试或下载到目标设备。如果不勾选,不会生成可执行文件,只会生成目标文件(.o)和库文件(.a)。.hex
的文件,这个文件是可执行文件的十六进制格式,可以用于一些编程器或烧录器。如果不勾选,不会输出HEX文件。hex文件和axf文件都是可以下载到STM32芯片中运行的文件,它们都包含了编译器生成的机器码,但是它们也有一些区别。
一般来说,如果只需要下载程序到芯片中运行,不需要进行调试或仿真,可以选择下载hex文件,因为它比axf文件更小更简洁。
如果需要进行调试或仿真,可以选择下载axf文件,因为它包含了更多的信息,可以方便查看源代码和汇编代码之间的对应关系,断点设置等。
Listing选项是用来设置输出的列表文件,可以选择输出汇编列表、C编译列表、链接列表等,可以设置页面的宽度和长度,可以选择输出MAP文件的详细信息等。
Listing选项有以下几个部分:
User选项是用来设置用户自定义的命令或工具,可以在编译、链接、烧录等过程中执行一些额外的操作,比如生成bin文件、转换格式、校验文件等。
User选项有以下几个部分:
C/C++选项是用来设置C/C++编译器的一些参数,可以选择编译器的版本、优化级别、语言标准、警告级别等,可以定义一些宏、包含路径、条件编译等,可以选择一些扩展功能、目标选项、杂项选项等。
C/C++选项有以下几个部分:
Preprocessor这里可以填写一些预处理器的设置,比如宏定义、包含路径、条件编译等。
例如,如果使用了STM32的HAL库,需要在宏定义中添加以下内容(逗号隔开):
这样,编译器就会根据这些宏来选择合适的头文件和源文件,以及配置一些HAL库的参数。
如果使用了STM32的标准外设库,那需要在宏定义中添加以下内容:
这样,编译器就会根据这些宏来选择合适的头文件和源文件,以及配置一些标准外设库的参数。
如果使用了一些第三方的库或者模块,需要在包含路径(Include Paths
)中添加相应的路径,比如:
这样,编译器就会在这些路径下查找头文件,如果找到了匹配的头文件,就会将其包含到源文件中。
如果需要对一些文件进行条件编译,可以在条件编译(Assemble/Compile/Exclude)中添加相应的设置,比如:
汇编相关。
Linker选项是指链接器的设置,可以用来配置链接过程中的相关参数,例如内存布局、目标文件格式、链接脚本等。
有以下几个部分:
Debug选项是指调试器的设置,可以用来配置调试过程中的相关参数,例如选择调试工具、设置断点、监视变量等。
这个选项是用来配置工程的调试工具和下载工具的。可以选择使用仿真器、JTAG或SWD等不同的接口来连接目标板,并设置相应的参数。还可以选择使用Flash编程算法来下载程序到目标板的Flash中,或者使用外部工具来完成这个任务。
拿一个例程来测试吧。先不讲自己创建工程。
从MDK5.37开始,AC5(ARMCC)编译器不再默认安装,需要独立安装。默认的是Arm compiler 6。
最新版本的编译器编译之前的工程,可能会报错。
可以去官网下载版本5的:https://developer.arm.com/documentation/ka005198/latest
这里有Linux和win的,选择你的平台即可。
下载后解压,执行安装程序。
安装位置是MDK安装目录的ARM目录下,新建一个ARMCC目录:
按照下图设置:
然后再options for Target 里面选择这个编译器即可:
其他的设置,前面已经讲过了,根据芯片类型设置即可。
一些选项:
Translate(翻译):Translate指的是将源代码文件转换为汇编语言或机器代码的过程。它是编译的第一阶段,将高级语言代码转换为低级语言代码,以供后续处理。
Build(构建):Build是指将翻译后的汇编语言或机器代码与库文件、链接脚本等一起构建成可执行文件(如可执行程序、固件文件等)的过程。它是编译的第二个阶段,将生成的目标代码与其他必要的文件进行链接,并最终生成可执行文件。
Rebuild(重新构建):Rebuild指的是在进行编译之前先清除先前生成的目标文件和中间文件,然后重新执行整个Translate和Build的过程。这通常用于确保在编译过程中应用了最新的更改或修复。
Batch Build(批量构建):Batch Build是指一次性编译或构建多个项目或文件的过程。它允许你同时处理多个项目,以提高编译效率。通过批量构建,可以选择性地编译一组源代码文件,而不仅限于单个文件或单个项目。
Program Size: Code=664 RO-data=320 RW-data=0 ZI-data=1024
这是一个程序的大小报告,其中显示了不同类型的内存使用情况:
Code(代码):表示程序的可执行代码大小,通常以字节为单位。在这个例子中,代码大小为664字节。
RO-data(只读数据):表示程序中的只读数据的大小,例如常量、字符串等。在这个例子中,只读数据大小为320字节。
RW-data(读写数据):表示程序中的读写数据的大小,即在程序运行期间可以修改的数据。在这个例子中,读写数据大小为0字节,表示没有可修改的数据。
ZI-data(未初始化数据):表示程序中的未初始化数据的大小,即在程序运行期间将被初始化为零值的数据。在这个例子中,未初始化数据大小为1024字节。
这些信息对于了解程序的内存占用情况非常有用,可以帮助开发人员优化代码和内存使用,确保程序在目标设备上正常运行并合理利用内存资源。
程序下载有以下几种方式:
通常使用的是ST-Linke、J-Link或者串口下载。
下载的时候注意boot引脚的设置,前面文章也讲过:https://blog.csdn.net/weixin_43764974/article/details/131369682
ST-Link被人拿走了,改天再写吧。很简单的。
我把MDK5.38、ARMCC5.06 还有那个上传到阿里云盘了。
链接:https://www.aliyundrive.com/s/eGBDRUhMMFL
提取码:公众号回复:MDK
获取。
把 永 远 爱 你 写 进 诗 的 结 尾 ~