杰瑞科技汇

Keil for ARM教程,如何从零开始快速上手?

目录

  1. 第一部分:准备工作

    • 1 什么是 Keil MDK?
    • 2 为什么选择 Keil MDK?
    • 3 硬件和软件需求
    • 4 下载与安装 Keil MDK
    • 5 安装设备包
    • 6 添加/注册 MDK-Lite (免费版)
  2. 第二部分:第一个项目 - 点亮一个 LED (Blinky)

    • 1 创建新项目
    • 2 选择 CPU 型号
    • 3 创建源代码文件
    • 4 编写简单的 C 代码
    • 5 添加文件到项目
    • 6 配置项目选项
    • 7 编译项目
    • 8 下载程序到开发板
  3. 第三部分:深入理解 Keil 界面与核心功能

    • 1 Keil µVision 界面布局详解
    • 2 使用调试器 - 核心功能
    • 3 断点设置与使用
    • 4 变量监视与内存查看
    • 5 外设寄存器查看
  4. 第四部分:高级技巧与最佳实践

    • 1 使用 CMSIS-DAP / J-Link / ST-Link 等调试器
    • 2 配置目标选项
    • 3 使用 printf 重定向到串口
    • 4 代码分块与优化
    • 5 版本控制集成
  5. 第五部分:常见问题与资源


第一部分:准备工作

1 什么是 Keil MDK?

Keil MDK (Microcontroller Development Kit) 是德国 Keil 公司(现为 ARM 公司的一部分)推出的一款专门用于基于 ARM Cortex-M、ARM7/9/Cortex-R 等内核微控制器的集成开发环境,它将代码编辑器、编译器、链接器、调试器和项目管理工具无缝地集成在一起,极大地简化了嵌入式软件的开发流程。

2 为什么选择 Keil MDK?

  • 一站式解决方案:从编写代码到调试烧录,所有功能集成在一个软件中。
  • 强大的编译器:ARMCC/ARMCLANG 编译器性能优异,代码密度和执行效率高。
  • 完善的调试功能:支持实时调试、断点、变量监视、内存查看、外设寄存器仿真等。
  • 广泛的设备支持:支持几乎所有主流厂商(如 ST、NXP、TI、Microchip 等)的 ARM 芯片。
  • 丰富的中间件:集成了 RTOS(如 Keil RTX5)、文件系统、USB/网络协议栈等。
  • 庞大的用户社区和文档:学习资源非常丰富,遇到问题容易找到解决方案。

3 硬件和软件需求

  • 硬件
    • 一块 ARM 开发板(STM32 Nucleo/Discovery, LPCXpresso, ESP32-C3 开发板等)。
    • 一根 USB 连接线(用于供电、下载程序和调试)。
    • (可选)一个独立的调试器(如 J-Link, ST-Link V2/V3,但很多开发板已板载)。
  • 软件
    • Windows 操作系统 (7/8/10/11,64位推荐)。
    • Keil MDK 安装包。
    • 对应开发板的 设备包

4 下载与安装 Keil MDK

  1. 访问官网:打开浏览器,访问 ARM Keil 官方网站
  2. 下载 MDK:点击 "Downloads" -> "MDK" 找到最新版本的 MDK (MDK536)。
  3. 注册账号:下载前需要注册一个免费 ARM 账号。
  4. 安装:下载完成后,运行安装程序 mdk536.exe,按照安装向导的提示进行安装,一路点击 "Next" 即可,建议保持默认安装路径(如 C:\Keil_v5)。

5 安装设备包

设备包包含了对应芯片的头文件、启动文件、Flash 算法等,是使用 Keil 开发特定芯片的必要组件。

  • 在线安装(推荐)
    1. 打开 Keil µVision。
    2. 点击菜单栏的 Pack Installer (图标像一个电路板)。
    3. 在弹出的窗口中,左侧选择 Devices,在右侧的搜索框中输入你的芯片型号(STM32F103C8)。
    4. 找到对应的设备包,点击右侧的 号,然后点击 Install
    5. 等待安装完成。

Keil for ARM教程,如何从零开始快速上手?-图1

  • 离线安装 如果你的开发板厂商提供了离线的设备包 .pdsc 文件,可以在 Pack Installer 中点击 Install from local file... 来安装。

