news 2026/1/14 7:01:59

新手必看:Keil5烧录STM32F103入门教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
新手必看:Keil5烧录STM32F103入门教程

手把手教你用Keil5烧录STM32F103:从零开始的实战入门

你是不是也经历过这样的时刻?买了一块“蓝丸”开发板,装好了Keil,写完代码点击下载——结果弹出一堆错误:“No target connected”、“Cannot access target”……一头雾水,不知道问题出在哪。

别急。每一个STM32开发者都曾从这一步起步。程序烧录,是连接代码与硬件的第一座桥梁。今天,我们就抛开复杂术语和官方文档的晦涩表达,用最贴近实战的方式,带你一步步搞定Keil5 + ST-Link 烧录 STM32F103的全过程。


为什么选STM32F103和Keil5?

在嵌入式世界里,STM32就像单片机界的“Linux”。而其中的STM32F103C8T6(俗称“蓝丸”),堪称入门者的“第一课老师”。

它便宜(十几块钱就能买到最小系统板)、资料多、生态成熟,更重要的是——支持Keil、支持ST-Link,调试方便。配合Keil MDK(uVision5)这个老牌IDE,构成了无数工程师职业生涯的第一个“Hello World”——点亮LED。

但别小看这个过程。哪怕只是把一段简单的GPIO初始化代码下载进芯片,背后其实涉及了编译、链接、调试协议、Flash编程算法等一整套机制。

接下来,我们不讲大道理,只讲你能动手操作的细节。


第一步:环境搭建——软件准备不能少

1. 安装Keil MDK-ARM(推荐v5.37+)

去Arm官网或国内镜像站下载Keil MDK-ARM(不是C51版本!)。安装时建议路径不要带中文和空格,比如:

D:\Keil_v5\

安装完成后打开,你会看到熟悉的uVision界面。

⚠️ 注意:免费版有32KB代码大小限制。如果你的项目超过这个大小,会提示“Example restricted in code size”,需要注册或购买授权。不过对于初学者点灯、读按键完全够用。


2. 安装STM32F1系列支持包(Device Family Pack)

这是关键一步!没有这个包,Keil就不认识STM32F103。

打开Keil →Pack Installer(右上角图标)→ 搜索 “STM32F1” → 找到STM32F1xx_DFP包 → 安装最新版。

✅ 安装成功后,在新建工程选择芯片时,就能看到STM32F103C8之类的型号了。


3. 安装ST-Link驱动

虽然现在很多系统可以即插即用,但为了稳定,建议手动安装官方驱动。

前往ST官网搜索STSW-LINK009,下载并安装USB驱动。插入ST-Link后,设备管理器中应出现类似:

STMicroelectronics STLink Virtual COM Port (COMx) STLink USB Driver

如果没有,可能是驱动未正确安装,或者使用的是山寨ST-Link(常见问题来源之一)。


第二步:创建你的第一个工程

让我们以最常见的STM32F103C8T6为例。

1. 新建工程

  • 打开Keil → Project → New uVision Project
  • 路径不要有中文
  • 输入工程名,如LED_Blink
  • 选择目标芯片:STM32F103C8(注意不是C6或C4)

Keil会自动提示是否添加启动文件,点“是”。


2. 添加必要文件

你需要至少两个文件:
- 启动文件:startup_stm32f103xb.s(已自动添加)
- 系统初始化文件:system_stm32f1xx.c

后者可以在Keil安装目录下的\ARM\PACK\...\Device\Source\Templates\system_stm32f1xx.c找到,复制到工程文件夹,并在Keil中右键“Add Existing Files”。


3. 编写主函数

新建一个main.c文件,内容如下(简化版GPIO控制):

#include "stm32f1xx.h" void delay(volatile uint32_t count) { while(count--); } int main(void) { // 开启GPIOA时钟 RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // PA1配置为推挽输出,最大速度10MHz GPIOA->CRL &= ~GPIO_CRL_MODE1; GPIOA->CRL |= GPIO_CRL_MODE1_0; // 10MHz GPIOA->CRL &= ~GPIO_CRL_CNF1; // 推挽输出 while(1) { GPIOA->BSRR = GPIO_BSRR_BR1; // PA1拉低(假设LED共阳) delay(0xFFFFF); GPIOA->BSRR = GPIO_BSRR_BS1; // PA1拉高 delay(0xFFFFF); } }

💡 提示:这段代码直接操作寄存器,适合理解底层原理。后续可用HAL库或STM32CubeMX生成更规范的代码。


4. 编译工程

点击工具栏的“Build”按钮(锤子图标)。

如果一切正常,底部会显示:

".\Objects\LED_Blink.axf" - 0 Error(s), 0 Warning(s).

说明.axf可执行文件已经生成,接下来就可以下载了。


第三步:连接硬件,准备烧录

现在进入最关键的环节:把代码“灌”进STM32芯片。

你需要这些硬件:

  • STM32F103C8T6最小系统板(“蓝丸”)
  • ST-Link V2调试器(原装或兼容)
  • 杜邦线若干
  • USB线(给ST-Link供电)

正确接线方式(SWD模式)

ST-LinkSTM32F103C8T6
SWCLKPA14 (JTCK)
SWDIOPA13 (JTMS)
GNDGND
3.3V3.3V(可选,用于给目标板供电)

📌重点提醒:
- 不要接错SWCLK和SWDIO,否则无法识别目标。
- GND必须共地!这是最容易被忽视的问题。
- 如果你的“蓝丸”板自带3.3V稳压,建议由ST-Link提供电源(接3.3V),避免双电源冲突。


配置Keil中的下载选项

