使用Keil5:项目配置详解

一、配置 Target 选项卡

右键点击工程中的Target 1 → 选择Options for Target,在弹出窗口中选择Target选项卡‌。配置界面见下图:

晶振频率设置

在Xtal(MHz)输入框中指定外部晶振频率,该数值需与实际硬件电路保持一致。此设置主要用于软件模拟调试时计算程序执行时间,若未正确配置可能影响UART波特率和定时器精度等外设功能。对于MDK5.35及以上版本,此选项可能显示为灰色不可用状态

操作系统设置

Operating System选项用于指定工程使用的实时操作系统。该配置项允许开发者选择Keil自带的RTX操作系统或保持不使用操作系统的状态。通常情况下,如果项目不需要操作系统支持,应保持默认的”None”选项。

系统视图文件设置

System Viewer File‌(系统视图文件)用于定义微控制器的内存映射寄存器和外设资源,调试时可直接通过图形化界面访问寄存器,而无需手动输入地址。通常选择系统自带的SVD文件(如*.SVD),无需手动配置‌。

编译器版本设置

‌编译器版本(ARM Compiler)‌:选择默认编译器版本(如Version 5)。

只读存储区配置

Read/Only Memory Areas‌(只读存储区)用于定义代码和常量数据在Flash中的存储地址及大小,指定程序代码(RO段)和常量数据(如const变量)的物理存储位置,确保链接器正确分配Flash空间。与Scatter文件联动,自动生成内存映射规则,影响最终生成的.hex或.bin文件布局。

配置方法:

  • ‌起始地址‌:通常设置为Flash的起始地址(如STM32F103的0x08000000)
  • ‌大小‌:需根据实际Flash容量填写(如STM32F103的64KB Flash对应0x00010000)‌
  • ‌与Scatter文件关系‌:修改后,Scatter文件中的LR_IROM1(加载域)会自动同步更新‌

读写存储区配置

Read/Write Memory Areas(读/写存储区)用于配置程序运行时的RAM存储空间,包括片内和片外RAM。它定义了程序执行过程中变量、堆栈和动态数据的存储位置。

如STM32F103R6微控制器的IRAM(内部RAM)起始地址为0x20000000,大小为6KB。

二、配置 Device 选项卡

右键点击工程中的Target 1 → 选择Options for Target,在弹出窗口中选择Device选项卡‌。配置界面见下图:

Device选项卡‌主要用单片机型号的选择。

三、配置 Output选项卡

右键点击工程中的Target 1 → 选择Options for Target,在弹出窗口中选择Output选项卡‌。配置界面见下图:

Output选项卡主要用于配置输出目录、可执行文件生成、是否生成静态库文件。

输出目录配置

通过“Select Folder”指定编译输出目录。

可执行文件生成

勾选‌Debug Information‌复选框,在编译时可生成用于调试的符号信息。ARM平台默认生成包含调试信息的ELF文件(通过–debug选项),支持符号表、行号映射等。

勾选‌Create HEX File‌复选框,可生成生成 HEX 文件。HEX 文件是一种十六进制格式的文件,它包含了可直接烧录到单片机等目标设备中的机器代码 。勾选 “Create HEX File” 选项后,在每次编译项目时,Keil5 会自动将编译生成的目标代码转换为 HEX 文件格式,并存储在我们指定的输出目录中

勾选‌Browse Information‌复选框,生成符号浏览信息(*.browse),这些信息会被集成到调试器中,以便在调试时提供更丰富的代码导航和符号查看功能‌。‌

四、配置 Listing选项卡

右键点击工程中的Target 1 → 选择Options for Target,在弹出窗口中选择Listing选项卡‌。配置界面见下图:

Listing选项卡‌主要用于控制编译过程中生成的中间文件(列表文件),其核心功能如下:

1. ‌生成编译过程文件

‌汇编列表文件(*.lst)‌:记录汇编代码与机器码的映射关系,便于调试时查看指令级细节‌

