news 2026/3/24 22:21:36

Keil5烧录程序STM32F103:手把手教程(从零实现)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Keil5烧录程序STM32F103:手把手教程(从零实现)

从零开始:手把手教你用 Keil5 给 STM32F103 烧录程序

你有没有过这样的经历?
代码写得飞快,编译也没报错,信心满满点下“下载”按钮——结果弹窗跳出一行红字:“Cannot access target.
然后就是一顿查线、换电源、重装驱动……最后发现,只是BOOT 模式没设对

别担心,这几乎是每个嵌入式新手都会踩的坑。今天我们就来彻底讲清楚:如何用 Keil5 成功烧录程序到 STM32F103 上,不靠玄学,只讲逻辑和实战细节。


一、为什么是 Keil5 + STM32F103?

在众多开发组合中,Keil MDK(即 Keil5)搭配 STM32F103是最经典的入门组合之一。

  • STM32F103C8T6(俗称“蓝丸”或“最小系统板”),价格便宜、资料丰富,适合学习;
  • Keil5虽然不是免费的,但它编译效率高、调试稳定,尤其对 Cortex-M3 支持极佳;
  • 加上官方出品的ST-Link 下载器,整个链路清晰可控,非常适合打基础。

💡 提示:本文适用于所有基于 STM32F103 的开发板,无论你是用自制板、Nucleo 板还是某宝买的“黑板”。


二、你需要准备什么?

硬件清单

名称说明
PC 主机Windows 系统(推荐 Win10/Win11)
STM32F103 开发板如最小系统板、Nucleo-F103RB 等
ST-Link/V2 或兼容下载器可购买独立模块或使用板载调试器
杜邦线若干建议使用 4 根:SWCLK、SWDIO、GND、3.3V

软件环境

工具安装建议
Keil MDK-ARM V5下载官网版本,注意注册 License(可试用)
ST-Link 驱动安装 Keil 时自带,也可单独安装 ST-Link USBDriver
(可选)STM32CubeProgrammer用于恢复锁死芯片

三、先搞明白:烧录到底发生了什么?

很多人以为“烧录”就是把.hex文件复制进单片机,其实远不止如此。

真正完整的流程是这样的:

[Keil 编译] → [生成 .hex/.bin] → [通过 ST-Link 发送指令] → [目标芯片进入调试模式] → [运行 Flash Loader 程序] → [擦除旧代码 → 写入新数据 → 校验一致性] → [复位运行]

这个过程依赖三个关键组件协同工作:

  1. 调试接口协议(SWD)
  2. Flash 编程算法(Algorithm)
  3. 硬件连接可靠性

下面我们一个一个拆开来看。


四、核心部件详解:SWD 接口与 ST-Link

1. SWD 是什么?为什么不用 JTAG?

JTAG 需要 TMS、TCK、TDI、TDO 至少 4 根线,而SWD 只需要两根线就能完成调试和烧录

  • SWCLK:时钟信号(输出)
  • SWDIO:双向数据线(输入/输出)

此外还有:
-GND:共地(必须接!)
-3.3V:给目标板供电(可选,视情况而定)

✅ 正确接法示例(ST-Link V2 → STM32F103):

ST-Link → STM32F103 --------------------------------- SWCLK → PA14 (SWCLK) SWDIO → PA13 (SWDIO) GND → GND 3.3V → VDD / 3.3V(如果由 ST-Link 供电)

⚠️ 注意事项:
- 不要接错顺序!特别是 GND 和 3.3V。
- 若目标板已有独立电源,请勿再从 ST-Link 接 3.3V,避免反灌电。
- 引脚有静电保护最好加 100Ω 电阻隔离。


2. ST-Link 到底做了什么?

它不只是个“转接头”,而是一个智能桥接设备:

  • 将 PC 上的 USB 协议转换为 ARM 标准的 SWD 协议;
  • 在 Keil 中点击“Download”后,它会向 STM32 发送一系列调试命令;
  • 触发目标芯片内部的Debug Access Port (DAP),进而访问内存和外设;
  • 执行 Flash 擦写操作时,实际是在 RAM 中临时运行一段“Loader 程序”。

所以,即使你的主程序跑飞了,只要 DAP 没被禁用,依然可以重新烧录。