进入Project → Options for Target → Debug

  1. 选择左侧 “ST-Link Debugger”
  2. 点击右侧 “Settings”

在新窗口中:
- 切换到Debug标签页,确认是否识别到设备(Serial No. 显示出来)
- 切换到Flash Download标签页:
- ✅ 勾选 “Download to Flash”
- 点击 “Add” → 选择STM32F1xx Medium Density Flash(因为C8T6是128KB Flash)
- 地址范围自动填充为0x08000000 - 0x0801FFFF

❗ 错误示范:若误选 High Density 或 Low Density,会导致烧录失败甚至越界写入!


第四步:点击下载,见证奇迹

回到主界面,点击工具栏上的“Load”按钮(向下箭头图标)。

此时观察输出窗口:

Connecting... Erase Done. Programming Done. Verify OK.

恭喜!你的程序已经成功写入STM32的Flash中。

按下复位按钮,或者断电再上电,你应该能看到连接在PA1上的LED开始闪烁。

🎉 成功迈出第一步!


常见问题排查手册(新手必看)

别以为一次就能成功。下面这些问题,我当年也都踩过坑。

现象可能原因解决方案
No target connected接线松动、反接、虚焊检查SWCLK/SWDIO是否接对,重新插拔
Cannot access target驱动未安装 / 下载器损坏重装ST-Link驱动,换一台电脑测试
Target not respondingBOOT0引脚悬空或拉高确保BOOT0接地(GND)
Flash programming failedFlash算法选错改为Medium Density(对应128KB)
MCU locked / Protected触发了读保护使用ST-Link Utility解除保护
下载成功但不运行主频配置错误 / 时钟未启用检查SystemInit()是否调用,或改用默认设置

特别注意:BOOT引脚状态

STM32有三种启动方式,由BOOT0BOOT1控制:

BOOT0BOOT1启动区域
0X主Flash(正常运行)✅
10系统存储器(ISP烧录)
11SRAM

👉所以平时运行程序时,BOOT0一定要接地!

有些“蓝丸”板子BOOT0默认通过电阻下拉到GND,没问题;但也有一些是悬空的,容易受干扰导致无法启动。

🔧 建议:焊接一个10kΩ电阻将BOOT0下拉到GND,确保稳定性。


进阶技巧:让开发效率翻倍

当你已经能熟练烧录程序,不妨试试这些实用技巧:

1. 启用“Update Target before Debugging”

Options → Debug → Settings → Flash Download中勾选此项。

作用:每次进入调试模式前,自动重新编译并下载最新代码,避免运行旧版本。

2. 使用Nucleo开发板自带ST-Link

Nucleo-F103RB这类开发板,本身就集成了ST-Link电路。你可以剪断跳线,把它的ST-Link拿出来“共享”给其他目标板使用,省去买额外探针的钱。

3. 学会看.map文件分析内存占用

编译后生成的.map文件能告诉你代码占了多少Flash、变量用了多少RAM。对优化资源很有帮助。


写在最后:烧录不是终点,而是起点

也许你现在觉得,“不就是点个按钮吗?” 但当你第一次亲手把代码变成硬件动作时,那种成就感是无可替代的。

掌握Keil5烧录STM32F103的能力,意味着你已经:
- 理解了从C代码到机器指令的转换流程
- 熟悉了SWD调试接口的工作机制
- 具备了基本的软硬件联调能力

而这正是所有高级功能的基础——无论是FreeRTOS多任务调度、USART串口通信,还是I2C驱动OLED屏幕,都建立在这个稳定的“烧录—运行—调试”循环之上。


下一步做什么?

动手实践是最好的老师。建议你尝试以下项目巩固技能:
1. 实现按键控制LED开关(加入中断)
2. 用定时器精确控制闪烁频率
3. 通过串口打印调试信息(USART + printf重定向)
4. 尝试用STM32CubeMX生成工程,对比差异

如果你在过程中遇到任何问题,欢迎留言交流。毕竟,每个老手,都曾是个连ST-Link都认不出的新手。

一起加油吧,未来的嵌入式工程师!

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

DownKyi终极指南:一键解锁B站视频下载的完整解决方案

DownKyi终极指南:一键解锁B站视频下载的完整解决方案 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&#x…

作者头像 李华
网站建设 2026/1/7 6:26:15

深蓝词库转换:3分钟搞定输入法数据迁移的终极指南

深蓝词库转换:3分钟搞定输入法数据迁移的终极指南 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 还在为更换输入法而烦恼吗?深蓝词库转换工具…

作者头像 李华
网站建设 2026/1/7 6:26:12

RDP Wrapper完全指南:解锁Windows隐藏的多用户远程桌面功能

RDP Wrapper完全指南:解锁Windows隐藏的多用户远程桌面功能 【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap 还在为Windows家庭版无法实现多用户远程连接而烦恼吗?RDP Wrapper作为一款轻量级…

作者头像 李华
网站建设 2026/1/11 7:03:53

AO3镜像站完全攻略:轻松解锁全球同人作品宝库

AO3镜像站完全攻略:轻松解锁全球同人作品宝库 【免费下载链接】AO3-Mirror-Site 项目地址: https://gitcode.com/gh_mirrors/ao/AO3-Mirror-Site 还在为无法访问AO3而苦恼吗?想象一下,当其他同人爱好者正在畅游作品海洋时&#xff0c…

作者头像 李华
网站建设 2026/1/12 19:32:26

百度网盘提取码智能识别工具:极速解锁加密分享的完整指南

百度网盘提取码智能识别工具:极速解锁加密分享的完整指南 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为繁琐的百度网盘密码查找而烦恼吗?baidupankey作为一款专业的百度网盘密码智能解析工具&a…

作者头像 李华