• 一、基本概念
  • 二、软件安装
  • 三、软件介绍
    • 3.1 Intro
    • 3.2 keil菜单栏
      • 3.21 file选项
      • 3.22 Edit 选项
      • 3.23 View选项
      • 3.24 Project选项
      • 3.25 Flash选项
      • 3.26 Debug选项
      • 3.27 Peripherals选项
      • 3.28 Tools选项
      • 3.29 SVCS选项
      • 3.2.10 Window选项
      • 3.2.11 Help选项
    • 3.3 keil工具栏
  • 四、设置与项目设置
    • 4.1 pack安装
    • 4.2 keil设置:configuration
    • 4.3 项目设置:options for target
      • 4.31 选择目标设备:Device
      • 4.32 Target
      • 4.33 Output
      • 4.44 Listing
      • 4.45 User
      • 4.46 C/C++
      • 4.47 Asm
      • 4.48 Linker
      • 4.49 Debug
      • 4.4.10 Utilities
  • 五、编译与下载
    • 5.1 Arm compiler 5 和 6
    • 5.2 编译
    • 5.3 下载

一、基本概念

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和调试器:这是一个基于窗口的软件开发平台,它结合了一个强大和现代的编辑器,一个项目管理器和制作工具。它集成了开发嵌入式应用程序所需的所有工具,包括C/C++编译器,宏汇编器,链接器/定位器,和一个HEX文件生成器。它还提供了一个最佳的基于Cortex-M的开发体验,并支持多种目标调试适配器和监视器调试解决方案。
  • Arm C/C++编译器:这是一个专为Arm架构设计的高性能编译器,它支持最新的C/C++标准和Arm指令集。它还提供了一些优化技术,如链接时优化(LTO),以提高代码的性能和效率。
  • 必要的中间件组件:这些是一些软件库,用于实现一些常见的嵌入式功能,如文件系统,图形用户界面,网络通信,USB主机和设备等。这些组件都基于Keil RTX5实时操作系统进行任务调度,并遵循CMSIS-Driver标准来接口到微控制器外设或外部组件。

编译器和中间件都集成在µVision IDE中,你可以在项目管理器中选择和配置它们。你也可以在Manage Run-Time Environment窗口中添加或删除中间件组件。

它有四个版本,分别是 免费版基础版增强版专业版,它们的功能和价格有所不同。

  • 免费版:支持最多32KB的代码大小,不支持中间件组件,不需要许可证。
  • 基础版:支持所有ARM Cortex-M处理器,支持部分中间件组件,需要许可证。
  • 增强版:支持所有ARM Cortex-M和Cortex-R处理器,支持所有中间件组件,需要许可证。
  • 专业版:支持所有ARM Cortex-M、Cortex-R和Cortex-A处理器,支持所有中间件组件,支持安全和信任区域开发,需要许可证。

许可证有一年和永久两种选择,还有锁定和共享两种类型。锁定许可证只能在一台计算机上使用,共享许可证可以在多台计算机上使用,但同一时间只能有一台计算机激活。下面是一年、共享许可证的价格:

  • 基础版:1845美元/年
  • 增强版:3690美元/年
  • 专业版:7390美元/年

CMSISCortex微控制器软件接口标准(Common Microcontroller Software Interface Standard)的缩写,它是一套工具,API,框架和工作流,用于简化微控制器软件的开发和重用,降低微控制器开发者的学习曲线,加速项目的构建和调试,从而缩短新应用的上市时间。CMSIS在GitHub上公开开发。

CMSIS为Cortex-M和入门级Cortex-A处理器提供了一致和高效的接口,它包括以下几个部分:

  • CMSIS-CORE:提供了对处理器和外设的简单软件接口,包括核心寄存器访问,中断管理,位带操作等。
  • CMSIS-RTOS:提供了一个实时操作系统的API,使得中间件和库组件可以使用一致的软件层。
  • CMSIS-DSP:提供了一个丰富的数字信号处理函数库,针对不同的Cortex-M处理器核进行了优化。
  • CMSIS-Driver:提供了一些微控制器家族的驱动接口,如串口,以太网,USB等。
  • CMSIS-Pack:定义了一个软件包的结构,包含了软件组件,设备描述,板级支持等信息。
  • CMSIS-SVD:提供了一种描述设备外设和寄存器的XML格式,使得可以在调试时查看外设的详细状态。
  • CMSIS-DAP:提供了一个标准化的接口到Cortex调试访问端口(DAP),使得可以使用USB或其他物理连接进行调试。
  • CMSIS-NN:提供了一个高效的神经网络内核集合,针对不同的Cortex-M处理器核进行了优化。

ULINK是一种调试探头,它可以连接你的PC的USB端口和你的目标系统,让你可以在目标硬件上编程和调试你的应用程序。ULINK支持多种处理器目标,包括Arm Cortex-M,Cortex-R,Cortex-A,8051等。ULINK可以和MDK一起使用,让你可以控制处理器,设置断点,读写内存,以全速运行处理器。ULINK有多个版本,如ULINK2,ULINKpro,ULINKplus等,它们有不同的功能和性能。

ULINK,JLINK和STLINK三种调试探头的一些特点:

调试探头厂商支持的平台支持的处理器支持的接口下载速度特殊功能
ULINKKeil仅KeilArm Cortex-M,Cortex-R,Cortex-A,8051等JTAG/SWD1MB/sFlash Breakpoints
JLINKSEGGERKeil,IAR,ADS等多个平台Arm Cortex-M,Cortex-R,Cortex-A,RISC-V,8051等多种架构和厂商的处理器JTAG/SWD/SPI4MB/sFlash Breakpoints,Real-Time Transfer,VCOM
STLINKSTKeil,IAR,Eclipse等多个平台STM32和STM8微控制器SWIM/JTAG/SWD25KB/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文件夹是指:

  • core文件夹:这个文件夹包含了keil MDK的核心功能,如µVision IDE和调试器,Arm C/C++编译器,以及一些必要的中间件组件。
  • pack文件夹:这个文件夹包含了一些软件包,每个软件包提供了一个特定的微控制器家族的资源,如CMSIS系统/启动代码,驱动程序,Flash算法等。这些软件包可以通过Pack Installer来安装或更新。后面再keil里面安装的芯片的pack都放在这里:

安装后,使用激活码激活,至于激活码是你自己去官方买,还是怎么样(crack),我不分享这些负能量的了。

以管理员身份打开keil,在file,license management里面填写激活码即可。

注意,这是最新版软件,你要是汉化什么的,注意替换的那个UV4是不是最新版,否则会出现一些错误哦。我的建议是用英文原版就行了。

三、软件介绍

3.1 Intro

本节介绍keil软件顶部几行的作用:

上面几行分别是:

  • 菜单栏:它包含了各种菜单,例如File、Edit、View、Project等,每个菜单下有一些子命令,可以执行不同的功能。
  • 工具栏:它包含了一些快捷按钮,可以直接执行一些常用的命令,例如New、Open、Save、Build、Debug等。工具栏有2行,可以按住最左边拖动位置。

3.2 keil菜单栏

菜单栏的很多选项都不常用,或者一般使用工具栏的快捷图标。

另外,在代码区域右键,也会有部分选项。

3.21 file选项

File菜单包含了以下功能:

  • New: 新建文件 Ctrl+N
  • Open: 打开文件 Ctrl+O
  • Close: 关闭文件 Ctrl+W
  • Save: 保存当前文件 Ctrl+S
  • Save As: 文件另存为
  • Save All: 保存所有(文件及工程设置)
  • Device DataBase:器件数据库(信息)
  • License Management:许可证管理
  • Print Setup: 打印设置
  • Print: 打印 Ctrl+P
  • Print Preview: 打印预览
  • Exit: 退出(关闭)软件

Device Database用于管理和存储各种微控制器(MCU)和其他嵌入式设备的信息。这个数据库包含了大量的设备规格、特性、寄存器定义以及其他相关信息。它提供了一个集中的地方,供开发人员查找和选择他们所使用的特定设备。

使用Device Database的主要好处如下:

  1. 设备信息查找:通过Device Database,开发人员可以方便地查找所需的设备。他们可以按照特定的厂商、系列、型号等来筛选设备,以找到符合他们项目需求的合适设备。

  2. 设备配置:Device Database还提供了设备配置的选项。开发人员可以选择他们所使用的设备,并对其进行各种配置,如时钟频率、外设模块的使能与配置等。这些配置选项可以帮助开发人员更轻松地初始化设备,并设置其特定的功能。

  3. 代码生成:Keil软件通常配备了一些代码生成工具,可以根据所选择的设备自动生成初始化代码和驱动程序。Device Database中的设备信息提供了必要的参数和寄存器定义,这些信息可以被代码生成工具使用,以生成与所选设备兼容的代码。

总之,Keil的Device Database是一个集中存储和管理嵌入式设备信息的地方,它可以帮助开发人员方便地查找、配置和生成与所选设备相对应的代码。这使得嵌入式开发过程更加高效和方便。

3.22 Edit 选项

Edit菜单包含以下子菜单:

  • Undo: 撤销编辑 Ctrl+Z
  • Redo: 恢复编辑 Ctrl+Y
  • Cut: 剪切 Ctrl+X
  • Copy: 复制 Ctrl+C
  • Paste: 粘贴 Ctrl+V
  • Navigate Backwards: 跳转到上一步
  • Navigate Forwards: 跳转到下一步
  • Insert/Remove Bookmark: 插入/移除书签
  • Go to Next Bookmark: 跳转到下一个书签
  • Go to Previous Bookmark: 跳转到上一个书签
  • Clear All Bookmarks: 清除所有标签
  • Find: 查找 Ctrl+F
  • Replace: 替换
  • Find in Files: 在文件中查找文本
  • Incremental Find: 逐个查找文本
  • OutLining: 提纲(如显示函数名称,隐藏函数体)
    • OutLining菜单包含以下子菜单:
      Show All Outlining: 启用并显示所有的折叠信息
      Hide All Outlining: 禁用并隐藏所有的折叠信息
      Expand All Definitions: 展开所有的函数块
      Collapse All Definitions: 折叠所有的函数块
      Collapse Current Block: 折叠光标所在的函数块
      Collapse Current Procedure: 折叠光标所在的函数
  • Advanced:(更多)先进功能
    • Advanced菜单包含以下子菜单:
      Go To Line: 跳转到指定行 Ctrl+G
      Go To Matching Brace: 跳转到匹配的括号 Ctrl+E
      Tabify Selection: 将选中的空格替换为制表符
      Untabify Selection: 将选中的制表符替换为空格
      Make Uppercase: 将选中的文本转为大写 Ctrl+Shift+U
      Make Lowercase: 将选中的文本转为小写 Ctrl+U
      Comment Selection: 将选中的行转为注释
      Uncomment Selection: 将注释的行转为文本
      Indent Selection: 增加选中行的缩进
      Unindent Selection: 减少选中行的缩进
      Indent Selection with Text…: 用指定的文本增加选中行的缩进
      Unindent Selection with Text…: 用指定的文本减少选中行的缩进
      Delete Trailing White Space: 删除选中行末尾的空格或制表符
      Delete Horizontal White Space: 删除选中行中的空格或制表符
      Cut Current Line: 剪切当前行 Ctrl+L
      Go To Definition of current Word: 转到当前字定义
      Go To Next Reference of current Word: 转到当前字下一个引用
      Go To Previous Reference of current Word: 转到当前字上一个引用
      Go To Declaration of current Word: 转到当前字申明
      Show All Reference of current Word: 显示当前字所有申明
      Refresh Source Browser View: 刷新所有浏览信息
      Toggle Text Editor/Configuration Wizard: 切换文本编辑器/配置向导
  • Configuration : 配置

