目录

  1. 环境搭建与安装
  2. 基础入门:第一个项目
  3. 项目管理与配置
  4. 调试技术详解
  5. 高级应用与优化
  6. 常见问题与解决方案

一、环境搭建与安装

1.1 系统要求

  • 操作系统:Windows 7/8/10/11(64位推荐)
  • 处理器:Intel Pentium 4 或更高
  • 内存:最低2GB,推荐4GB或以上
  • 硬盘空间:至少2GB可用空间

1.2 软件安装步骤

步骤1:下载安装包
  1. 访问Keil官方网站下载MDK安装包(MDK5xx.EXE)
  2. 或从国内镜像/云盘获取安装包(注意验证文件完整性)
步骤2:安装主程序
  1. 右键点击安装程序,选择**“以管理员身份运行”**
  2. 点击 Next 进入安装向导
  3. 勾选 “I agree to all the terms…” 接受许可协议,点击 Next
  4. 修改安装路径(建议改为D盘等非系统盘,如 D:\Keil_v5),点击 Next
  5. 填写注册信息(可随意填写):
    • First Name: 任意
    • Last Name: 任意
    • Company: 任意
    • Email: 任意格式
  6. 点击 Next 开始安装,等待进度条完成
  7. 取消勾选 “Show Release Notes”,点击 Finish
步骤3:软件注册(License激活)
  1. 打开Keil uVision5,点击菜单 File → License Management
  2. 复制 CID(Computer ID)框中的代码
  3. 运行注册机程序(需管理员权限),将CID粘贴到对应位置
  4. Target选择 ARM,Prof. Developers选择 Professional
  5. 点击 Generate 生成许可证代码(LIC)
  6. 复制LIC代码,粘贴到Keil的 New License ID Code (LIC) 框中
  7. 点击 Add LIC,显示 “LIC Added Successfully” 即激活成功
步骤4:安装设备支持包(DFP)

Keil采用Pack机制管理不同厂商的芯片支持:

  1. 打开Keil,点击工具栏 Pack Installer 图标(或菜单 Project → Manage → Pack Installer
  2. 在左侧 Devices 栏选择芯片厂商(如STMicroelectronics)
  3. 在右侧选择具体芯片系列(如STM32F1 Series)
  4. 点击 Install 按钮安装对应的DFP(Device Family Pack)
  5. 等待安装完成,关闭Pack Installer

国内用户提示:Pack下载可能较慢,可提前从Keil官网下载 .pack 文件,双击本地安装


二、基础入门:第一个项目

2.1 创建新项目(以STM32为例)

步骤1:新建工程
  1. 打开Keil uVision5,点击菜单 Project → New uVision Project…
  2. 选择项目保存路径(建议新建专用文件夹,如 D:\Projects\LED_Blink
  3. 输入项目名称(如 LED_Blink),点击 保存
步骤2:选择目标设备
  1. Select Device for Target 对话框中展开厂商列表
  2. 选择 STMicroelectronics → STM32F1 Series → STM32F103C8
  3. 点击 OK 确认
步骤3:添加启动文件和库
  1. 弹出 Manage Run-Time Environment 对话框
  2. 勾选必要组件:
    • CMSIS → CORE(核心支持)
    • Device → Startup(启动文件)
    • Device → GPIO(如需使用GPIO)
  3. 点击 Resolve 自动解决依赖关系
  4. 点击 OK 完成配置
步骤4:创建源文件
  1. Project 窗口中右键点击 Source Group 1
  2. 选择 Add New Item to Group ‘Source Group 1’…
  3. 选择 C File (.c),命名为 main.c
  4. 点击 Add 创建文件
步骤5:编写第一个程序(LED闪烁)
#include "stm32f10x.h"

// 简单延时函数
void delay_ms(uint32_t ms) {
    for(uint32_t i = 0; i < ms * 8000; i++) {
        __NOP();  // 空操作指令
    }
}

int main(void) {
    // 使能GPIOC时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    
    // 配置PC13为推挽输出
    GPIO_InitTypeDef GPIO_InitStruct;
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStruct);
    
    while(1) {
        GPIO_SetBits(GPIOC, GPIO_Pin_13);    // LED灭
        delay_ms(500);
        GPIO_ResetBits(GPIOC, GPIO_Pin_13);  // LED亮
        delay_ms(500);
    }
}

2.2 编译与下载

编译项目
  1. 点击工具栏 Build 按钮(或按 F7
  2. 查看 Build Output 窗口,确认 “0 Error(s), 0 Warning(s)”
  3. 生成的.hex文件位于项目目录的 Objects 文件夹中
下载到开发板
  1. 连接ST-Link调试器到电脑和开发板
  2. 点击工具栏 Options for Target 按钮(或按 Alt+F7
  3. 切换到 Debug 标签,选择 ST-Link Debugger
  4. 点击 Settings,确认Port为 SW(Serial Wire)
  5. 点击 OK 保存设置
  6. 点击 Download 按钮(或按 F8)下载程序
  7. 观察开发板LED是否开始闪烁

三、项目管理与配置

3.1 工程选项详细配置(Options for Target)

Target选项卡
  • Xtal (MHz):设置外部晶振频率(如8.0MHz)
  • Operating system:选择是否使用RTOS(如RTX)
  • System Viewer File:指定SVDF文件用于外设寄存器查看
Output选项卡
  • Create HEX File:勾选生成.hex文件用于烧录
  • Browse Information:勾选启用代码浏览和跳转
  • Select Folder for Objects:指定编译输出目录
C/C++选项卡(关键配置)
  • Define:添加预定义宏,如:
    • USE_HAL_DRIVER(使用HAL库)
    • STM32F103xB(芯片型号定义)
  • Optimization:优化级别选择
    • Level 0:无优化(调试推荐)
    • Level 3:最高优化(发布版本)
  • C99 Mode:勾选启用C99标准支持
  • Include Paths:添加头文件搜索路径(如 ./Inc, ./Drivers
Debug选项卡
  • Use Simulator:使用软件仿真(无需硬件)
  • Use Debugger:选择硬件调试器(ST-Link/J-Link/ULINK等)
  • Settings:配置调试接口参数(SWD/JTAG)

3.2 多文件项目管理

文件组织结构建议
Project/
├── Core/
│   ├── Inc/          # 头文件
│   └── Src/          # 源文件
├── Drivers/          # 库文件
├── Middleware/       # 中间件
├── Startup/          # 启动文件
└── Output/           # 编译输出
添加文件到工程
  1. 在Project窗口右键点击目标组(如 Source Group 1
  2. 选择 Manage Project Items…
  3. 点击 Add Files… 选择.c/.s文件
  4. 或使用 Add New Group 创建新的文件组(如 Drivers, Middleware

3.3 使用Run-Time Environment(RTE)

RTE是Keil MDK的软件组件管理系统:

  1. 点击 Project → Manage → Run-Time Environment
  2. 浏览可用的软件组件:
    • CMSIS:核心支持、DSP库、NN库
    • Device:启动文件、外设驱动
    • Keil Middleware:文件系统、网络、USB协议栈
    • Board Support:板级支持包
  3. 勾选所需组件,点击 Resolve 自动检查依赖
  4. 点击 OK 自动添加文件到工程

四、调试技术详解

4.1 基础调试操作

启动调试会话
  1. 点击 Debug → Start/Stop Debug Session(或按 Ctrl+F5
  2. 或点击工具栏 Debug 按钮进入调试模式
断点设置
  • 设置/取消断点:在代码行号左侧单击,或右键选择 Insert/Remove Breakpoint
  • 条件断点:右键断点选择 Breakpoint Properties…,设置条件表达式(如 i == 100
  • 临时断点:设置后执行一次自动删除
单步执行
  • Step Over (F10):执行当前行,不进入函数内部
  • Step Into (F11):执行当前行,进入函数内部
  • Step Out (Ctrl+F11):执行完当前函数,返回调用处
  • Run to Cursor (Ctrl+F10):运行到光标所在行

4.2 变量与内存查看

Watch窗口(变量监视)
  1. 进入调试模式后,打开 View → Watch Windows → Watch 1
  2. Name 列输入变量名(如 counter, GPIOA->IDR
  3. Enter 显示当前值,可实时观察变量变化
  4. 支持表达式:如 (float)adc_value / 4096 * 3.3
Memory窗口(内存查看)
  1. 打开 View → Memory Windows → Memory 1
  2. 在地址框输入地址(如 0x20000000 查看SRAM)
  3. 支持多种显示格式:Hex、ASCII、Float等
  4. 可直接修改内存值(双击数值)
寄存器查看
  • 打开 View → Registers Window 查看CPU寄存器
  • 打开 View → Peripherals 查看外设寄存器(需正确配置SVD文件)

4.3 高级调试功能

逻辑分析仪(Logic Analyzer)
  1. 打开 View → Analysis Windows → Logic Analyzer
  2. 点击 Setup… 添加观察信号
  3. 输入变量名或地址(如 PORTA, 0x4001080C
  4. 设置显示类型(Bit、Analog等)
  5. 运行程序,实时观察波形变化
调用栈(Call Stack)
  • 打开 View → Call Stack Window 查看函数调用层级
  • 双击函数名可跳转到对应代码位置
  • 用于分析程序崩溃时的调用路径
串口调试(Serial Window)
  1. 打开 View → Serial Windows → UART #1
  2. 自动捕获程序中UART1的输出数据
  3. 也可用于模拟输入数据到串口

五、高级应用与优化

5.1 编译优化配置

优化级别选择

Options for Target → C/C++ → Optimization 中选择:

级别 说明 适用场景
Level 0 无优化,调试信息最完整 开发调试阶段
Level 1 基本优化,保留大部分调试信息 初步优化测试
Level 2 高优化,可能影响调试 性能测试阶段
Level 3 最高优化,调试信息可能丢失 最终发布版本
代码大小优化技巧
  1. 勾选 One ELF Section per Function:删除未使用的函数
  2. 使用 __attribute__((unused)) 标记可能未使用的变量
  3. 启用 Link-Time Optimization (LTO)(如编译器支持)

5.2 使用Middleware中间件

Keil MDK-Professional提供丰富的中间件组件:

添加中间件步骤
  1. 打开 Manage Run-Time Environment
  2. 选择 Keil Middleware 类别
  3. 勾选需要的组件:
    • File System:FAT文件系统支持
    • Network:TCP/IP协议栈
    • USB Device:USB设备协议栈
    • USB Host:USB主机协议栈
    • GUI:图形用户界面(emWin)
  4. 配置组件参数(通过对应的配置文件)
  5. 编写应用代码调用API
示例:添加FAT文件系统
#include "rl_fs.h"

// 初始化文件系统
fsInitialize();

// 挂载SD卡
fsMount("M0:", "SD:");

// 文件操作
FILE *fp = fopen("M0:test.txt", "w");
fprintf(fp, "Hello Keil!\n");
fclose(fp);

5.3 脚本编程与自动化

使用调试脚本(.ini文件)

创建调试配置文件实现自动化操作:

// debug.ini 示例
FUNC void Setup(void) {
    SP = _RDWORD(0x08000000);     // 设置栈指针
    PC = _RDWORD(0x08000004);     // 设置程序计数器
    XPSR = 0x01000000;            // 设置xPSR
}

FUNC void GPIO_Init(void) {
    _WDWORD(0x40021018, 0x00000010);  // 使能GPIOC时钟
    _WDWORD(0x40011004, 0x00100000);  // 配置PC13
}

Setup();                          // 调用初始化函数
GPIO_Init();

Options for Target → Debug → Initialization File 中指定该脚本。

自定义编译后操作

Options for Target → User 标签中配置:

  • Run #1:编译前执行的命令
  • Run #2:编译后执行的命令
  • 示例:自动生成.bin文件
    fromelf --bin --output output.bin output.axf
    

六、常见问题与解决方案

6.1 安装与注册问题

问题 解决方案
注册时提示 “LIC is invalid” 确认CID复制完整(无空格),检查注册机Target选择是否正确
Pack安装失败 以管理员身份运行Keil,或手动下载.pack文件双击安装
找不到设备 确认已安装对应厂商的DFP包,重启Keil

6.2 编译错误

错误提示 解决方案
“undefined symbol” 检查是否添加了对应的.c文件到工程,或缺少库文件
“cannot open source input file” 在C/C++选项中添加正确的Include Paths
“No space in execution regions” 芯片Flash/RAM不足,优化代码或更换大容量型号
“multiple definition” 检查是否有重复定义的变量或函数,使用extern声明

6.3 调试问题

问题 解决方案
无法连接调试器 检查接线(SWDIO/SWCLK/GND),确认驱动已安装,重启调试器
程序不运行或跑飞 检查启动文件是否正确,向量表地址配置,时钟配置
断点无效 确认代码已编译并下载,优化级别设为0,检查Flash断点数量限制
变量值显示异常 检查变量是否被优化(volatile声明),确认作用域正确

6.4 中文显示与编码

  1. 编辑器中文乱码

    • 点击 Edit → Configuration → Editor
    • Encoding选择 Chinese GB2312 (Simplified)UTF-8
  2. printf输出中文乱码

    • 确保串口工具编码与Keil一致
    • 使用 printf("%s", "中文\r\n"); 格式

附录:学习资源

官方资源

  • Keil官方文档中心:www.keil.com/support/man_docs.asp
  • Keil学习平台:www.keil.com/learn(视频教程)

推荐书籍

  • 《ARM Cortex-M3与Cortex-M4权威指南》
  • 《嵌入式系统设计与实践》

国内社区

  • 正点原子、野火电子等STM32教程
  • CSDN、知乎Keil相关专栏

本手册基于Keil官方Getting Started指南及行业实践经验编写,涵盖从软件安装、基础项目创建、调试技巧到高级中间件应用的完整学习路径。建议初学者按照章节顺序实践,每个阶段都确保掌握后再进入下一阶段。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