news 2026/4/15 12:20:37

STM32新手必看:Keil5使用教程零基础入门

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STM32新手必看:Keil5使用教程零基础入门

STM32新手入门:手把手带你用Keil5点亮第一颗LED

你是不是也曾面对一块STM32最小系统板,插上ST-Link、打开Keil,却卡在“找不到stm32f10x.h”这种错误上无从下手?别急——这几乎是每个嵌入式新人必经的“入门仪式”。

今天,我们就抛开那些复杂的术语堆砌,用最接地气的方式,带你从零开始,完整走一遍Keil5开发STM32的全流程。不需要任何基础,只要你会点鼠标、会复制代码,就能让那颗小小的LED开始闪烁。


为什么是Keil5?它真的适合新手吗?

市面上能开发STM32的工具不少:STM32CubeIDE、VS Code + PlatformIO、IAR、GCC……但对刚入门的小白来说,Keil μVision5(简称Keil5)依然是最友好的选择之一

原因很简单:

  • 界面直观,功能按钮一目了然;
  • 对ST芯片支持完善,几乎不用手动配头文件;
  • 调试体验流畅,单步运行、看寄存器像玩游戏一样自然;
  • 大量教程和例程都基于Keil编写,踩坑有人背锅(笑);

当然,它也有缺点——比如免费版限制代码不超过32KB,但这对于“点灯”、“按键读取”、“串口打印”这类学习项目完全够用。

✅ 所以结论很明确:想快速上手STM32底层原理?先学会Keil5,不吃亏。


第一步:装好环境,别被第一步劝退

1. 下载并安装Keil MDK

去官网下载Keil MDK-ARM(不是C51那个版本!),安装时建议路径不要带中文或空格,比如推荐放在:

C:\Keil_v5\

安装完成后启动μVision5,你会看到一个清爽的界面。

2. 安装STM32设备支持包(DFP)

这是关键一步!很多人编译报错“cannot open source input file ‘stm32f10x.h’”,就是因为漏了这个。

操作步骤如下:

  1. 打开 Keil →Pack Installer(右上角图标);
  2. 左侧选Devices→ 搜索 “STM32F1”;
  3. 找到你的芯片型号,比如常见的STM32F103C8T6
  4. 在右侧找到并安装Keil.STM32F1xx_DFP包(通常最新版即可);

✅ 安装成功后,Keil就知道你的芯片有哪些外设、内存映射、中断向量表长啥样了。

💡 小贴士:DFP本质是一个“设备驱动包”,就像给电脑装显卡驱动一样,没它Keil就不认识你的MCU。


第二步:创建第一个工程 —— 不要直接写代码!

很多新手一上来就想新建个.c文件就开始敲代码,结果编译一堆错。其实正确的做法是:先建工程,再加文件

创建新工程

  1. Project → New uVision Project
  2. 选择保存路径,比如D:\Projects\Blink_LED
  3. 输入工程名,如Blink_LED
  4. 接下来弹出“Select Device”窗口:
    - 厂商选STMicroelectronics
    - 芯片选STM32F103C8
  5. 点击OK,Keil会自动问你是否添加启动文件 → 选Yes

此时你会发现工程里多了一个Startup组,里面有个.s文件(通常是startup_stm32f103xb.s),这就是启动代码,负责复位后跳转到main函数。


第三步:写代码前,先把结构理清楚

虽然我们现在只做一个简单的LED闪烁程序,但也要养成良好的工程习惯。典型的裸机工程目录结构应该是这样的:

Blink_LED/ ├── Src/ │ └── main.c ├── Inc/ │ (暂无头文件) └── Project/ ← Keil工程文件夹 └── Blink_LED.uvprojx

不过Keil本身不强制目录结构,我们可以在IDE内部组织好分组。

添加源文件组

在左侧“Project”面板中:

  • 右键Source Group 1→ Rename → 改成Src
  • 右键该组 → Add New Item to Group…
  • 选择C File (.c),命名为main.c,点击Add