Bookmark是一种用于在编辑器中标记代码位置的功能,它可以方便地在不同的代码段之间跳转和查看。Bookmark在编辑器的边缘显示为紫色的方块或圆圈,可以通过右键菜单或工具栏按钮来设置、删除或清除。Bookmark不会影响程序的运行。

3.23 View选项

View菜单是一个控制显示和隐藏各种窗口的菜单,它有以下子菜单:

  • Status Bar: 状态栏,显示一些基本信息,如当前行号、列号、时间等(屏幕最下方)。
  • Toolbars: 工具栏,显示一些常用的按钮,如新建、打开、保存、编译、调试等。
  • Project Window: 工程窗口,显示当前工程的文件结构和设置。
  • Books Window: 书籍窗口,显示一些参考文档和帮助文件。
  • Functions Window: 函数窗口,显示当前文件中的所有函数和变量。
  • Templates Window: 模板窗口,显示一些常用的代码片段和语法提示。
  • Source Browser Window: 源码浏览窗口,显示当前工程中的所有符号和定义。
  • Build Output Window: 编译信息输出窗口,显示编译过程中的信息和错误。
  • Error List Window: 错误列表窗口,显示编译过程中的错误和警告。

以上是在编辑模式下的View菜单,在调试模式下还有以下子菜单:

  • Command Window: 命令显示窗口,可以输入一些调试命令和表达式。
  • Disassembly Window: 反汇编窗口,显示当前程序的汇编代码和机器码。
  • Symbols Window: 模块窗口,显示当前程序的所有模块和符号。
  • Registers Window: 寄存器窗口,显示当前程序的所有寄存器的值和状态。
  • Call Stack Window: 被调用函数堆栈窗口,显示当前程序的函数调用栈。
  • Watch Windows: 查看(变量)窗口,可以查看和修改当前程序的变量和表达式的值。
  • Memory Windows: 内存窗口,可以查看和修改当前程序的内存内容。
  • Serial Windows: 串行UART窗口,可以查看和发送串行数据。
  • Analysis Windows: 逻辑分析仪窗口,可以查看当前程序的逻辑信号波形。
  • Trace: 跟踪窗口,可以查看当前程序的执行历史和性能分析。
  • System Viewer: 系统(外围IO,USART,TIM等)窗口,可以查看当前程序的系统外设的状态和设置。
  • Toolbox Window: 工具箱窗口,可以使用一些辅助工具,如计算器、ASCII表等。
  • Periodic Window Update: 窗口周期更新选择,可以设置调试过程中各个窗口的更新频率。

Books:当你选择某个芯片时,Books会显示相关的Datasheet等资料,官网英文原版

3.24 Project选项

Project菜单是一个用于管理工程的菜单,它有以下子菜单:

  • New μVision Project: 新建工程(单工程),可以选择目标芯片和工程路径。
  • New Multi-Project Workspace: 新建工作空间,可以同时管理多个工程。
  • Open Project: 打开工程,可以选择已有的工程文件。
  • Close Project: 关闭工程,可以保存或放弃修改。
  • Export: 导出(工程),可以将工程打包成zip文件或导出为其他格式。
  • Manage: 管理(工程),可以添加或删除工程文件或组件。
  • Select Device for Target: 选择工程目标,可以更改目标芯片或配置器件数据库。
  • Remove item: 移除目标,可以删除当前选中的目标或组件。
  • Options for Target: 工程目标选项配置,可以设置目标的设备、输出、编译器、链接器、调试器等参数。
  • Clean Targets: 清除工程,可以删除所有生成的文件和临时文件。
  • Build Target: 编译工程目标,可以编译当前选中的目标或组件。
  • Rebuild all Target files: 重新编译所有目标文件,可以重新编译整个工程。
  • Batch Build: 分批编译(多工程编译),可以选择多个目标进行批量编译。
  • Translate: 编译当前活动文件,可以编译当前编辑器中打开的文件。
  • Stop Build: 停止编译(正在编译时有效),可以中断编译过程。

3.25 Flash选项

Flash菜单是一个用于下载、擦除和配置目标芯片的Flash存储器的菜单,它只有在编辑模式下可以使用,它有以下子菜单:

  • Download: 下载程序,可以将编译好的程序烧写到目标芯片的Flash存储器中,快捷键是F8。
  • Erase: 擦除芯片Flash,可以将目标芯片的Flash存储器中的内容全部擦除,恢复为初始状态。
  • Configure Flash Tools: 配置Flash工具,可以打开目标对话框选项,设置Flash编程算法、地址范围、时钟频率等参数。