6 添加/注册 MDK-Lite (免费版)

Keil MDK 有免费版和商业版,免费版(MDK-Lite)对代码大小有限制(通常为 32KB),但对于学习和开发小型项目完全足够。

  1. 打开 Keil µVision。
  2. 点击菜单 Help -> About µVision...
  3. 在弹出的窗口中,点击 Enter License
  4. 如果你已有 License,可以输入注册码,如果没有,可以点击 Get Free Evaluation License 申请一个免费的 32KB 限制的 License。

第二部分:第一个项目 - 点亮一个 LED

本节以 STM32F103C8T6 (Blue Pill) 开发板为例,演示如何创建项目并点亮一个 LED。

1 创建新项目

  1. 打开 Keil µVision。
  2. 点击菜单栏 Project -> New µVision Project...
  3. 选择一个文件夹用于存放你的项目(D:\Keil_Projects\Blinky),输入项目名 Blinky,点击 保存

2 选择 CPU 型号

  1. 保存后,会弹出 Select Device for Target 'Target 1' 窗口。
  2. 在左侧的厂商列表中找到并展开 STMicroelectronics
  3. 在右侧的设备列表中找到 STM32F1 Series,然后选择 STM32F103C
  4. 确认选中 STM32F103C8T6,点击 OK

Keil for ARM教程,如何从零开始快速上手?-图2

  1. 接下来会弹出一个 Manage Run-Time Environment 窗口,这里让你选择需要的组件,对于第一个项目,我们保持默认,直接点击 OK,Keil 会自动为你添加启动文件和基本的 CMSIS 文件。

3 创建源代码文件

  1. 在项目窗口左侧的 Project 标签页中,右键点击 Source Group 1
  2. 选择 Add New Item to Group 'Source Group 1'...
  3. C/C++ 文件夹下,选择 C File (.c),输入文件名 main.c,点击 Add
  4. 用同样的方法再添加一个 Assembly File (.s),命名为 startup_stm32f10x_md.s (如果你的芯片是中等容量的,文件名可能略有不同)。

4 编写简单的 C 代码

双击 main.c 打开它,删除默认内容,然后输入以下代码:

#include "stm32f10x.h" // 包含 STM32F10x 的头文件
// 简单的延时函数
void delay(volatile uint32_t count) {
    while(count--);
}
int main(void) {
    // 1. 使能 GPIOC 的时钟
    RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; // 使能 GPIOC 端口时钟
    // 2. 配置 PC13 引脚为推挽输出
    // GPIOC_CRH 的第 20-27 位控制 PC13
    // 清除原来的设置 (4 bits)
    GPIOC->CRH &= ~(0x0F << (4 * (13 - 8))); 
    // 设置为推挽输出,最大速度 50MHz (0011)
    GPIOC->CRH |= (0x03 << (4 * (13 - 8)));
    while (1) {
        // 3. 点亮 LED (PC13 输出低电平)
        GPIOC->BSRR = GPIO_BSRR_BR13; // 将 PC13 置为 0
        delay(500000);
        // 4. 熄灭 LED (PC13 输出高电平)
        GPIOC->BSRR = GPIO_BSRR_BS13; // 将 PC13 置为 1
        delay(500000);
    }
}

代码解释

  • #include "stm32f10x.h":包含芯片寄存器定义的头文件。
  • RCC->APB2ENR |= ...:在 STM32 中,使用任何外设(如 GPIO)前,必须先为其使能时钟。
  • GPIOC->CRH &= ...GPIOC->CRH |= ...:配置 GPIO 端口的引脚模式,PC13 在 CRH 寄存器中,我们将其设置为推挽输出模式。
  • GPIOC->BSRR = ...:通过位设置/复位寄存器来控制引脚的电平。BS13 位设置为 1,会使 PC13 输出高电平;BR13 位设置为 1,会使 PC13 输出低电平。

5 添加文件到项目

  • 如果你在创建文件时没有自动添加,可以在 Source Group 1 上右键,选择 Add Existing Files to Group...,然后将 main.cstartup_stm32f10x_md.s 添加进来。
  • startup_stm32f10x_md.s 这个文件是 Keil 在你选择芯片时自动添加的,通常在 Project 窗口的 Startup 文件夹下,如果没看到,检查一下是否添加到了正确的 Group。