五、Keil5 工程配置实战

第一步:创建工程并选择芯片

打开 Keil uVision5:

  1. Project → New uVision Project
  2. 保存路径不要含中文
  3. 选择芯片型号:STMicroelectronics → STM32F103C8(根据你的具体型号选)

📌 关键提示:一定要选对芯片!否则 Flash 算法可能不匹配,导致下载失败。

Keil 会自动加载启动文件(startup_stm32f10x_md.s)、系统初始化函数等。


第二步:添加源码(以点亮 LED 为例)

新建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 输出模式 // CNF13 = 00 表示通用推挽输出 for (;;) { GPIOC->BSRR = GPIO_BSRR_BR13; // PC13 输出低 delay(0xFFFFF); GPIOC->BSRR = GPIO_BSRR_BS13; // PC13 输出高 delay(0xFFFFF); } }

📌 解释几个关键点:
- 直接操作寄存器,不依赖库函数,便于理解底层机制;
-BSRR寄存器支持原子级置位/清零,比直接赋值更安全;
-RCC->APB2ENR控制外设时钟使能,这是 STM32 的基本操作规范。


第三步:设置下载工具(重点!)

这是最容易出错的地方!

进入:Project → Options for Target → Debug

1. 选择调试器
  • 左侧选择 “ST-Link Debugger
  • 点击右侧 “Settings”
2. 在 “Debug” 选项卡中
  • 确认 Connection 为 “SWD”
  • Speed 建议设为 “4 MHz” 或更高(太低会慢)
3. 切换到 “Flash Download” 选项卡
  • ✅ 勾选 “Download to Flash
  • ✅ 勾选 “Reset and Run” → 烧完自动运行,不用手动复位
  • 查看下方是否列出正确的 Flash 算法,例如:
    STM32F10x High-density: 512 KB Flash
    如果显示 “No Algorithm Found”,说明芯片识别错误或 Flash 大小不匹配。

🔧 解决方法:
- 回到主界面重新选择正确芯片型号;
- 或手动添加合适的 Flash 算法文件(.flm)。


六、动手烧录!一键下载全流程

一切就绪后,执行以下步骤:

  1. 上电目标板(确保 VDD ≈ 3.3V)
  2. 连接 ST-Link 并插到电脑 USB 口
  3. Keil 中按下快捷键F8或点击工具栏 “Load” 按钮

等待几秒,状态栏应出现:

Programming... Erase Done. Program Done. Verify OK. Application running...

🎉 成功!LED 应该开始闪烁了。


七、常见问题与避坑指南

问题现象可能原因解决方案
Cannot access target接线松动 / 未共地 / 电压异常检查 GND 是否连通,测量 VDD 是否正常
No target connectedST-Link 驱动未安装安装最新版 ST-Link USBDriver(Keil 自带)
Flash programming failed芯片被读保护或锁死使用 STM32CubeProgrammer 连接后解除保护
下载成功但不运行BOOT 模式错误确保 BOOT0 = 0,BOOT1 = x(通常接地即可)
烧录速度极慢SWD 时钟频率太低在 Settings 中将 Clock 提高至 4~10MHz
第一次能烧,第二次失败复位引脚悬空导致复位不稳定给 NRST 加 10kΩ 上拉电阻

💡高级技巧:如何判断芯片是否已被锁死?

打开 STM32CubeProgrammer:
- 选择 SWD 接口 → Connect
- 如果提示 “No device found” 或 “Protected”,说明需要解除保护
- 使用 “Remove Protection” 功能即可恢复


八、那些没人告诉你的重要细节

1. BOOT 引脚怎么设置?

BOOT0BOOT1启动方式
0x主闪存存储器(正常运行程序)✅
10系统存储器(串口 ISP 模式)
11内置 SRAM(调试用)

👉 日常烧录请保持BOOT0 = 0,烧完想运行也必须切回 0!

2. 是否需要每次烧录都接 3.3V?

  • 如果你的开发板有自己的稳压电源(如 USB 供电),就不需要从 ST-Link 取电;
  • 如果是无源最小系统板(只有芯片+晶振+电容),可以用 ST-Link 供电。