3.26 Debug选项

Debug菜单是一个用于调试和仿真程序的菜单,它有以下子菜单:

  • Start/Stop Debug Session: 开始或者停止调试操作,可以进入或退出调试模式,快捷键是Ctrl+F5。
  • Reset CPU: 复位CPU,可以让程序复位到起点,恢复到初始状态。
  • Run: 全速运行,可以让程序处于运行状态,直到遇到下一个断点或停止命令,快捷键是F5。
  • Stop: 停止运行,可以让正在运行的程序停止下来。
  • Step: 单步运行,可以每点一次按钮,程序运行一步(单步),遇到函数会跳进函数执行,快捷键是F11。
  • Step Over: 逐步运行,可以每点一次按钮,程序运行一行(单行),遇到函数跳过函数执行,快捷键是F10。
  • Step Out: 跳出运行,可以每点一次按钮,程序跳出当前函数执行,直到跳出最外面的函数(main函数),快捷键是Ctrl+F11。
  • Run to Cursor Line: 运行到光标行,可以将光标放在某一行,点击该按钮,程序全速运行,直到运行到光标的位置停止下来,快捷键是Ctrl+F10。
  • Show Next Statement: 显示正在执行的代码行,可以跳转到程序暂停(停止)所在行。
  • Breakpoints: 查看工程中所有的断点,可以添加、删除、启用、禁用或编辑断点。
  • Insert/Remove Breakpoint: 插入/移除断点,可以在当前的调试代码行插入或删除一个断点,快捷键是F9。
  • Enable/Disable Breakpoint: 启用/禁用断点,可以激活或失效当前代码行的断点,快捷键是Ctrl+F9。
  • Disable All Breakpoints: 禁用所有断点,可以保留所有断点,但都无效。
  • Kill All Breakpoints: 取消所有断点,可以删除工程中所有的断点,也叫杀掉所有断点,快捷键是Ctrl+Shift+F9。
  • OS Support: 系统支持(打开子菜单访问事件查看器和RTX任务和系统信息),可以查看实时操作系统的相关信息和事件。
  • Execution Profiling: 执行分析,可以查看程序执行的时间、频率、覆盖率等统计信息。
  • Memory Map: 内存映射,可以查看目标芯片的内存布局和使用情况。
  • Inline Assembly: 内联汇编,可以在C语言中嵌入汇编语句进行调试。
  • Function Editor: 函数编辑器,可以在调试过程中修改函数的内容并重新编译链接。
  • Debug Settings: 调试设置,可以配置调试器、仿真器、Flash编程等参数。

3.27 Peripherals选项

Peripherals菜单是一个用于查看和修改目标芯片的外设寄存器的菜单,它只有在调试模式下可以使用,它有以下子菜单:

  • System Viewer: 系统(外围IO、USART、TIM等)窗口,可以查看当前程序的系统外设的状态和设置。
  • Core Peripherals: 内核外设,可以查看当前程序的内核外设,如NVIC、SysTick、MPU等。

3.28 Tools选项

Tools菜单是一个用于配置和使用外部工具的菜单,它有以下子菜单:

  • Setup PC-Lint: 配置PC-Lint,可以设置PC-Lint的路径、参数、选项等。
  • Lint: PC-Lint运行在当前编辑器文件,可以检查当前文件的语法错误、风格问题、潜在的bug等。
  • Lint all C Source Files: 在您的项目中运行PC-Line C源文件,可以检查整个项目中的C源文件的质量和正确性。
  • Configure Merge Tool: 配置合并工具,可以设置合并工具的路径、参数、选项等,用于帮助迁移RTE软件组件文件的特定于应用程序的设置。
  • Customize Tools Menu: 自定义工具菜单,可以添加用户自定义的菜单选项,如调用其他软件或脚本等。

PC-Lint是一个用于C/C++代码静态分析的工具,它可以检查程序的语法错误、潜在的错误隐患、不合理的编程习惯等。它可以与keil等开发环境集成,提高代码的质量和正确性。

添加第三方工具,比如代码格式化:Keil代码一键对齐工具

3.29 SVCS选项

SVCS菜单是一个用于配置和使用软件版本控制系统的菜单,它可以与git、svn等工具集成,实现代码的管理和协作。它有以下子菜单:

  • Configure Software Version Control: 配置软件版本控制系统,可以选择使用keil自带的模板或者自定义模板,设置版本控制工具的路径、参数、选项等。
  • GIT: 如果选择了git模板,会出现一系列git操作的子菜单,如查看状态、添加文件、提交版本、发布版本等,相当于在keil中执行git命令。
  • SVN: 如果选择了svn模板,会出现一系列svn操作的子菜单,如更新、提交、查看差异、还原等,相当于在keil中执行svn命令。

3.2.10 Window选项

Window菜单是一个用于管理和调整编辑器窗口的菜单,它有以下子菜单:

  • Reset View to Defaults: 重置窗口布局,恢复到keil默认的外观和位置。
  • Split: 活动编辑器文件分割成两个水平或垂直窗格,可以同时查看同一个文件的不同部分。
  • Close All: 关闭所有打开的编辑器文件,释放内存空间。
  • Windows: 显示当前打开的所有编辑器文件的列表,可以快速切换或关闭某个文件。

3.2.11 Help选项