现在你可以在这个文件里粘贴下面这段经典代码了。


第四步:动手写代码 —— 寄存器操控PA5引脚

我们以最常见的“Blue Pill”开发板为例,上面的LED接在PA5引脚,低电平点亮。

下面是纯寄存器操作的实现方式,不依赖任何库,让你看得清清楚楚:

// main.c #include "stm32f10x.h" // 简单延时函数 void Delay(uint32_t count) { for (; count != 0; count--); } int main(void) { // 1. 开启GPIOA时钟(APB2总线) RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // 2. 配置PA5为通用推挽输出,最大速度10MHz GPIOA->CRH &= ~GPIO_CRH_MODE5; // 清除模式位 GPIOA->CRH |= GPIO_CRH_MODE5_1; // 设置为10MHz输出 GPIOA->CRH &= ~GPIO_CRH_CNF5; // 清除配置位,设为通用推挽模式 // 3. 主循环:亮灭交替 while (1) { GPIOA->BSRR = GPIO_BSRR_BR5; // PA5输出低电平(点亮LED) Delay(0xFFFFF); GPIOA->BSRR = GPIO_BSRR_BS5; // PA5输出高电平(熄灭LED) Delay(0xFFFFF); } }

这段代码到底干了啥?

我们来逐行拆解:

行数功能说明
RCC->APB2ENR |= ...打开GPIOA的电源开关!所有外设操作前必须使能时钟,否则等于对着断电的灯泡按开关
GPIOA->CRH &= ~...清零PA5对应的控制位,准备重新设置
GPIOA->CRH |= MODE5_1设置输出速度为10MHz
CNF5 = 00表示通用推挽输出模式
BSRR = BS5 / BR5原子操作置高/拉低,不怕中断打断

⚠️ 注意:PA5属于高8位引脚(PIN8~15),所以配置的是CRH寄存器;如果是PA0~PA7,则要用CRL


第五步:配置编译选项,别让细节毁掉努力

点击菜单栏的Options for Target(快捷键 Alt+F7),这里有几个关键设置不能错。

Output 选项卡

  • ✅ 勾选Create HEX File
    → 方便以后用其他工具烧录(比如FlyMCU)

C/C++ 选项卡

  • Define 中添加:STM32F103xB
    → 让头文件知道你是哪种芯片,否则会用默认定义
  • Include Paths 添加当前头文件路径(如有)
    → 比如.\Inc

Debug 选项卡

  • 选择调试器:ST-Link Debugger
  • 点击 Settings → Flash Download
  • ✅ 勾选Program & Verify
  • ✅ 确保勾选了正确的Flash算法(一般会自动识别为 64KB Flash)

🔧 如果这里看不到Flash算法,请检查DFP是否安装正确,或者尝试重启Keil。


第六步:编译 → 下载 → 看灯闪!

一切就绪,按下Rebuild All按钮(锤子图标)。

等待几秒后,如果底部Build窗口显示:

"0 Error(s), 0 Warning(s)"

恭喜!编译通过!

接下来:

  1. 把ST-Link插到电脑USB口;
  2. 用杜邦线连接:
    - ST-Link → 开发板
    - SWCLK → SWCLK
    - SWDIO → SWDIO
    - GND → GND
    - 3.3V → 3.3V(可选供电)
  3. 上电开发板;
  4. 点击Download按钮(向下箭头);
  5. 成功提示:“Erase Done”、“Program Success”、“Verify OK”

最后按一下开发板上的复位按钮,或者断电重连,你应该能看到LED开始有节奏地闪烁!

🎉 成功了!这是属于你的第一个嵌入式“Hello World”。


常见问题急救包(收藏备用)

