什么是 Keil uVision 4?
Keil uVision 4 (常简写为 UV4) 是德国 Keil 公司(现为 ARM 公司的一部分)推出的一款非常经典的 集成开发环境,它主要用于基于 ARM7, ARM9, Cortex-M (如 M0, M3, M4, M7), 8051 等内核的微控制器(MCU)的程序开发。

(图片来源网络,侵删)
尽管 Keil 已经更新到了更新的版本(如 uVision5 和 MDK v6),但由于其稳定性和广泛的硬件支持,Keil uVision 4 在很多学校和老旧项目中仍然被广泛使用。
核心功能:
- 代码编辑器: 带有语法高亮、代码自动补全、函数提示等功能。
- C/C++ 编译器: 将你写的 C 语言代码编译成微控制器可以执行的机器码。
- 宏汇编器: 用于编写汇编语言代码。
- 链接器: 将编译后的目标文件、库文件链接成一个最终的可执行文件(通常是
.hex或.axf格式)。 - 调试器: 提供强大的硬件或软件仿真调试功能,如设置断点、单步执行、查看变量、查看内存和寄存器等。
Keil uVision 4 C语言开发基本流程
在 Keil 中进行 C 语言开发,通常遵循以下步骤:
创建新工程
- 打开 Keil uVision 4。
- 点击
Project->New μVision Project...。 - 选择一个文件夹保存你的工程,并给工程命名(
LED_Blink)。 - 这是最关键的一步: 接下来会弹出一个 "Select Device for Target" 窗口,你需要在这里选择你正在使用的具体 MCU 型号,如果你用的是 STC公司的单片机,就选择
STC->STC89C52RC;如果是 STM32,就选择STMicroelectronics->STM32F103C8,选择正确型号后,点击OK。 - Keil 会询问你是否要从
Device Family Pack中添加启动代码,通常选择Yes,它会生成一个基础的main.c文件和启动文件,这能帮你处理很多底层初始化工作。
添加源文件
- 在左侧的
Project窗口中,右键点击Source Group 1。 - 选择
Add New Item to Group 'Source Group 1'...。 - 在弹出的窗口中,选择
C File (.c),给文件命名(main.c),然后点击Add。 - 现在你就可以在右侧的编辑器中编写你的 C 语言代码了。
编写 C 语言代码
下面是一个经典的 LED闪烁 程序示例,假设我们使用的是 STC89C52 这类 51 内核的单片机,LED 连接在 P1.0 引脚。