‌符号表文件(*.map)‌:显示全局变量、函数的内存地址分配及占用情况,用于分析内存使用‌

2. ‌调试辅助

‌源码与汇编对照‌:通过列表文件可快速定位代码与汇编指令的对应关系,优化关键代码段‌

‌错误诊断‌:编译错误时,列表文件能提供更详细的错误位置和上下文信息‌

3. ‌配置选项‌

‌输出路径‌:通过“Select Folder”指定列表文件的保存目录‌

‌文件类型选择‌:勾选需生成的列表文件类型(如汇编列表、符号表等)‌

五、配置 User选项卡

右键点击工程中的Target 1 → 选择Options for Target,在弹出窗口中选择User选项卡‌。配置界面见下图:

User选项卡主要用于在编译过程的不同阶段执行用户自定义的命令或脚本文件。

该选项卡允许你在以下三个关键时间点运行自定义程序:

  • ‌编译前执行‌:在编译C/C++文件前运行指定程序
  • ‌构建/重建前执行‌:在开始构建或重建项目前运行程序
  • ‌构建/重建后执行‌:在项目编译完成后执行程序

六、配置 C/C++选项卡

右键点击工程中的Target 1 → 选择Options for Target,在弹出窗口中选择C/C++选项卡‌。配置界面见下图:

C/C++ 选项卡C/C++选项卡是工程配置的核心部分,主要用于控制C/C++编译器的行为和优化策略,以下是作用及其配置方法:

1、‌预处理定义

通过Preprocessor Symbols添加宏定义(如STM32F10X_HD),相当于在代码中全局添加#define语句,常用于条件编译或硬件型号适配。

预处理器宏定义是在编译之前,由预处理器进行处理的一种文本替换机制 。在 C/C++ 选项卡的 “Define” 输入框中,我们可以定义各种宏 。这些宏可以是简单的常量定义,比如 “#define PI 3.14159”,将 PI 定义为一个表示圆周率的常量,在后续的代码中,只要出现 PI,预处理器就会在编译前将其替换为 3.14159 ;也可以是复杂的条件编译宏,比如 “#ifdef DEBUG”“#endif” 之间的代码块,只有在定义了 DEBUG 这个宏的情况下,这部分代码才会参与编译 。

2、‌代码生成优化

‌优化等级(Optimization)‌:从Level 0(无优化,便于调试)到Level 3(最高优化,适合发布)‌

‌内存模型(Memory Model)‌:针对8051平台,可选择SMALL(变量默认存片内RAM)、COMPACT(使用扩展RAM页)或LARGE(全扩展RAM)。

3、‌编译器控制

设置‌C或C++编译标准,如C99标准。‌

4、‌包含路径与依赖

‌包含路径(Include Paths)‌:添加头文件搜索路径,解决头文件找不到的问题。

在 C/C++ 选项卡的 “Include Paths” 输入框中,我们需要指定头文件所在的目录路径 。当编译器在编译代码时,遇到 “#include” 语句,它会按照我们设置的包含路径去查找对应的头文件 。

七、配置 Linker选项卡

右键点击工程中的Target 1 → 选择Options for Target,在弹出窗口中选择Linker选项卡‌。配置界面见下图:

Linker 选项卡主要用于控制链接过程,其中链接脚本起着核心作用 。链接脚本是一个文本文件,它以一种特定的语法描述了程序在内存中的布局,包括代码段、数据段、堆栈段等在内存中的位置和大小,以及各个目标文件之间的链接关系 。

在一般情况下,Keil5 会为我们提供一个默认的链接脚本 。这个默认链接脚本是基于常见的芯片架构和内存布局设计的,对于大多数常规项目来说,使用默认链接脚本就能够满足基本需求 。它会按照一定的规则,将编译生成的各个目标文件(.obj 文件)链接成一个可执行文件,合理地分配内存空间,确保程序的各个部分能够正确地运行和相互协作 。

例如,在一个基于 STM32F103 芯片的简单 LED 控制项目中,使用默认链接脚本就可以顺利地将包含 LED 控制代码的目标文件、启动文件等链接起来,生成一个完整的可执行程序,烧录到开发板上后能够正常控制 LED 的亮灭 。

链接器基本配置

Linker选项卡通常保持默认设置即可满足大部分项目需求。

其中需要特别关注”Use Memory Layout from Target Dialog”选项,勾选此选项后链接器会使用Target选项卡中设置的ROM和RAM地址范围。如果不使用分散加载文,链接器会根据Target选项卡中的ROM/RAM设置自动生成内存布局

分散加载文件配置

对于需要精细控制代码和数据存放位置的项目,可以在Linker选项卡中取消勾选”Use Memory Layout from Target Dialog”,然后手动指定分散加载文件(.sct文件)。分散加载文件用于指定不同代码段和数据段在存储器中的具体存放地址。

存储地址映射

Linker配置与Target选项卡中的ROM和RAM设置紧密对应。在Target选项卡中设置的ROM起始地址和大小决定了程序存储区域,而RAM设置则影响运行时的内存分配。当程序需要存储在片外存储器或使用外部SRAM时,必须在此进行相应配置。

其他相关设置

在Output选项卡中,选择生成可执行文件还是库文件会影响链接过程。如果选择输出库文件,则不会生成可执行程序。同时,Debug Information选项的勾选会影响调试信息的包含程度。

八、配置 Debug选项卡

右键点击工程中的Target 1 → 选择Options for Target,在弹出窗口中选择Debug选项卡‌。配置界面见下图:

Debug 选项卡主要用于设置调试相关的参数。

配置硬件调试器

在 Debug 选项卡的 “Use” 下拉列表中,可以选择不同的调试器类型,常见的有 J-Link、ST-Link、ULINK2 等 。选择调试器类型时,需要根据实际使用的调试工具来确定 。例如,如果我们使用的是 ST 公司官方的 STM32 开发板,并且配套使用的是 ST-Link 调试器,那么在 “Use” 下拉列表中就应该选择 “ST-Link Debugger” 。如果选择错误,比如在实际使用 J-Link 调试器的情况下,选择了 ST-Link Debugger,那么在调试过程中,Keil5 将无法与调试器建立正确的通信连接,会出现诸如 “无法识别调试器”“连接失败” 等错误提示,导致无法正常进行调试工作 。

选择好调试器类型后,还需要对其参数进行配置 。点击 “Settings” 按钮,会弹出一个详细的参数配置对话框 。在这个对话框中,“Interface” 选项用于选择调试接口,常见的有 JTAG 和 SWD 。对于大多数基于 Cortex-M 系列芯片的开发板,SWD 接口由于其使用引脚少、通信速度快等优点,成为了首选的调试接口 。比如,在使用 STM32F4 系列芯片的开发板时,通常会选择 SWD 接口进行调试 。“Clock Speed” 选项用于设置调试接口的时钟频率,一般情况下,使用默认值即可满足大多数项目的需求 。但在一些对调试速度有特殊要求的高速应用场景中,可能需要适当提高时钟频率,以加快调试数据的传输速度,提高调试效率 。

配置软件模拟器调试

勾选”use simulator”选项,将Dialog DLL参数设置为DARMSTM.DLL。

CPUDLL负责实现调试会话中CPU寄存器的访问、指令执行控制等底层操作‌,提供CPU指令集的仿真支持(如ARM Cortex-M的Thumb/ARM模式切换)‌,在软件仿真(Use Simulator)模式下模拟硬件行为,无需实际硬件即可调试代码。CPUDLL路径和参数由Keil设备数据库自动管理,手动更改可能导致调试失败。‌

Load Application at Startup‌配置项决定调试器是否在目标设备启动时自动加载并运行应用程序,调试会话开始时,自动将程序烧录到目标设备的Flash/RAM中,并立即执行。‌

发表评论

滚动至顶部
0

Subtotal