博客 / 詳情

返回

Keil MDK(uVision5)完全指導手冊(個人總結,篇幅有限)

目錄

  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指南及行業實踐經驗編寫,涵蓋從軟件安裝、基礎項目創建、調試技巧到高級中間件應用的完整學習路徑。建議初學者按照章節順序實踐,每個階段都確保掌握後再進入下一階段。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.