杰瑞科技汇

Keil for ARM教程从哪里开始学?

Keil MDK for ARM 完整入门教程

第一部分:准备工作与环境搭建

什么是 Keil MDK?

Keil MDK(Microcontroller Development Kit)是 ARM 公司推出的一个集成开发环境,专门用于基于 ARM Cortex-M, Cortex-R 以及经典 ARM7/9 内核的微控制器开发,它由德国公司 Keil 开发,后被 ARM 收购,是目前嵌入式开发领域最主流、最强大的工具之一。

Keil for ARM教程从哪里开始学?-图1
(图片来源网络,侵删)

MDK 主要包含以下几个核心组件:

  • µVision IDE (集成开发环境):代码编辑器、项目管理器、构建工具(编译器、汇编器、链接器)的图形界面。
  • ARM C/C++ Compiler (ARMCC/ARMCLANG):业界领先的 C/C++ 编译器,能将你的高级代码高效地转换为 ARM 汇编语言,并最终生成机器码。
  • Keil RTX 实时操作系统:一个轻量级的实时内核,用于任务管理。
  • ULINK 调试器:用于硬件调试的仿真器,支持实时调试、性能分析、内存查看等功能。
  • Pack Installer (软件包安装器):用于从 ARM 官方网站下载和安装各种微控制器设备的 Device Family Pack (DFP),即设备支持包。

安装 Keil MDK

前提条件:

  • 一台运行 Windows 操作系统的电脑。
  • 管理员权限(安装时需要)。

安装步骤:

  1. 下载安装包

    Keil for ARM教程从哪里开始学?-图2
    (图片来源网络,侵删)
  2. 运行安装程序

    • 双击下载的 .exe 文件(SetupMDK5xxx.exe)。
    • 在安装向导中,一路点击 "Next"。
  3. 接受许可协议

    仔细阅读许可协议,选择 "I agree to the terms of the license agreement",然后点击 "Next"。

  4. 选择安装组件

    Keil for ARM教程从哪里开始学?-图3
    (图片来源网络,侵删)
    • 强烈建议选择默认的全安装,这包含了所有必要的组件,如编译器、调试器、RTX 等,点击 "Next"。
  5. 选择安装路径

    保持默认路径即可,或者选择一个你喜欢的路径,点击 "Next"。

  6. 开始安装

    点击 "Install" 开始安装过程,这可能需要几分钟时间。

  7. 完成安装

    • 安装完成后,会提示你安装 Device Family Packs (DFPs),这是 至关重要的一步
    • 点击 "OK",Pack Installer 会自动启动。
    • 在 Pack Installer 中,搜索并安装你所用芯片厂商的 DFP,如果你用的是 STM32F103,就搜索并安装 "STMicroelectronics" 的 DFP。
    • 安装完成后,关闭 Pack Installer。
  8. 首次启动

    • 首次启动 Keil µVision 时,会提示你注册,你可以选择使用 评估版,评估版有 32KB 的代码限制,对于学习和大多数示例项目来说完全足够。

第二部分:创建第一个工程 (Blinky LED)

我们将以一个经典的 "Blinky LED"(闪烁的 LED)项目为例,走完一个完整的开发流程,这里我们假设你使用的是一块 STM32F103C8T6 开发板。

创建新工程

  1. 打开 Keil µVision。

  2. 点击菜单栏的 Project -> New µVision Project...

  3. 选择一个文件夹来保存你的工程(Blinky_LED),然后为工程命名(Blinky),并点击 Save

  4. Keil 会提示你选择一个 设备,这是最关键的一步。

    • 在弹出的窗口中,展开左侧的设备厂商列表,找到 STMicroelectronics
    • 在其下找到 STM32F1 Series,然后选择 STM32F103
    • 在右侧的列表中,选择你的具体芯片型号,STM32F103C8
    • 点击 OK
  5. Keil 会询问你是否从 Device Family Pack 中添加 启动文件,对于大多数项目,选择 Yes

    • 在弹出的窗口中,选择 CMSIS -> Startup -> startup_stm32f10x_md.s (如果你的芯片是中等容量 Flash,如 64KB,则选 md;小容量选 vl,大容量选 ld)。
    • 点击 AddClose

配置工程

  1. 在左侧的 Project 窗口中,右键点击 Target 1,选择 Options for Target 'Target 1'...
  2. Target 选项卡中:
    • Xtal (MHz):设置你开发板的系统时钟频率,对于 STM32F103,外部晶振通常是 8MHz,保持 0 MHz
    • Use MicroLIB:勾选此项,MicroLIB 是一个针对嵌入式应用的轻量级 C 库,比标准的 C 库更小、更快。
  3. C/C++ 选项卡中:
    • Define:这里可以定义宏,我们暂时留空。
    • Include Paths:这是告诉编译器去哪里找头文件,点击文件夹图标,添加 STM32 标准库的头文件路径,通常是 ...\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.4.0\Device\Include (路径中的版本号可能不同)。
  4. Debug 选项卡中:
    • Use:选择 ULINK ProULINK2/ME,如果没有硬件调试器,可以选择 Use Simulator(使用软件仿真)进行初步测试。
  5. 点击 OK 保存设置。