6 配置项目选项

  1. Project 窗口中,右键点击 Target 1,选择 Options for Target 'Target 1'... (或按快捷键 Alt+F7)。

  2. Target 选项卡

    • Use Microcontroller: 确认芯片型号正确。
    • Crystal: 晶振频率,通常为 8MHz 或 12MHz,根据你的开发板设置。
  3. Output 选项卡

    • Create Executable: 确保 Create HEX File 被勾选,这个 HEX 文件是最终要烧录到芯片里的文件。
  4. Debug 选项卡

    • Use: 选择你的调试器,如果你使用的是板载 ST-Link,选择 STLink-Debugger,如果是 J-Link,选择 J-Link
    • 点击 Settings...,确保 Flash Download 选项卡中 Reset and Run 被勾选。

7 编译项目

点击工具栏上的 Build 按钮(一个看起来像 1 的图标,或者按 F7)。

  • 如果一切顺利,底部的 Build Output 窗口会显示 0 Error(s), 0 Warning(s)
  • 如果有错误,根据提示信息修改代码。

8 下载程序到开发板

  1. 确保你的开发板已通过 USB 连接到电脑,并且驱动已安装。
  2. 点击工具栏上的 Download 按钮(一个向下的箭头,或者按 F8)。
  3. Keil 会先编译代码,然后通过调试器将生成的 HEX 文件下载到开发板的 Flash 中。
  4. 下载成功后,程序会自动开始运行,你应该能看到开发板上的 LED 灯在闪烁!

第三部分:深入理解 Keil 界面与核心功能

1 Keil µVision 界面布局

  • 菜单栏:所有功能的入口。
  • 工具栏:常用功能的快捷按钮(新建、打开、保存、编译、下载等)。
  • 项目管理窗口:左侧区域,显示项目文件结构。
  • 代码编辑器窗口:中间区域,用于编写和查看代码。
  • 输出窗口:底部区域,显示编译信息、搜索结果等。

2 使用调试器

点击 Start/Stop Debug Session 按钮(像一只虫子的图标,或者按 Ctrl+F5)进入调试模式。

  • 进入调试模式后,程序指针会停在 main 函数的入口处。
  • 你可以点击 Run(F5)全速运行,或者点击 Step Over(F10)单步执行。

3 断点设置与使用

断点是调试的灵魂,它能让程序在指定的代码行暂停。

  • 设置断点:在代码编辑器左侧的灰色边栏上,双击你想要暂停的代码行,会出现一个红色的方块。
  • 运行到断点:进入调试模式后,按 F5 运行,程序会在断点处暂停。
  • 取消断点:再次单击红色方块即可取消。

4 变量监视与内存查看

  1. 监视窗口

    • 在调试模式下,右键点击代码中的变量,选择 Add "变量名" to Watch window
    • 或者直接在 Watch 窗口的 Watch 1 标签页中输入变量名。
    • 程序运行时,你可以实时看到变量值的变化。
  2. 内存窗口

    • 在调试模式下,点击菜单 View -> Memory Window
    • Memory 1 窗口的地址栏中输入你想查看的内存地址,0x20000000 (SRAM 的起始地址)。
    • 你可以查看该地址及其后地址的内存内容,这对于调试数组、缓冲区等非常有用。

5 外设寄存器查看

Keil 的一大优势是能直接查看和修改外设寄存器的值。

  • 在调试模式下,点击菜单 Peripherals
  • 你会看到所有可用的外设列表,如 GPIOC, RCC, USART1 等。
  • 点击 GPIOC,会弹出一个窗口,显示 GPIOC 的所有状态寄存器(IDR 用于读取输入电平,ODR 用于读取输出电平,BSRR 用于设置/复位)。
  • 你可以直接在这个窗口中修改寄存器的值,并立即看到硬件上的变化(手动将 ODR 的第 13 位置 1,LED 灯就会熄灭)。

第四部分:高级技巧与最佳实践

