news 2026/4/22 20:41:45

Keil uVision5使用教程:基于STM32的项目创建实战案例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Keil uVision5使用教程:基于STM32的项目创建实战案例

从零开始搭建STM32工程:Keil uVision5实战手记

你有没有过这样的经历?打开Keil uVision5,面对一片空白的项目窗口,鼠标悬在“New Project”上迟迟不敢点下——心里发虚:接下来该选什么芯片?启动文件要不要自己加?编译器用AC5还是AC6?HEX文件怎么生成?

别慌。我当年也是这么过来的。

今天我们就来实打实地走一遍完整的STM32开发流程,不讲虚的,只说你在动手时真正会遇到的问题和解决方法。目标很明确:创建一个能在STM32F103C8T6上运行的LED闪烁工程,并成功下载调试

整个过程就像搭积木,每一步都清晰可见、可验证。准备好了吗?我们开始。


为什么是Keil + STM32?

先说个现实:虽然现在有STM32CubeIDE、VS Code + PlatformIO这些新工具,但在工业项目和老产品维护中,Keil uVision5依然是主力。很多企业代码库都是基于Keil构建的,尤其是涉及RTOS、CAN通信或复杂中断系统的项目。

更重要的是,Keil对ARM底层机制的支持最原生。它不像某些高级IDE那样把一切都封装得太深,反而让你更容易看清MCU是怎么启动、时钟怎么配置、堆栈如何管理的。

所以,哪怕你以后主要用其他IDE,掌握一次Keil全流程,相当于给你的嵌入式认知打下钢筋水泥的地基


第一步:环境准备——别跳过这一步

再好的厨师也得先检查灶台能不能点火。

必须安装的三样东西:

  1. Keil MDK(Microcontroller Development Kit)
    - 下载地址:https://www.keil.com/download/product/
    - 安装时建议路径不要带中文和空格,比如C:\Keil_v5\

  2. ST-Link驱动程序
    - 如果你用的是ST-Link V2仿真器(最常见的那种小板子),Windows通常能自动识别。
    - 若无法识别,请手动安装 STSW-LINK009

  3. STM32F1系列设备支持包(DFP)
    - 打开Keil → Pack Installer(图标像拼图)
    - 搜索 “STM32F1” → 安装STM32F1xx_DFP最新版
    - 安装完成后你会看到提示:“Device Support Installed”

⚠️ 坑点提醒:如果你跳过DFP安装,后面选芯片时会出现“Unknown Device”,所有外设寄存器也无法高亮显示。


第二步:新建工程——不是点完“New Project”就完事了