问题现象原因分析解决方法
编译报错:cannot open source input file 'stm32f10x.h'DFP未安装或芯片选错回到Pack Installer确认已安装对应DFP
下载时报错:No target connectedST-Link未识别或接线错误检查SWD接线,确保GND共地,尝试更换线材
程序下载成功但不运行BOOT模式错误确认BOOT0=0,BOOT1=0,正常从主闪存启动
LED常亮/常灭引脚接反或逻辑搞错查原理图,确认是低电平点亮还是高电平
Flash programming failed芯片被锁将BOOT0=1,复位进入ISP模式解锁,再恢复BOOT0=0

写在最后:这只是起点

你现在掌握的,不只是“怎么用Keil点灯”,而是一套完整的嵌入式开发思维模型

  • 如何搭建开发环境?
  • 如何创建工程结构?
  • 如何配置编译与下载参数?
  • 如何阅读数据手册理解寄存器?
  • 如何排查常见硬件软件问题?

这些能力,远比记住某一行代码重要得多。

下一步你可以尝试:

  • 用定时器替代Delay()函数,实现更精准延时;
  • 加一个按键,实现按下才闪灯;
  • 配合串口打印调试信息;
  • 引入标准外设库或HAL库,提升开发效率;

而这一切的基础,就是你现在亲手完成的这个小小工程。


如果你在操作过程中遇到任何问题,欢迎在评论区留言。我可以告诉你:每一个能跑起来的程序背后,都有几十次失败的尝试。坚持下去,你终将收获那份“灯亮那一刻”的喜悦。

🛠️ 下一篇预告:《STM32CubeMX + HAL库快速开发指南》——告别寄存器,图形化配置外设,效率翻倍!

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

鸣潮智能辅助系统深度解析:解放双手的游戏自动化革命

鸣潮智能辅助系统深度解析:解放双手的游戏自动化革命 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸上锁合成 自动肉鸽 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 还在为《…

作者头像 李华
网站建设 2026/4/14 11:54:22

Qwen3双模式大模型:本地高效推理新体验

Qwen3双模式大模型:本地高效推理新体验 【免费下载链接】Qwen3-14B-MLX-6bit 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3-14B-MLX-6bit 导语 阿里云推出的Qwen3系列大模型再添新成员——Qwen3-14B-MLX-6bit,该模型基于MLX框架实现…

作者头像 李华
网站建设 2026/4/7 11:40:38

Miniconda-Python3.11配合VS Code进行PyTorch调试

Miniconda-Python3.11 配合 VS Code 进行 PyTorch 调试 在深度学习项目日益复杂的今天,一个稳定、高效且可复现的开发环境,往往决定了从原型设计到模型上线之间的距离。你是否曾遇到过这样的场景:本地训练一切正常,换台机器却因依…

作者头像 李华
网站建设 2026/4/13 9:32:46

Steam成就自由掌控:2025终极操作手册

还在为那些永远无法解锁的Steam成就而烦恼吗?想要重新体验游戏但又不舍得放弃已经获得的成就?今天我要为你介绍一款实用的成就管理工具,让你在5分钟内成为成就管理达人! 【免费下载链接】SteamAchievementManager A manager for g…

作者头像 李华
网站建设 2026/4/12 23:21:10

Docker Volume持久化Miniconda-Python3.10环境与数据

Docker Volume持久化Miniconda-Python3.10环境与数据 在AI科研和工程开发中,最让人头疼的不是写不出模型,而是“在我机器上明明能跑”的问题。不同开发者之间的Python版本不一致、依赖包冲突、conda环境丢失……这些看似琐碎的问题,往往让实验…

作者头像 李华
网站建设 2026/4/13 14:47:35

HTML可视化训练日志:Miniconda环境中集成Plotly/TensorBoard

HTML可视化训练日志:Miniconda环境中集成Plotly/TensorBoard 在深度学习项目的日常开发中,一个常被忽视却至关重要的环节是——我们如何“看见”模型的训练过程? 当GPU风扇轰鸣、显存占用飙升时,如果只能靠print(loss)和肉眼扫日志…

作者头像 李华