Help菜单是一个用于提供帮助文档和支持信息的菜单,它有以下子菜单:

  • µVision Help: 打开keil的帮助文档,可以查看软件的使用说明、教程、参考手册等。
  • Open Books Window: 打开帮助书籍窗口,可以查看keil支持的芯片、编译器、调试器等的相关文档。
  • Simulated Peripherals for Target: 查看目标芯片的外设仿真信息,可以了解哪些外设可以在keil中进行仿真调试。
  • Contact Support: 联系keil的技术支持,可以通过网页或邮件提交问题或反馈意见。
  • About µVision: 查看keil的版本信息,包括软件名称、版本号、版权声明等。

3.3 keil工具栏

工具栏中大多数选项都是常用的。

keil的工具栏分为两行,第一行是文件工具栏,第二行是编译工具栏(实际布局不一定是这样,知道各个选项什么作用即可)。

它们的功能如下:

  • 文件工具栏:提供了一些常用的文件操作,如新建、打开、保存、打印等。它们的图标和快捷键与大多数软件相同。
    • New:新建一个文件或工程,快捷键是Ctrl+N。
    • Open:打开一个已有的文件或工程,快捷键是Ctrl+O。
    • Save:保存当前编辑的文件或工程,快捷键是Ctrl+S。
    • Save All:保存所有打开的文件或工程,快捷键是Ctrl+Shift+S。
    • Print:打印当前编辑的文件,快捷键是Ctrl+P。
    • Cut:剪切选中的文本或对象,快捷键是Ctrl+X。
    • Copy:复制选中的文本或对象,快捷键是Ctrl+C。
    • Paste:粘贴剪切板中的文本或对象,快捷键是Ctrl+V。
    • Undo:撤销上一次操作,快捷键是Ctrl+Z。
    • Redo:重做上一次撤销的操作,快捷键是Ctrl+Y。
  • 编译工具栏:提供了一些常用的编译和调试操作,如编译、下载、开始/停止调试、运行、单步调试等。它们的图标和快捷键与keil的菜单栏相对应。
    • Build Target:编译当前选中的目标或组件,快捷键是F7。
    • Rebuild all Target files:重新编译所有目标文件,快捷键是F6。
    • Start/Stop Debug Session:开始或停止调试操作,可以进入或退出调试模式,快捷键是Ctrl+F5。
    • Run:全速运行程序,直到遇到下一个断点或停止命令,快捷键是F5。
    • Stop:停止运行程序,快捷键是Shift+F5。
    • Step:单步运行程序,遇到函数会跳进函数执行,快捷键是F11。
    • Step Over:逐步运行程序,遇到函数跳过函数执行,快捷键是F10。
    • Step Out:跳出运行程序,直到跳出当前函数执行,快捷键是Ctrl+F11。
    • Run to Cursor Line:运行到光标行程序,直到运行到光标所在位置停止下来,快捷键是Ctrl+F10。
    • Show Next Statement:显示正在执行的代码行,可以跳转到程序暂停所在行。
    • Insert/Remove Breakpoint:插入或删除当前代码行的断点,快捷键是F9。
    • Enable/Disable Breakpoint:启用或禁用当前代码行的断点,快捷键是Ctrl+F9。

此外,还可能有一些其他的选项,比如查找替换、项目设置、设置等等。

四、设置与项目设置

4.1 pack安装

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按钮,开始下载和安装这个软件包。

  • 等待安装完成,直到Install按钮变成Up to date为止。

4.2 keil设置:configuration

Edit菜单下Configuration选项或者工具栏的扳手就是keil设置。

keil的configuration是指IDE的一些设置,包括编辑器、颜色和字体、用户关键字、文本补全、快捷键和工具栏等。这些设置可以影响您的编程体验和效率。

在configuration中,有六个选项卡,分别是:

  • Editor:编辑器的一些通用设置,如自动缩进、虚拟空间、显示空白、高亮当前行等。
  • Colors & Fonts:颜色和字体的设置,如语法颜色、打印颜色、右边距等。
  • User KeyWords:用户关键字的设置,如添加自定义关键字、设置关键字颜色等。
  • Text Completion:文本补全的设置,如启用代码补全列表、设置触发字符等。
  • Shortcuts:快捷键的设置,如为常用功能分配快捷键等。
  • Toolbars:工具栏的设置,如显示或隐藏工具栏、自定义工具栏按钮等。

4.3 项目设置:options for target

您好,这是Bing。我可以帮您了解keil的options for target的所有选项。

options for target是指工程目标选项,通常用于设置编译器和链接器的选项,如设备类型、晶振频率、内存分配、输出格式、调试器类型等。这些选项可以影响编译结果和调试过程。

可以通过以下方法打开options for target:

  • 在左侧项目栏中单击鼠标右键,点击Options for Target ’xxx’选项
  • 点击工具栏的Options for Target按钮
  • 从菜单中选择Project -> Options for Target

这个对话框有十个标签页,分别是:

  • Device:选择目标设备,可以通过输入或列表查找。
  • Target:设置目标的晶振频率、操作系统、系统预览文件、编译器、交叉模块优化、微库、ROM和RAM的地址空间等。
  • Output:设置输出的路径、文件名、格式,可以选择输出可执行文件或库文件,可以选择输出调试信息、HEX文件、浏览信息等。
  • Listing:设置输出的列表文件,可以选择输出汇编列表、C编译列表、链接列表等,可以设置页面的宽度和长度,可以选择输出MAP文件的详细信息等。
  • User:设置用户自定义的程序,可以在编辑、编译之前或之后运行用户程序,可以设置运行条件,可以选择编译完成后发出声音或启动调试等。
  • Debug:设置调试器的类型和配置,可以选择仿真器或硬件调试器,可以设置端口、速度、复位模式等。
  • Utilities:设置工具的类型和配置,可以选择编程器或ULINK适配器,可以设置下载模式、驱动程序等。
  • C/C++:设置C/C++编译器的选项,可以选择优化级别、语言模式、预处理器定义等,可以启用C99模式、时间优化、函数ELF段等。
  • Asm:设置汇编器的选项,可以选择包含路径、预处理器定义等,可以启用大小写敏感、宏扩展等。
  • Linker:设置链接器的选项,可以选择包含路径、库路径等,可以启用函数重入性检查、缓冲区安全检查等。

