news 2026/1/10 9:22:54

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/1/8 19:53:39

通义千问本地部署终极指南:5分钟拥有专属AI助手

想要在个人电脑上体验强大的AI能力吗?FlashAI推出的通义千问本地部署方案让每个人都能轻松拥有专属AI助手。无需复杂配置,完全离线运行,确保你的数据隐私绝对安全。这个完整的一键部署解决方案彻底改变了传统大模型部署的复杂流程。 【免费下…

作者头像 李华
网站建设 2026/1/3 14:21:06

conda remove卸载冲突的TensorFlow旧版本

精准治理 TensorFlow 版本冲突:从 Conda 清理到容器化环境重建 在深度学习项目迭代加速的今天,一个看似微小的问题——“ImportError: cannot import name ‘XXX’ from ‘tensorflow’”——往往能让开发者耗费半天时间排查。这类错误背后最常见的元凶…

作者头像 李华
网站建设 2026/1/9 16:34:10

Obsidian Web Clipper深度解析:网页内容收集与知识管理实战指南

Obsidian Web Clipper深度解析:网页内容收集与知识管理实战指南 【免费下载链接】obsidian-clipper Highlight and capture the web in your favorite browser. The official Web Clipper extension for Obsidian. 项目地址: https://gitcode.com/gh_mirrors/obsi…

作者头像 李华
网站建设 2026/1/10 7:40:05

分布式事务终极指南:3大模式深度解析与实战选型策略

分布式事务终极指南:3大模式深度解析与实战选型策略 【免费下载链接】incubator-seata :fire: Seata is an easy-to-use, high-performance, open source distributed transaction solution. 项目地址: https://gitcode.com/gh_mirrors/inc/incubator-seata …

作者头像 李华
网站建设 2026/1/9 3:23:25

OSS-Fuzz实时安全检测终极指南:从零构建智能防护体系

在当今快速迭代的软件开发环境中,传统的安全测试方法往往滞后于实际威胁。OSS-Fuzz通过持续模糊测试技术,实现了实时安全检测的革命性突破,为开源项目提供了前所未有的安全保障。 【免费下载链接】oss-fuzz OSS-Fuzz - continuous fuzzing fo…

作者头像 李华
网站建设 2026/1/10 3:08:45

ComfyUI工作空间管理器:一站式工作流管理解决方案

ComfyUI工作空间管理器:一站式工作流管理解决方案 【免费下载链接】comfyui-workspace-manager A ComfyUI extension to centralize the management of all your workflows in one place. Seamlessly switch between workflows, as well as create, update, and del…

作者头像 李华