环境搭建与安装1.1 系统要求操作系统Windows 7/8/10/1164位推荐处理器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复制CIDComputer ID框中的代码运行注册机程序需管理员权限将CID粘贴到对应位置Target选择ARMProf. Developers选择Professional点击Generate生成许可证代码LIC复制LIC代码粘贴到Keil的New License ID Code (LIC)框中点击Add LIC显示LIC Added Successfully即激活成功步骤4安装设备支持包DFPKeil采用Pack机制管理不同厂商的芯片支持打开Keil点击工具栏Pack Installer图标或菜单Project → Manage → Pack Installer在左侧Devices栏选择芯片厂商如STMicroelectronics在右侧选择具体芯片系列如STM32F1 Series点击Install按钮安装对应的DFPDevice 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按钮或按AltF7切换到Debug标签选择ST-Link Debugger点击Settings确认Port为SWSerial Wire点击OK保存设置点击Download按钮或按F8下载程序观察开发板LED是否开始闪烁三、项目管理与配置3.1 工程选项详细配置Options for TargetTarget选项卡Xtal (MHz)设置外部晶振频率如8.0MHzOperating system选择是否使用RTOS如RTXSystem 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,./DriversDebug选项卡Use Simulator使用软件仿真无需硬件Use Debugger选择硬件调试器ST-Link/J-Link/ULINK等Settings配置调试接口参数SWD/JTAG3.2 多文件项目管理文件组织结构建议Project/ ├── Core/ │ ├── Inc/ # 头文件 │ └── Src/ # 源文件 ├── Drivers/ # 库文件 ├── Middleware/ # 中间件 ├── Startup/ # 启动文件 └── Output/ # 编译输出添加文件到工程在Project窗口右键点击目标组如Source Group 1选择Manage Project Items...点击Add Files...选择.c/.s文件或使用Add New Group创建新的文件组如Drivers,Middleware3.3 使用Run-Time EnvironmentRTERTE是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或按CtrlF5或点击工具栏Debug按钮进入调试模式断点设置设置/取消断点在代码行号左侧单击或右键选择Insert/Remove Breakpoint条件断点右键断点选择Breakpoint Properties...设置条件表达式如i 100临时断点设置后执行一次自动删除单步执行Step Over (F10)执行当前行不进入函数内部Step Into (F11)执行当前行进入函数内部Step Out (CtrlF11)执行完当前函数返回调用处Run to Cursor (CtrlF10)运行到光标所在行4.2 变量与内存查看Watch窗口变量监视进入调试模式后打开View → Watch Windows → Watch 1在Name列输入变量名如counter,GPIOA-IDR按Enter显示当前值可实时观察变量变化支持表达式如(float)adc_value / 4096 * 3.3Memory窗口内存查看打开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的输出数据也可用于模拟输入数据到串口