4.31 选择目标设备:Device

先安装pack,然后就可以根据你的芯片型号选择了。

4.32 Target

Target选项是用来设置目标的一些基本信息,如晶振频率、操作系统、编译器、内存等。

Target选项有以下几个部分:

  • Xtal (MHz):这里设置的是目标的晶振频率,一般要和硬件电路上的晶振一致。这个值主要用于仿真调试,如果使用硬件调试,可以不用管这个值。(在MDK5.35以后的版本中,官方禁用了这个选项,因为新的Cortex-M设备不提供外设仿真驱动程序)
  • Use:这里可以选择使用Keil自带的RTX操作系统或者自定义的系统预览文件。一般我们不使用操作系统,所以这里不勾选。
  • Code Generation:这里可以选择生成代码所使用的编译器,一般是ARMCC或者GCC。还可以选择是否使用交叉模块优化和微库。交叉模块优化可以提高代码的执行效率,但会增加编译的时间。微库是一个精简的C运行时库,可以减少代码的大小,但不完全兼容ANSI标准。微库常用于实现printf函数。
  • IROM1 / IROM2:这里可以设置程序代码存储在片内或者片外的ROM(Flash)的地址空间。一般我们只使用IROM1,设置起始地址和大小,要根据目标芯片的规格来确定。如果程序太大,会提示ROM空间不足。
  • IRAM1 / IRAM2:这里可以设置程序数据存储在片内或者片外的RAM的地址空间。一般我们只使用IRAM1,设置起始地址和大小,要根据目标芯片的规格来确定。如果数据太多,会提示RAM空间不足。

可以点击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有以下一些优点和缺点:

  • 优点:使用microLIB可以减少代码的大小,提高编译的速度,简化嵌入式开发的操作,比如使用printf函数时,就会从串口1输出字符串。
  • 缺点:使用microLIB会降低某些函数的执行效率,不支持浮点运算,不支持C++,不支持文件I/O或宽字符支持,与标准C库有很多区别,可能导致一些兼容性或适配性的问题。

是否使用use microLIB取决于工程需求和芯片特性,一般来说,如果您需要优化代码空间,并且不需要浮点运算或C++等功能,可以选择使用use microLIB。

如果您需要使用浮点运算或C++等功能,并且不在乎代码空间的大小,可以选择不使用use microLIB。

如果选择使用use microLIB,需要在编译器的选项中勾选use microLIB,并且在源文件中添加一些代码来避免使用半主机模式和重定向输入输出设备。

如果选择不使用use microLIB,那么您需要在编译器的选项中取消勾选use microLIB,并且在源文件中不要使用标准C库中的一些函数,比如printf等。

4.33 Output

Output选项是用来设置输出的路径、文件名、格式等,可以选择输出可执行文件或库文件,可以选择输出调试信息、HEX文件、浏览信息等。

Output选项有以下几个部分:

  • Folder:这里设置的是输出文件保存的文件夹,默认是Objects文件夹,也可以自定义其他文件夹。
  • Name:这里设置的是输出文件的名称,默认是工程名,您也可以自定义其他名称。
  • Create Executable:这里可以选择是否输出可执行文件,如果勾选,会生成一个后缀为.axf的文件,这个文件包含了代码、数据和调试信息,可以用于调试或下载到目标设备。如果不勾选,不会生成可执行文件,只会生成目标文件(.o)和库文件(.a)。
  • Debug Information:这里可以选择是否输出调试信息,如果勾选,会在可执行文件中包含调试信息,可以用于调试器或仿真器。如果不勾选,不会输出调试信息,只会输出代码和数据。
  • Create HEX File:这里可以选择是否输出HEX文件,如果勾选,会生成一个后缀为.hex的文件,这个文件是可执行文件的十六进制格式,可以用于一些编程器或烧录器。如果不勾选,不会输出HEX文件。
  • Browse Information:这里可以选择是否输出浏览信息,如果勾选,会生成一个后缀为.bro的文件,这个文件包含了源代码的符号表和交叉引用信息,可以用于代码浏览或跳转。如果不勾选,不会输出浏览信息。
  • Create Library:这里可以选择是否输出库文件,如果勾选,会生成一个后缀为.lib的文件,这个文件是一些目标文件(.o)的集合,可以用于其他工程引用。如果不勾选,不会输出库文件。


hex文件和axf文件都是可以下载到STM32芯片中运行的文件,它们都包含了编译器生成的机器码,但是它们也有一些区别。

  • hex文件:是一种使用十六进制符号表示的代码记录,记录了代码应该存储到FLASH的哪个地址,下载器可以根据这些信息辅助下载。
  • axf文件:是编译默认生成的文件,不仅包含代码数据,而且还包含调试信息,可以用于调试器或仿真器。

一般来说,如果只需要下载程序到芯片中运行,不需要进行调试或仿真,可以选择下载hex文件,因为它比axf文件更小更简洁。

如果需要进行调试或仿真,可以选择下载axf文件,因为它包含了更多的信息,可以方便查看源代码和汇编代码之间的对应关系,断点设置等。

4.44 Listing

Listing选项是用来设置输出的列表文件,可以选择输出汇编列表、C编译列表、链接列表等,可以设置页面的宽度和长度,可以选择输出MAP文件的详细信息等。

Listing选项有以下几个部分:

  • Page Width:这里设置的是列表文件的页面宽度,单位是字符数,默认是80个字符,也可以自定义其他值。
  • Page Length:这里设置的是列表文件的页面长度,单位是行数,默认是60行,也可以自定义其他值。
  • Create Assembly Listing:这里可以选择是否输出汇编列表,如果勾选,会生成一个后缀为.lst的文件,这个文件包含了源代码、汇编代码、机器码和地址等信息,可以用于查看代码的汇编过程。如果不勾选,不会输出汇编列表。
  • Create C Listing:这里可以选择是否输出C编译列表,如果勾选,会生成一个后缀为.cod的文件,这个文件包含了源代码、汇编代码、机器码和地址等信息,以及一些调试信息和符号表等信息,可以用于查看代码的编译过程。如果不勾选,不会输出C编译列表。
  • Create Linker Listing:这里可以选择是否输出链接列表,如果勾选,会生成一个后缀为.m51的文件,这个文件包含了链接器的配置信息、内存布局信息、模块信息、符号信息等信息,可以用于查看代码的链接过程。如果不勾选,不会输出链接列表。
  • Detailed MAP of Publics:这里可以选择是否输出MAP文件的详细信息,如果勾选,在生成的后缀为.map的文件中会包含公共符号(Publics)的详细信息,如地址、大小、模块等。如果不勾选,在MAP文件中只会包含公共符号(Publics)的总数。

4.45 User

User选项是用来设置用户自定义的命令或工具,可以在编译、链接、烧录等过程中执行一些额外的操作,比如生成bin文件、转换格式、校验文件等。

User选项有以下几个部分:

  • Run #1:这里可以设置第一个用户自定义的命令或工具,可以选择在编译前、编译后、链接前、链接后、烧录前、烧录后等时机执行,也可以选择是否在出错时停止执行。您可以输入命令行或者浏览选择可执行文件,并且可以添加参数和工作目录。
  • Run #2:这里可以设置第二个用户自定义的命令或工具,和Run #1类似,只是执行顺序在Run #1之后。

4.46 C/C++

C/C++选项是用来设置C/C++编译器的一些参数,可以选择编译器的版本、优化级别、语言标准、警告级别等,可以定义一些宏、包含路径、条件编译等,可以选择一些扩展功能、目标选项、杂项选项等。

C/C++选项有以下几个部分:

  • Optimize:这里可以设置编译器的优化级别,从0到3,0表示不优化,3表示最高优化,优化的目标是提高代码的执行速度或者减少代码的大小。也可以选择一些优化选项,如去除未引用的段、去除未引用的函数、去除未引用的变量等。
  • Language:这里可以设置编译器的版本和语言标准,比如ARMCC或者GCC,C99或者C11等。也可以选择一些语言选项,如允许嵌套注释、允许匿名结构体和联合体、允许非常量初始值等。
  • Warnings:这里可以设置编译器的警告级别,从0到4,0表示不显示警告,4表示显示所有警告。也可以选择一些警告选项,如把警告当作错误、显示扩展警告、显示未使用变量的警告等。
  • Preprocessor:这里可以设置编译器的预处理器,可以定义一些宏(Macro),比如USE_HAL_DRIVER等,可以指定一些包含路径(Include Paths),比如工程目录或者库目录等,可以选择一些条件编译(Assemble/Compile/Exclude),比如只编译某些文件或者排除某些文件等。
  • Include Paths:用来指定编译器在查找头文件时要搜索的路径。可以添加多个路径,用分号分隔,也可以使用相对路径或者绝对路径。如果使用了相对路径,那么编译器会以工程文件所在的目录为基准来查找头文件。
  • Misc Controls:这里可以设置编译器的一些扩展功能、目标选项和杂项选项,比如使用微库、使用浮点硬件、使用Thumb指令集等。您可以输入命令行或者浏览选择可执行文件,并且可以添加参数和工作目录。

Preprocessor这里可以填写一些预处理器的设置,比如宏定义、包含路径、条件编译等。

例如,如果使用了STM32的HAL库,需要在宏定义中添加以下内容(逗号隔开):

  • USE_HAL_DRIVER
  • STM32F103xB

这样,编译器就会根据这些宏来选择合适的头文件和源文件,以及配置一些HAL库的参数。

如果使用了STM32的标准外设库,那需要在宏定义中添加以下内容:

  • USE_STDPERIPH_DRIVER
  • STM32F10X_MD

这样,编译器就会根据这些宏来选择合适的头文件和源文件,以及配置一些标准外设库的参数。

如果使用了一些第三方的库或者模块,需要在包含路径(Include Paths)中添加相应的路径,比如:

  • …\Lib\LCD
  • …\Lib\USB

这样,编译器就会在这些路径下查找头文件,如果找到了匹配的头文件,就会将其包含到源文件中。

