news 2026/4/23 9:55:58

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/18 3:26:36

nrf52832的mdk下载程序在运动追踪器中的项目应用

nRF52832固件下载实战:运动追踪器开发中的MDK调试全解析你有没有遇到过这样的场景?熬夜调通了新的步态识别算法,兴冲冲打开Keil准备烧录验证,结果“Flash Download Failed”弹窗冷冰冰地跳出来;或者设备莫名其妙卡在启…

作者头像 李华
网站建设 2026/4/23 8:20:17

Conda环境优先级设置:channel_priority详解

Conda环境优先级设置:channel_priority深度解析 在构建AI模型或进行大规模数据处理时,你是否曾遇到过这样的问题——同样的代码,在同事的机器上运行正常,到了你的环境中却报出ImportError、illegal instruction,甚至Py…

作者头像 李华
网站建设 2026/4/23 8:18:50

利用Miniconda创建包含PyTorch的CI/CD流水线

利用Miniconda创建包含PyTorch的CI/CD流水线 在现代AI工程实践中,一个常见的痛点是:“我本地跑得好好的,怎么一进CI就报错?”——这种“环境不一致”问题背后,往往是Python版本差异、依赖冲突或CUDA驱动不匹配。随着深…

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

分析用户行为数据优化产品与内容匹配度

分析用户行为数据优化产品与内容匹配度 在今天这个信息爆炸的时代,用户每天面对成千上万条内容——从短视频到新闻推送,从商品推荐到音乐播放列表。可真正能“打动”他们的,往往只是极少数。如何让产品更懂用户?答案藏在他们的一次…

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

腾讯混元3D-Part:如何让3D模型智能分体更精准高效?

腾讯混元实验室正式发布专注于3D模型智能分体的全新工具Hunyuan3D-Part,通过P3-SAM原生3D部分分割与X-Part形状分解技术组合,为3D内容创作提供更精准、高效的智能分体解决方案。 【免费下载链接】Hunyuan3D-Part 腾讯混元3D-Part 项目地址: https://ai…

作者头像 李华
网站建设 2026/4/22 13:00:00

ST7789彩屏驱动原理:SPI接口核心要点总结

深入理解ST7789彩屏驱动:从SPI通信到实战调优你有没有遇到过这样的情况?接上一块1.3英寸的圆形或方形彩屏,代码烧进去,结果屏幕要么全白、要么花屏乱码,甚至完全没反应。调试几天无果,最后怀疑人生——“难…

作者头像 李华