目录
一、环境搭建与安装
1.1 系统要求
- 操作系统:Windows 7/8/10/11(64位推荐)
- 处理器:Intel Pentium 4 或更高
- 内存:最低2GB,推荐4GB或以上
- 硬盘空间:至少2GB可用空间
1.2 软件安装步骤
步骤1:下载安装包
- 访问Keil官方网站下载MDK安装包(MDK5xx.EXE)
- 或从国内镜像/云盘获取安装包(注意验证文件完整性)
步骤2:安装主程序
- 右键点击安装程序,选择"以管理员身份运行"
- 点击 Next 进入安装向导
- 勾选 "I agree to all the terms..." 接受许可协议,点击 Next
- 修改安装路径(建议改为D盘等非系统盘,如
D:\Keil_v5),点击 Next - 填写注册信息(可随意填写):
- First Name: 任意
- Last Name: 任意
- Company: 任意
- Email: 任意格式
- 点击 Next 开始安装,等待进度条完成
- 取消勾选 "Show Release Notes",点击 Finish
步骤3:软件注册(License激活)
- 打开Keil uVision5,点击菜单 File → License Management
- 复制 CID(Computer ID)框中的代码
- 运行注册机程序(需管理员权限),将CID粘贴到对应位置
- Target选择 ARM,Prof. Developers选择 Professional
- 点击 Generate 生成许可证代码(LIC)
- 复制LIC代码,粘贴到Keil的 New License ID Code (LIC) 框中
- 点击 Add LIC,显示 "LIC Added Successfully" 即激活成功
步骤4:安装设备支持包(DFP)
Keil采用Pack机制管理不同厂商的芯片支持:
- 打开Keil,点击工具栏 Pack Installer 图标(或菜单 Project → Manage → Pack Installer)
- 在左侧 Devices 栏选择芯片厂商(如STMicroelectronics)
- 在右侧选择具体芯片系列(如STM32F1 Series)
- 点击 Install 按钮安装对应的DFP(Device Family Pack)
- 等待安装完成,关闭Pack Installer
国内用户提示:Pack下载可能较慢,可提前从Keil官网下载
.pack文件,双击本地安装
二、基础入门:第一个项目
2.1 创建新项目(以STM32为例)
步骤1:新建工程
- 打开Keil uVision5,点击菜单 Project → New uVision Project...
- 选择项目保存路径(建议新建专用文件夹,如
D:\Projects\LED_Blink) - 输入项目名称(如
LED_Blink),点击 保存
步骤2:选择目标设备
- 在 Select Device for Target 对话框中展开厂商列表
- 选择 STMicroelectronics → STM32F1 Series → STM32F103C8
- 点击 OK 确认
步骤3:添加启动文件和库
- 弹出 Manage Run-Time Environment 对话框
- 勾选必要组件:
- CMSIS → CORE(核心支持)
- Device → Startup(启动文件)
- Device → GPIO(如需使用GPIO)
- 点击 Resolve 自动解决依赖关系
- 点击 OK 完成配置
步骤4:创建源文件
- 在 Project 窗口中右键点击 Source Group 1
- 选择 Add New Item to Group 'Source Group 1'...
- 选择 C File (.c),命名为
main.c - 点击 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 编译与下载
编译项目
- 点击工具栏 Build 按钮(或按 F7)
- 查看 Build Output 窗口,确认 "0 Error(s), 0 Warning(s)"
- 生成的.hex文件位于项目目录的
Objects文件夹中
下载到开发板
- 连接ST-Link调试器到电脑和开发板
- 点击工具栏 Options for Target 按钮(或按 Alt+F7)
- 切换到 Debug 标签,选择 ST-Link Debugger
- 点击 Settings,确认Port为 SW(Serial Wire)
- 点击 OK 保存设置
- 点击 Download 按钮(或按 F8)下载程序
- 观察开发板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/ # 编译输出
添加文件到工程
- 在Project窗口右键点击目标组(如 Source Group 1)
- 选择 Manage Project Items...
- 点击 Add Files... 选择.c/.s文件
- 或使用 Add New Group 创建新的文件组(如
Drivers,Middleware)
3.3 使用Run-Time Environment(RTE)
RTE是Keil MDK的软件组件管理系统:
- 点击 Project → Manage → Run-Time Environment
- 浏览可用的软件组件:
- CMSIS:核心支持、DSP库、NN库
- Device:启动文件、外设驱动
- Keil Middleware:文件系统、网络、USB协议栈
- Board Support:板级支持包
- 勾选所需组件,点击 Resolve 自动检查依赖
- 点击 OK 自动添加文件到工程
四、调试技术详解
4.1 基础调试操作
启动调试会话
- 点击 Debug → Start/Stop Debug Session(或按 Ctrl+F5)
- 或点击工具栏 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窗口(变量监视)
- 进入调试模式后,打开 View → Watch Windows → Watch 1
- 在 Name 列输入变量名(如
counter,GPIOA->IDR) - 按 Enter 显示当前值,可实时观察变量变化
- 支持表达式:如
(float)adc_value / 4096 * 3.3
Memory窗口(内存查看)
- 打开 View → Memory Windows → Memory 1
- 在地址框输入地址(如
0x20000000查看SRAM) - 支持多种显示格式:Hex、ASCII、Float等
- 可直接修改内存值(双击数值)
寄存器查看
- 打开 View → Registers Window 查看CPU寄存器
- 打开 View → Peripherals 查看外设寄存器(需正确配置SVD文件)
4.3 高级调试功能
逻辑分析仪(Logic Analyzer)
- 打开 View → Analysis Windows → Logic Analyzer
- 点击 Setup... 添加观察信号
- 输入变量名或地址(如
PORTA,0x4001080C) - 设置显示类型(Bit、Analog等)
- 运行程序,实时观察波形变化
调用栈(Call Stack)
- 打开 View → Call Stack Window 查看函数调用层级
- 双击函数名可跳转到对应代码位置
- 用于分析程序崩溃时的调用路径
串口调试(Serial Window)
- 打开 View → Serial Windows → UART #1
- 自动捕获程序中UART1的输出数据
- 也可用于模拟输入数据到串口
五、高级应用与优化
5.1 编译优化配置
优化级别选择
在 Options for Target → C/C++ → Optimization 中选择:
| 级别 | 说明 | 适用场景 |
|---|---|---|
| Level 0 | 无优化,调试信息最完整 | 开发调试阶段 |
| Level 1 | 基本优化,保留大部分调试信息 | 初步优化测试 |
| Level 2 | 高优化,可能影响调试 | 性能测试阶段 |
| Level 3 | 最高优化,调试信息可能丢失 | 最终发布版本 |
代码大小优化技巧
- 勾选 One ELF Section per Function:删除未使用的函数
- 使用
__attribute__((unused))标记可能未使用的变量 - 启用 Link-Time Optimization (LTO)(如编译器支持)
5.2 使用Middleware中间件
Keil MDK-Professional提供丰富的中间件组件:
添加中间件步骤
- 打开 Manage Run-Time Environment
- 选择 Keil Middleware 类别
- 勾选需要的组件:
- File System:FAT文件系统支持
- Network:TCP/IP协议栈
- USB Device:USB设备协议栈
- USB Host:USB主机协议栈
- GUI:图形用户界面(emWin)
- 配置组件参数(通过对应的配置文件)
- 编写应用代码调用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 中文显示与编码
编辑器中文乱码:
- 点击 Edit → Configuration → Editor
- Encoding选择 Chinese GB2312 (Simplified) 或 UTF-8
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指南及行业实践经验编写,涵盖从软件安装、基础项目创建、调试技巧到高级中间件应用的完整学习路径。建议初学者按照章节顺序实践,每个阶段都确保掌握后再进入下一阶段。