操作步骤:

  1. 打开 Keil → Project → New μVision Project
  2. 选择保存路径(建议单独建个文件夹,如Project_STM32_LED
  3. 输入工程名,例如LED_Blink
  4. 点击保存后,弹出“Select Device for Target”对话框

🔍 在搜索框输入STM32F103C8
✅ 选择STMicroelectronics -> STM32F103C8(注意不是CB或CC)

✅ 此时Keil会自动为你加载:
- 正确的启动文件(startup_stm32f103xb.s)
- 内核头文件(core_cm3.h)
- 设备头文件(stm32f10x.h)

然后会问你是否添加“Startup Code”?
👉一定要点“是”!

否则你将面临链接错误:“Entry point not found”。


第三步:组织代码结构——让工程看起来像个专业项目

默认只有一组Source Group 1,我们可以优化一下结构。

右键左侧项目窗口 → Manage Project Items…
新增三个组:
-CORE:存放启动文件和系统初始化相关
-USER:用户主程序
-DRIVERS:可选,用于后续添加外设驱动

接着把startup_stm32f103xb.s移动到 CORE 组中。

再创建main.c文件并加入 USER 组:

// main.c #include "stm32f10x.h" static void delay(volatile uint32_t count) { while (count--); } int main(void) { // 开启GPIOC时钟(APB2总线) RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; // 配置PC13为推挽输出,最大速度10MHz GPIOC->CRH &= ~(GPIO_CRH_MODE13_Msk | GPIO_CRH_CNF13_Msk); GPIOC->CRH |= GPIO_CRH_MODE13_0; // 10MHz输出模式 for (;;) { GPIOC->BSRR = GPIO_BSRR_BR13; // 清除位,点亮LED(低电平有效) delay(600000); GPIOC->BSRR = GPIO_BSRR_BS13; // 置位,熄灭LED delay(600000); } }

📌 小知识:为什么用BSRR而不用直接赋值?

因为BSRR是原子操作,不会被中断打断,避免状态错乱。这是实际工程中的好习惯。


第四步:关键设置——决定成败的几个选项

点击菜单栏 “Options for Target”(快捷键 Alt+F7),进入核心配置环节。

1. Target 标签页

  • XTAL(MHz): 8.0← 这是你板子上的晶振频率
  • 勾选“Use MicroLIB”(轻量级标准库,减少代码体积)

💡 微库(MicroLIB)适合资源紧张的应用,但不支持某些复杂函数(如浮点printf)。若需完整功能,后期可关闭此选项并自行实现syscalls。

2. Output 标签页

  • ✅ Create HEX File:生成.hex文件,方便使用第三方烧录工具
  • Format: Intel Hex

3. Debug 标签页

  • 选择 “ST-Link Debugger”
  • 点击 Settings → Connection
  • Interface:SWD
  • Speed: 默认即可(通常4 MHz)

此时你应该能看到设备信息读取成功,比如:

SW-DP: DP IDR = 0x1BA01477 CoreSight SoC-400

这说明连接正常!

4. Utilities 标签页

  • 勾选 “Use Debug Driver”
  • ✅ Update Target before Debugging:每次调试前自动下载程序

第五步:编译 & 下载——见证奇迹的时刻

按下Build按钮(F7),如果一切顺利,你会看到:

"LED_Blink" - 0 Error(s), 0 Warning(s).

🎉 成功了!这意味着:
- 启动文件已链接
- 主函数入口找到
- 可执行映像(.axf)已生成
- HEX文件也已输出

现在点击Load按钮(向下箭头图标),程序就会通过ST-Link写入STM32的Flash。

随后点击Debug → Start/Stop Debug Session(Ctrl+D),进入调试模式。

试试按Run(F5),观察PC13引脚上的LED是否开始闪烁!


常见问题急救指南

❌ 编译报错:“undefined symbol SystemInit”

🛠 原因:缺少系统初始化函数
✅ 解法:确保启动文件正确加载;或者在main.c上方添加空函数:

void SystemInit(void) { }

❌ 下载失败:“No target connected”

🛠 检查以下几点:
- ST-Link是否供电正常(红灯亮)
- 目标板是否有电(3.3V测一下)
- SWD接线是否正确(SWCLK → PA14, SWDIO → PA13)
- 是否接了共地(GND必须连通)

❌ 程序下载了但不运行

🛠 可能原因:
- 主频没配对:STM32F103内部默认走的是HSI(8MHz),但我们期望72MHz
- Flash等待周期未设置

🔧 解决方案(进阶):

// 在main()开头添加时钟配置 RCC->CR |= RCC_CR_HSEON; // 开启外部晶振 while (!(RCC->CR & RCC_CR_HSERDY)); // 等待稳定 RCC->CFGR |= RCC_CFGR_PLLSRC; // PLL源选HSE RCC->CFGR |= RCC_CFGR_PLLMULL9; // 倍频×9 → 72MHz RCC->CR |= RCC_CR_PLLON; // 开启PLL while (!(RCC->CR & RCC_CR_PLLRDY)); // 等待锁相环就绪 RCC->CFGR |= RCC_CFGR_SW_PLL; // 切换系统时钟到PLL while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL); SystemCoreClock = 72000000; // 更新全局变量

同时记得在Flash控制器中插入等待周期:

FLASH->ACR |= FLASH_ACR_LATENCY_2; // 72MHz需要2个等待周期

⚠️ 不加这一句可能导致总线访问异常甚至HardFault!


工程最佳实践:写出让人愿意接手的代码

当你写的代码要交给别人维护时,下面几点会让你赢得尊重:

✅ 规范化工程结构

Project_LED/ ├── CMSIS/ (可选,手动管理CMSIS) ├── Inc/ (头文件) │ └── stm32f10x_conf.h ├── Src/ │ ├── main.c │ └── system_stm32f10x.c ├── Startup/ │ └── startup_stm32f103xb.s └── Project/ ├── LED_Blink.uvprojx └── Objects/

✅ 使用宏定义区分型号

在 Options → C/C++ → Define 中添加:

STM32F10X_MD, USE_STDPERIPH_DRIVER

这样可以启用对应库的支持。

✅ 加入.gitignore防止污染版本库

忽略以下文件:

*.uvoptx *.uvprojx Objects/ Listings/

写在最后:这只是起点

你现在拥有的,不只是一个会闪灯的工程,而是一套完整的嵌入式开发方法论

  • 如何从零建立可信的开发环境;
  • 如何理解启动流程与时钟系统;
  • 如何排查硬件连接与软件配置问题;
  • 如何写出结构清晰、易于维护的代码。

下一步你可以尝试:
- 用STM32CubeMX生成初始化代码,再导入Keil;
- 添加USART打印日志;
- 引入FreeRTOS实现多任务调度;
- 接入传感器并通过SPI/I2C读取数据。

技术和工具一直在变,但扎实的基本功永远不过时

如果你觉得这篇文章帮你避开了几个坑,欢迎转发给正在挣扎的同学。毕竟我们都曾站在那个“不知道下一步点哪里”的十字路口。

有问题?评论区见。我们一起 debug 人生。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 13:28:38

MobileCLIP:多模态AI新标杆,重塑移动端图像文本匹配技术

MobileCLIP:多模态AI新标杆,重塑移动端图像文本匹配技术 【免费下载链接】ml-mobileclip This repository contains the official implementation of the research paper, "MobileCLIP: Fast Image-Text Models through Multi-Modal Reinforced Tra…

作者头像 李华
网站建设 2026/4/10 16:40:51

告别绘图软件:用nodeppt Mermaid实现文本化图表革命

告别绘图软件:用nodeppt Mermaid实现文本化图表革命 【免费下载链接】nodeppt This is probably the best web presentation tool so far! 项目地址: https://gitcode.com/gh_mirrors/no/nodeppt 你是否曾经为了制作一张简单的流程图而耗费数小时&#xff1f…

作者头像 李华
网站建设 2026/4/20 11:34:56

终极语音识别解决方案:5步构建实时转写系统

终极语音识别解决方案:5步构建实时转写系统 【免费下载链接】SenseVoice Multilingual Voice Understanding Model 项目地址: https://gitcode.com/gh_mirrors/se/SenseVoice 语音识别技术在现代人机交互中扮演着关键角色,SenseVoice作为多语言语…

作者头像 李华
网站建设 2026/4/23 15:27:27

3个隐藏技巧让Nextcloud文件管理效率翻倍

3个隐藏技巧让Nextcloud文件管理效率翻倍 【免费下载链接】server ☁️ Nextcloud server, a safe home for all your data 项目地址: https://gitcode.com/GitHub_Trending/se/server 想象一下这样的场景:你正在与团队协作一个项目,突然需要快速…

作者头像 李华
网站建设 2026/4/23 14:07:56

嘉立创PCB布线复位电路布局要点:入门必看

嘉立创PCB设计避坑指南:复位电路布局为何总被忽视?你有没有遇到过这样的情况——电路板打样回来,上电后MCU死活不启动?LED闪一下就罢工,串口没输出,调试器连不上。反复检查电源、晶振、下载接口&#xff0c…

作者头像 李华
网站建设 2026/4/23 13:28:53

一键搞定!Word答题卡插件让教学效率翻倍提升

一键搞定!Word答题卡插件让教学效率翻倍提升 【免费下载链接】答题卡制作Word插件 答题卡制作Word插件是一款专为教师、学生及教育工作者设计的实用工具,可轻松在Word中创建答题卡。插件支持快速生成、自定义模板及批量制作,操作简单&#xf…

作者头像 李华