编写代码

  1. 在 Project 窗口中,右键点击 Source Group 1,选择 Add New Item to Group 'Source Group 1'...
  2. 选择 C File (.c),命名为 main.c,并点击 Add
  3. 将以下代码复制并粘贴到 main.c 中:
#include "stm32f10x.h" // 包含 STM32F10x 的头文件
// 延时函数 (简单粗略的延时)
void simple_delay(volatile uint32_t count) {
    while(count--);
}
int main(void) {
    // 1. 使能 GPIOA 的时钟
    RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
    // 2. 配置 PA5 引脚为推挽输出
    // GPIOA->CRL 寄存器控制 PA0-PA7
    // 位 31-28: CNF5, 位 27-24: MODE5
    // 推挽输出: MODE = 01b (输出模式, 最大速度 10MHz)
    GPIOA->CRL &= ~(0xF << 20); // 清除原来的设置
    GPIOA->CRL |= (0x1 << 20);  // 设置为推挽输出模式
    while (1) {
        // 3. 点亮 LED (PA5 输出低电平)
        GPIOA->ODR &= ~(1 << 5);
        // 延时
        simple_delay(500000);
        // 4. 熄灭 LED (PA5 输出高电平)
        GPIOA->ODR |= (1 << 5);
        // 延时
        simple_delay(500000);
    }
}

代码解释:

  • #include "stm32f10x.h":包含了芯片所有寄存器定义的文件。
  • RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;:这是 STM32 的精髓——时钟使能,在使用任何外设(如 GPIO)之前,必须先为其提供时钟。
  • GPIOA->CRL ...:配置 GPIOA 端口寄存器。CRL 控制低 8 位引脚(PA0-PA7),我们修改 CNF5MODE5 来设置 PA5 的模式。
  • GPIOA->ODR ...:输出数据寄存器,向 ODR 的第 5 位写入 0 或 1,就可以控制 PA5 引脚的电平。

编译工程

  1. 点击工具栏上的 Build 按钮(一个看起来像药丸的图标,快捷键 F7)。
  2. 如果一切配置正确,底部的 Build Output 窗口会显示:
    Build target 'Target 1'
    compiling main.c...
    linking...
    Program Size: Code=680 RO-data=252 RW-data=0 ZI-data=4
    ".\Objects\Blinky.axf" - 0 Error(s), 0 Warning(s).

    看到 0 Error(s), 0 Warning(s) 表示编译成功!生成的 .axf 文件是用于调试的,.hex 文件是用于烧录到芯片的。

下载与调试

  1. 连接硬件:将你的开发板通过 ST-Link 或 J-Link 等调试器连接到电脑。
  2. 配置下载:在 Options for Target -> Debug 选项卡中,确保你的调试器已连接并被识别,点击 Settings,可以查看连接状态。
  3. 下载程序:点击工具栏上的 Download 按钮(一个向下的箭头,快捷键 F8),程序会被下载到开发板的 Flash 中。
  4. 开始调试
    • 点击工具栏上的 Start/Stop Debug Session 按钮(一个虫子图标,快捷键 Ctrl+F5)。
    • 程序会开始运行,并停在 main 函数的入口处(黄色箭头指示)。
    • 你可以使用快捷键 F10(单步跳过)或 F11(单步进入)来逐行执行代码。
    • 观察 PA5 引脚上的 LED,它应该会开始闪烁!
    • 在调试过程中,你可以查看变量、寄存器、内存等,非常方便。

第三部分:进阶技巧与资源

使用标准外设库 或 HAL 库

直接操作寄存器虽然能让你深刻理解硬件,但效率低且容易出错,在实际开发中,我们通常使用厂商提供的库函数。

  • 标准外设库:早期广泛使用,函数直接对应寄存器操作,结构清晰。
  • HAL 库 (Hardware Abstraction Layer):STM32 官方主推的库,统一了不同系列芯片的 API,可移植性更强,但代码结构相对复杂一些。

使用库时,你需要下载相应的库文件,并将其添加到你的工程中,然后在代码中包含对应的头文件。

代码片段与代码补全

Keil 提供了强大的代码补全功能,当你输入 GPIOA-> 时,它会列出所有可用的寄存器,极大提高了编码效率。

查阅数据手册和参考手册

  • 数据手册:芯片的“身份证”,引脚定义、电气特性、封装信息等。
  • 参考手册:芯片的“使用说明书”,详细描述了每个外设的功能、寄存器地址和每一位的作用,当你不确定某个寄存器如何配置时,查阅参考手册是唯一正确的方法。

学习资源推荐

  • 官方资源
  • 中文社区
    • 正点原子野火 等国内知名厂商提供了非常详尽的开发板教程和视频,是初学者的绝佳学习材料。
    • CSDN博客园 等平台有大量开发者分享的经验和笔记。

这份教程涵盖了 Keil MDK 开发的基本流程:

  1. 安装 Keil MDK 和芯片支持包。
  2. 创建 新工程并选择正确的设备。
  3. 配置 工程选项(时钟、包含路径等)。
  4. 编写 代码(可以是寄存器操作或库函数)。
  5. 编译 代码,检查错误和警告。
  6. 下载 程序到硬件,并进行 调试

掌握这些步骤后,你就可以开始探索更复杂的嵌入式项目了,祝你学习愉快!

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