如果需要对一些文件进行条件编译,可以在条件编译(Assemble/Compile/Exclude)中添加相应的设置,比如:

  • main.c (Always Compile)
  • lcd.c (Compile if LCD_ENABLE)
  • usb.c (Exclude from Target)

4.47 Asm

汇编相关。

4.48 Linker

Linker选项是指链接器的设置,可以用来配置链接过程中的相关参数,例如内存布局、目标文件格式、链接脚本等。

有以下几个部分:

  • Use Memory Layout from Target Dialog:这里可以选择是否使用Target选项卡中设置的ROM和RAM地址作为内存布局。如果勾选了这个选项,链接器会根据Target中的地址配置生成一个默认的链接脚本文件。
  • Scatter File:这里可以选择是否使用自定义的链接脚本文件(.sct)来指定内存布局。如果勾选了这个选项,需要指定一个有效的.sct文件路径。
  • Misc Controls:这里可以输入一些额外的链接器控制选项,例如指定输出文件格式、生成调试信息、优化代码等。
  • Object File:这里可以选择生成的目标文件的格式,例如ELF、OMF等。
  • Listing File:这里可以选择是否生成链接列表文件,以及列表文件的输出路径和格式。

4.49 Debug

Debug选项是指调试器的设置,可以用来配置调试过程中的相关参数,例如选择调试工具、设置断点、监视变量等。

  • Use Simulator:这里可以选择使用模拟器来进行仿真调试,不需要连接真实的硬件设备。
  • Use ULINK2/ME Cortex Debugger:这里可以选择使用ULINK2/ME调试适配器来进行硬件调试,需要连接目标板和电脑。
  • Use ST-Link Debugger:这里可以选择使用ST-Link调试适配器来进行硬件调试,需要连接目标板和电脑。
  • Use J-Link/J-Trace Cortex:这里可以选择使用J-Link/J-Trace调试适配器来进行硬件调试,需要连接目标板和电脑。
  • Settings:这里可以进入不同调试工具的设置界面,进行更详细的配置,例如选择目标处理器、设置下载模式、设置断点行为等。¹
  • Run to main():这里可以选择是否在开始调试时自动运行到main()函数处停止。

4.4.10 Utilities

这个选项是用来配置工程的调试工具和下载工具的。可以选择使用仿真器、JTAG或SWD等不同的接口来连接目标板,并设置相应的参数。还可以选择使用Flash编程算法来下载程序到目标板的Flash中,或者使用外部工具来完成这个任务。

五、编译与下载

拿一个例程来测试吧。先不讲自己创建工程。

5.1 Arm compiler 5 和 6

从MDK5.37开始,AC5(ARMCC)编译器不再默认安装,需要独立安装。默认的是Arm compiler 6。

最新版本的编译器编译之前的工程,可能会报错。

可以去官网下载版本5的:https://developer.arm.com/documentation/ka005198/latest

这里有Linux和win的,选择你的平台即可。

下载后解压,执行安装程序。

安装位置是MDK安装目录的ARM目录下,新建一个ARMCC目录:

按照下图设置:

然后再options for Target 里面选择这个编译器即可:

5.2 编译

其他的设置,前面已经讲过了,根据芯片类型设置即可。

一些选项:

  1. Translate(翻译):Translate指的是将源代码文件转换为汇编语言或机器代码的过程。它是编译的第一阶段,将高级语言代码转换为低级语言代码,以供后续处理。

  2. Build(构建):Build是指将翻译后的汇编语言或机器代码与库文件、链接脚本等一起构建成可执行文件(如可执行程序、固件文件等)的过程。它是编译的第二个阶段,将生成的目标代码与其他必要的文件进行链接,并最终生成可执行文件。

  3. Rebuild(重新构建):Rebuild指的是在进行编译之前先清除先前生成的目标文件和中间文件,然后重新执行整个Translate和Build的过程。这通常用于确保在编译过程中应用了最新的更改或修复。

  4. 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字节。

这些信息对于了解程序的内存占用情况非常有用,可以帮助开发人员优化代码和内存使用,确保程序在目标设备上正常运行并合理利用内存资源。

5.3 下载

程序下载有以下几种方式:

  • 串口下载:需要使用USB转TTL下载器(如CH340)和STM ISP下载器软件,将下载器的TXD、RXD、GND与开发板的RXD、TXD、GND连接,设置好BOOT0和BOOT1的状态,选择要下载的hex文件,然后开始编程。
  • ST-LINK V2下载:需要使用ST-LINK V2仿真器和Keil软件,将仿真器的SWDIO、GND、SWCLK、3.3V接到开发板的对应引脚上,在Keil软件中选择ST-LINK Debugger作为调试工具,设置好Flash Download选项,选择要下载的hex文件,然后开始编译和下载。
  • STM32 ST-LINK Utility下载:需要使用ST-LINK V2仿真器和STM32 ST-LINK Utility软件,将仿真器的SWDIO、GND、SWCLK、3.3V接到开发板的对应引脚上,在软件中连接设备,选择要下载的hex文件,然后开始编程。
  • 外部编程器:除了ST-Link以外,还有一些第三方厂商提供的外部编程器(如J-Link、ULINK等),它们支持与STM32芯片进行调试和编程。这些外部编程器通常提供更多的功能和灵活性,并与多种开发环境兼容。
  • 等等。

通常使用的是ST-Linke、J-Link或者串口下载。

下载的时候注意boot引脚的设置,前面文章也讲过:https://blog.csdn.net/weixin_43764974/article/details/131369682

ST-Link被人拿走了,改天再写吧。很简单的。


~