1 使用 CMSIS-DAP / J-Link / ST-Link

  • ST-Link: ST 官方调试器,大部分 ST 开发板都板载,Keil 支持得很好,通常即插即用。
  • J-Link: SEGGER 公司出品,性能强大,支持广泛,是很多专业开发者的选择。
  • CMSIS-DAP: 基于 ARM 官方标准调试协议的调试器,很多开源开发板(如 Nucleo)使用。

Options for Target -> Debug 中选择对应的调试器即可,如果找不到,可能需要安装对应的驱动软件(如 J-Link OB)。

2 配置目标选项

  • C/C++ 选项卡
    • Define: 可以定义宏,DEBUG=1,用于条件编译。
    • Include Paths: 指定头文件的搜索路径,当你把代码分到多个文件夹时,需要在这里添加路径。
    • Misc Controls: 可以传递特殊参数给编译器,-O0 (不优化) 方便调试,-O3 (最高优化) 用于最终发布。

3 使用 printf 重定向到串口

在调试时,向串口打印信息是最高效的调试手段之一。

  1. 修改 printf 实现:在你的代码中,包含 <stdio.h>,并重写 fputc 函数。
#include "stm32f10x.h"
#include <stdio.h>
// 重定向 printf 到串口1
int fputc(int ch, FILE *f) {
    // 假设你的串口1已经初始化好了
    while (USART1->SR & USART_SR_TC == 0); // 等待发送完成
    USART1->DR = (uint8_t)ch;             // 发送一个字节
    return ch;
}
// ... 你的 main 函数和其他代码 ...
  1. 初始化串口:在 main 函数开始时,你需要先初始化 USART1,这部分代码相对固定,通常由 STM32CubeMX 生成,或者从网上找现成的代码。

4 代码分块与优化

  • 代码分块:将代码按功能模块(如 delay.c, uart.c, gpio.c)分到不同的 .c.h 文件中,使项目结构清晰。
  • 优化级别:在 C/C++ 选项卡的 Optimization Level 中设置。
    • None (-O0):不优化,编译速度快,调试信息最全。
    • Level 1 (-O1)Level 3 (-O3):优化程度递增,代码运行更快,但可能影响调试。
    • Size (-Os):优化代码大小,适用于 Flash 空间紧张的项目。

5 版本控制集成

Keil 可以直接集成 Git。

  1. Project 窗口中,右键点击项目根目录。
  2. 选择 Enable Version Control with Git
  3. 之后就可以通过右键菜单进行 Commit, Push, Pull 等操作,方便团队协作和代码回溯。

第五部分:常见问题与资源

常见问题

  • Q: 编译时提示 "No target selected" 或 "No memory defined"

    • A: 在 Options for Target 中没有正确选择芯片型号,或者 Target 选项卡中的 FlashRAM 大小不正确,通常选择芯片型号后会自动填充。
  • Q: 下载程序失败,提示 "Flash Download failed"

    • A:
      1. 检查 Debug 设置中的调试器是否正确。
      2. 检查 Flash Download 选项卡中是否勾选了 Reset and Run
      3. 按下开发板上的复位按钮,然后再尝试下载。
      4. 检查 Boot 引脚是否被设置为从系统存储器启动(通常不是,除非你在烧录 bootloader)。
  • Q: 变量在调试窗口中显示为 "not accessible"

    • A: 通常是开启了编译器优化(如 -O1 或更高),导致编译器优化掉了这个变量或改变了其生命周期,在 C/C++ 选项卡中将优化级别设为 -O0 即可。

学习资源

  • 官方文档:Keil MDK 自带的帮助文档 (Help -> Contents) 是最权威的资料。
  • ARM 官方网站ARM Developer,提供 CMSIS 标准和底层架构文档。
  • 开发板厂商资源
    • STMicroelectronics: 提供丰富的应用笔记、参考手册和 STM32CubeMX 图形化配置工具。
    • NXP: 同样提供大量技术文档和示例代码。
  • 视频教程:在 Bilibili、YouTube 上搜索 "Keil MDK 教程" 或 "STM32 Keil 教程",有很多优秀的视频课程。
  • 开源项目:在 GitHub 上搜索基于 Keil 的项目,学习别人的代码风格和工程结构。

这份教程涵盖了从入门到进阶的大部分内容,希望能帮助你顺利掌握 Keil MDK for ARM,祝你学习愉快!

分享:
扫描分享到社交APP
上一篇
下一篇