但要注意:ST-Link 最大输出电流约 100mA,带不动大负载。

3. Reset and Run 有什么用?

勾选后,Keil 会在下载完成后自动发送复位信号,并跳转到用户程序入口运行。

如果不勾选,程序虽然写进去了,但 CPU 还停在调试状态,必须手动按复位键才能看到效果。


九、延伸思考:这套流程还能怎么优化?

一旦你掌握了这套“Keil + ST-Link + SWD”的基本范式,就可以轻松扩展到其他场景:

  • 换成J-Link?只需在 Keil 中切换调试器名称即可;
  • 改用VS Code + Cortex-Debug + OpenOCD?底层协议完全一致;
  • 移植到STM32F4/H7?除了 Flash 算法不同,其余流程几乎一样;
  • 实现远程固件升级(IAP)?现在你知道了 Flash 如何擦写,下一步就是自己写 Bootloader。

最后的话

学会“用 Keil5 给 STM32F103 烧录程序”,看似只是一个小小的操作,实则是嵌入式开发的第一道门槛。

跨过去之后你会发现:
- 原来调试器不是魔法盒子;
- 原来 Flash 写入是有协议的;
- 原来每一个.hex文件背后都有精密的控制流程。

当你下次遇到“无法连接目标”时,不会再盲目重启,而是冷静地问自己:

“线接对了吗?”
“电源正常吗?”
“BOOT 设置对了吗?”
“驱动装了吗?”
“Flash 算法匹配吗?”

这才是真正的工程师思维。

如果你正在学习嵌入式开发,不妨现在就打开 Keil,亲手烧录一遍这个最简单的 LED 程序。
哪怕只成功一次,你也已经踏出了成为硬件开发者的关键一步。

如有疑问,欢迎留言交流。一起进步!

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

AnimeGANv2技术揭秘:8MB模型的压缩技术

AnimeGANv2技术揭秘:8MB模型的压缩技术 1. 引言:轻量级AI如何实现高质量动漫风格迁移 随着深度学习在图像生成领域的快速发展,风格迁移技术已从实验室走向大众应用。AnimeGANv2作为一款专为“照片转动漫”设计的生成对抗网络(GA…

作者头像 李华
网站建设 2026/3/15 8:51:12

AI图像风格迁移新标杆:AnimeGANv2实战评测教程

AI图像风格迁移新标杆:AnimeGANv2实战评测教程 1. 引言 随着深度学习技术的不断演进,AI在图像生成与风格迁移领域的表现愈发惊艳。其中,AnimeGANv2 作为轻量级、高效率的照片转二次元动漫模型,凭借其出色的画风还原能力与极低的…

作者头像 李华
网站建设 2026/3/24 15:21:43

AI如何帮你快速生成TIMES NEW ROMAN风格字体设计

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个AI工具,输入任意文字内容,自动生成TIMES NEW ROMAN风格的字体变体设计。要求:1. 分析TIMES NEW ROMAN的笔画特征(衬线、字重…

作者头像 李华
网站建设 2026/3/23 17:09:49

亲测通义千问2.5-7B-Instruct:代码生成效果超预期

亲测通义千问2.5-7B-Instruct:代码生成效果超预期 1. 引言 在当前大模型快速演进的背景下,中等参数量级的模型正逐渐成为开发者落地AI能力的重要选择。通义千问2.5-7B-Instruct作为阿里于2024年9月发布的Qwen2.5系列中的主力指令微调模型,以…

作者头像 李华
网站建设 2026/3/23 7:55:22

低成本GPU方案部署AnimeGANv2,推理速度提升200%实战案例

低成本GPU方案部署AnimeGANv2,推理速度提升200%实战案例 1. 背景与挑战:轻量级模型在边缘场景的性能瓶颈 随着AI图像风格迁移技术的普及,将真实照片转换为二次元动漫风格的应用需求持续增长。AnimeGANv2作为当前最受欢迎的轻量级风格迁移模…

作者头像 李华
网站建设 2026/3/20 8:03:49

如何用AI自动解析和优化Windows.edb数据库

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个工具,能够自动解析Windows.edb数据库文件,提取文件索引、搜索历史等关键信息,并提供优化建议。工具应支持批量处理,生成可视…

作者头像 李华