(图片来源网络,侵删)
#include <reg52.h> // 包含 52 系列单片机的特殊功能寄存器定义头文件
// 延时函数,简单的软件延时
void delay(unsigned int time) {
unsigned int i, j;
for (i = time; i > 0; i--)
for (j = 120; j > 0; j--);
}
void main() {
while (1) // 无限循环
{
P1 = 0x00; // P1 口全部输出低电平,LED 是共阳极接法,则点亮
// P1_0 = 0; // 或者单独操作 P1.0 引脚
delay(500); // 延时一段时间
P1 = 0xFF; // P1 口全部输出高电平,熄灭 LED
// P1_0 = 1; // 或者单独操作 P1.0 引脚
delay(500); // 延时一段时间
}
}
代码解释:
#include <reg52.h>:包含了 52 单片机所有寄存器的地址定义,这样你才能直接使用P1,TMOD等名称。main():C 程序的入口函数。while(1):一个死循环,确保程序持续运行。P1 = 0x00;:将 P1 端口的 8 个引脚全部设置为低电平(0V)。P1 = 0xFF;:将 P1 端口的 8 个引脚全部设置为高电平(VCC,通常是 5V)。delay():一个自定义的延时函数,通过循环消耗时间来实现延时。
配置工程选项
- 点击
Project->Options for Target '...'(或者直接按快捷键Alt+F7)。 - Target 选项卡:
- Xtal (MHz): 设置你的单片机所使用的晶振频率,这个值必须准确,因为它会影响
delay()函数的延时精度和串口等外设的波特率计算。
- Xtal (MHz): 设置你的单片机所使用的晶振频率,这个值必须准确,因为它会影响
- Output 选项卡:
- Create Executable: 确保
Create HEX File选项被勾选,这个.hex文件是最终需要烧录到单片机里的文件。
- Create Executable: 确保
- C51 选项卡:
- Memory Model: 可以根据程序大小选择
Small(变量在 data 区),Compact(在 pdata 区),Large(在 xdata 区),初学者一般使用默认的Small即可。 - Code Optimization: 选择代码优化级别,一般使用默认的
Level 8 (Optimize for Time)。 - Warnings: 可以设置编译器的警告级别,建议至少开启一些警告,有助于发现潜在问题。
- Memory Model: 可以根据程序大小选择
编译和生成代码
- 点击工具栏上的 Build 按钮(一个看起来像砖块的图标,快捷键
F7)。 - 如果代码没有语法错误,底部的
Build Output窗口会显示0 Error(s), 0 Warning(s)。 - 在你的工程文件夹下会生成一个
Objects子文件夹,里面包含着编译后的.hex和.axf文件。
调试程序
调试是开发过程中最重要的一环。
- 选择调试器: 在
Project->Options for Target->Debug选项卡中,选择你的调试器,如果是仿真,可以选择ULINK2/ME或Simulator(软件仿真),如果是硬件,需要连接 J-Link, ST-Link, U-Link 等并安装相应的驱动。 - 开始调试: 点击工具栏上的 Start/Stop Debug Session 按钮(一个看起来像虫子的图标,快捷键
Ctrl+F5)。 - 调试界面: 程序会进入调试模式,界面会发生一些变化:
- 左侧出现
Debug(寄存器) 和Watch(监视) 窗口。 - 左侧出现
Peripherals窗口,可以查看和配置定时器、串口、I/O 端口等外设的实时状态。 - 代码编辑器左侧会出现灰色箭头,表示程序即将执行的下一行。
- 左侧出现
- 常用调试操作:
- 运行: 点击
Go按钮 (F5),程序全速运行,直到遇到断点。 - 单步进入: 点击
Step Into按钮 (F11),如果当前行是函数调用,会进入该函数内部。 - 单步跳过: 点击
Step Over按钮 (F10),执行当前行,如果是函数调用,则执行整个函数后停在下一行。 - 单步退出: 点击
Step Out按钮 (Shift+F11),执行完当前函数的剩余部分,并返回到调用处。 - 设置/取消断点: 在代码行号左侧单击,可以设置一个红色的断点,程序运行到此处会暂停。
- 查看变量: 在
Watch窗口中,可以添加你想监视的变量名,实时查看其值的变化。
- 运行: 点击
重要提示与常见问题
- 版本与授权: Keil uVision 4 有功能受限的评估版,对于某些大容量或高成本的芯片,可能需要购买授权才能完整编译。
- 头文件:
#include的头文件必须与你的芯片型号匹配,STM32 就不能使用reg52.h,而应该使用厂商提供的stm32f10x.h等。 - 启动文件: 对于 ARM Cortex-M 内核的芯片,启动文件(
startup_stm32f10x_md.s)负责初始化堆栈、设置向量表以及调用main()函数,通常不要轻易修改它。 main()函数: C 语言标准规定main()函数的返回类型应为int,并且最好return 0;,但在很多嵌入式系统中,void main()也很常见,因为程序不会返回到操作系统。- 下载/烧录: 编译成功后,需要使用专门的下载工具(如 STC-ISP, ST-Link Utility, J-Link Commander 等)将生成的
.hex文件烧录到目标单片机中。
Keil uVision 4 是一个功能强大且稳定的嵌入式开发平台,掌握它在其中的 C 语言开发流程是嵌入式工程师的基本功,希望这份指南对你有帮助!

(图片来源网络,侵删)
