目录
- 环境搭建与安装
- 基础入门:第一个项目
- 项目管理与配置
- 调试技术详解
- 高级应用与优化
- 常见问题与解决方案
一、环境搭建与安装
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包,重启Keil6.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指南及行业实践经验编写,涵盖从软件安装、基础项目创建、调试技巧到高级中间件应用的完整学习路径。建议初学者按照章节顺序实践,每个阶段都确保掌握后再进入下一阶段。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |