news 2026/4/22 23:47:16

Keil5支持STM32F103的配置步骤全面讲解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Keil5支持STM32F103的配置步骤全面讲解

Keil5配置STM32F103开发环境:从零搭建一个可运行的工程

你是不是也遇到过这样的情况——刚装好Keil5,信心满满地想开始写代码,结果新建项目时却发现找不到STM32F103这个芯片?或者编译时报一堆“undefined identifier”错误,头文件包含进去也没用?

别急,这并不是你的操作有问题,而是你还没完成最关键的一环:在Keil中正确添加STM32F103的支持库。这一小步没走稳,后面步步都卡壳。

本文将带你一步步亲手搭建一个基于STM32F103的Keil5开发环境,不跳步骤、不甩术语,讲清楚“为什么要做”和“到底怎么做”。无论你是嵌入式新手,还是想系统梳理知识的老手,都能从中获得实战价值。


为什么Keil5不能直接用STM32F103?

很多人以为安装完Keil MDK就万事大吉了,其实不然。

Keil5(即μVision5)采用的是模块化架构,它的核心是一个通用的ARM Cortex-M开发平台,但默认并不包含所有MCU的具体支持文件。换句话说:

Keil只提供“骨架”,厂商才给“血肉”

像STM32F103这种由ST(意法半导体)生产的芯片,其寄存器定义、启动代码、Flash烧录算法等细节,必须通过官方发布的设备支持包(Device Family Pack, DFP)来补充。

如果你没有安装对应的DFP,Keil自然不认识STM32F103,也就无法创建项目、编译代码或下载程序。


核心组件解析:CMSIS与DFP到底是什么?

要真正理解配置过程,我们得先搞明白两个关键概念:CMSISSTM32F1xx_DFP

CMSIS:统一Cortex-M世界的“普通话”

想象一下,全世界每个MCU厂商都用自己的方言写底层代码,那开发者岂不是每换一款芯片就要重新学一门语言?

Arm为此推出了CMSIS(Cortex Microcontroller Software Interface Standard)——一套标准化接口规范,相当于为所有Cortex-M芯片定了一门“普通话”。

它主要包括:
-core_cm3.h:定义Cortex-M3内核寄存器
-system_stm32f10x.c:系统时钟初始化函数
- 启动文件模板:复位后第一条指令怎么执行
- 标准API:如SysTick_Config()用于配置系统滴答定时器

有了CMSIS,哪怕你从STM32F1换成GD32,大部分基础代码都可以复用。

STM32F1xx_DFP:让Keil认识STM32F1系列的“身份证”

如果说CMSIS是通用标准,那么STM32F1xx Device Family Pack就是ST专门为Keil准备的一套“插件”,里面包含了STM32F1系列所有型号的专属信息:

内容作用
头文件(stm32f10x.h定义外设寄存器地址和位域
启动文件(.s汇编)设置栈指针、调用SystemInit、跳转main
Flash编程算法支持通过ST-Link/J-Link下载程序到Flash
分散加载脚本(scatter file)告诉链接器RAM/Flash大小和分布

当你在Keil里选择“STM32F103RB”,IDE会自动从DFP中提取对应资源,生成正确的项目结构。

✅ 所以说:

CMSIS负责“通用规则”,DFP负责“具体实现”

只有两者齐全,Keil才能顺利编译并下载STM32F103的程序。


实战教学:手把手完成Keil5 + STM32F103环境搭建

下面我们进入正题,一步一步教你如何完成Keil5添加STM32F103芯片库的全过程。

⚠️ 提示:以下操作适用于Windows系统下的Keil MDK 5.x版本(推荐使用V5.38以上)


第一步:安装Keil MDK基础环境

前往 Keil官网 下载MDK-ARM安装包(注意不是C51/C251版本)。

安装过程中建议勾选:
- ARM Compiler(至少包含AC5)
- uVision IDE
- Documentation

安装路径尽量不要带中文或空格,例如推荐使用:

C:\Keil_v5\

第二步:打开Pack Installer,搜索并安装STM32F1支持包

启动μVision5,无需新建项目,直接点击菜单栏:

Project → Manage → Pack Installer

此时会弹出Pack Installer窗口(首次使用可能需要联网更新索引)。

在左侧搜索框输入关键词:

STM32F1

你会看到一个名为STM32F1xx_DFP的条目,发布方是“Keil Software GmbH”,版本号通常为1.0.x2.4.0不等。

📌 点击右侧的Install按钮,开始下载并安装该设备包。

安装完成后,你会看到状态变为“Installed”,同时左侧设备列表中会出现:

STMicroelectronics └── STM32F1 Series ├── STM32F103 │ ├── STM32F103C8 │ ├── STM32F103R8 │ ├── STM32F103RB │ └── ... └── 其他子系列...

✅ 至此,Keil已经正式“认识”STM32F103了!


第三步:创建第一个基于STM32F103的项目

现在我们可以创建一个真实可用的工程了。

1. 新建项目

Project → New μVision Project

选择保存路径,比如:

D:\Projects\STM32F103_Test\

命名项目为LED_Blink

2. 选择目标设备

接下来是关键一步!

在弹出的“Select Device for Target”窗口中,依次展开:

STMicroelectronics → STM32F1 Series → STM32F103 → STM32F103RB

📌 这里的“RB”代表64KB Flash版本(如STM32F103RBT6),如果你用的是C8(20KB Flash),请选择对应型号。

✔️ 勾选“Copy STM32F1xx_DFP files into project folder”(可选,便于移植)

点击OK,Keil将自动生成以下文件:
-startup_stm32f103xe.s(启动文件)
-system_stm32f10x.c(系统初始化)
- 默认分散加载文件(.sct


第四步:编写最简测试代码

右键Source Group 1 → Add New Item to Group…

创建一个新的C文件,命名为main.c,内容如下:

#include "stm32f10x.h" // 简单延时函数 void delay(uint32_t count) { while (count--) { __NOP(); // 编译器屏障 } } int main(void) { // 1. 初始化系统时钟(使用内部HSI,默认约8MHz) SystemInit(); // 2. 开启GPIOC时钟(APB2总线) RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; // 3. 配置PC13为推挽输出(连接板载LED) GPIOC->CRH &= ~(0xF << 20); // 清除模式位 GPIOC->CRH |= (GPIO_CRH_MODE13_1 | GPIO_CRH_CNF13_0); // 50MHz Push-Pull // 主循环:闪烁LED while (1) { GPIOC->BSRR = GPIO_BSRR_BR13; // LED off delay(0xFFFFF); GPIOC->BSRR = GPIO_BSRR_BS13; // LED on delay(0xFFFFF); } }

💡 说明:
- 使用了CMSIS标准头文件stm32f10x.h
- 直接操作RCC和GPIO寄存器,无需HAL库
-__NOP()是内联汇编空操作,防止编译器优化掉延时循环


第五步:配置编译与下载选项

右键左侧的“Target 1” → Options for Target。

【Output】标签页
  • ✔️ 勾选 “Create HEX File” —— 便于后续ISP烧录
【C/C++】标签页
  • 在“Define”框中添加宏定义:
    STM32F103xB, USE_STDPERIPH_DRIVER

    ✅ 必须添加STM32F103xB,否则头文件不会启用对应外设定义!

【Debug】标签页
  • 选择调试器(如ST-Link Debugger)
  • 点击Settings → Flash Download,确认已勾选“Download to Flash”

如果Flash算法未自动加载,点击“Add”按钮,选择:

STM32F10x High-density Flash

或其他匹配你芯片容量的算法(Medium/Low-density)。


第六步:编译 & 下载 & 运行!

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

若一切正常,底部Build Output应显示:

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

连接ST-Link和目标板,按下Load按钮(向下箭头图标),程序将被烧录进STM32F103的Flash。

板载LED开始闪烁?恭喜你!第一个基于Keil5的STM32F103工程成功运行!


常见问题排查指南(避坑清单)

❌ 问题1:设备列表里找不到STM32F103?

原因:未安装STM32F1xx_DFP
解决:打开Pack Installer,确保网络通畅,手动搜索并安装

❌ 问题2:编译报错“’RCC’ undeclared”?

原因:未定义芯片型号宏
解决:在Options → C/C++ → Define 中添加STM32F103xB

❌ 问题3:程序能编译但无法下载?

原因:缺少Flash编程算法
解决:在Debug → Settings → Flash Download 中添加对应算法

❌ 问题4:使用CubeMX生成的代码提示头文件错误?

原因:CubeMX默认生成HAL库工程,而Keil DFP默认集成StdPeriph库
解决:要么改用HAL库管理方式(推荐STM32CubeIDE),要么调整头文件包含逻辑


设计建议与最佳实践

1. 芯片选型要精准

STM32F103有多个子系列:
-Low-density:Flash ≤ 32KB(如C8)
-Medium-density:≤ 128KB(如CB)
-High-density:≤ 512KB(如RE/VE)

不同密度使用的启动文件和Flash算法不同,请务必匹配。

2. 宏定义不可少

在Keil中,stm32f10x.h会根据宏来决定启用哪些外设。常见宏包括:

STM32F103xB // 64KB Flash STM32F103xC // 128KB STM32F103xE // 512KB

务必在项目设置中正确定义。

3. 推荐使用AC5编译器

虽然Keil支持AC6,但许多旧版标准外设库对AC6兼容性不佳。对于传统项目,建议保持使用ARM Compiler 5。

4. 版本控制策略

将以下文件纳入Git管理:
-.uvprojx(项目配置)
-.uvguixxx(用户界面布局)
- 源码与头文件

排除以下目录:
-Objects/(编译中间文件)
-Listings/
-.axf,.hex,.bin


总结:掌握底层原理,才能游刃有余

通过本文的实际操作,你应该已经完成了从零到一的突破:不仅知道如何在Keil5中添加STM32F103支持,更理解了背后的技术逻辑。

回顾一下关键点:

  • CMSIS是跨平台开发的基础,提供了统一的内核接口;
  • STM32F1xx_DFP是ST提供的官方支持包,让Keil识别具体芯片;
  • 正确设置宏定义Flash算法是避免编译与下载失败的关键;
  • 即使未来转向STM32CubeIDE或VS Code+PlatformIO,这套认知依然适用。

当你不再把开发环境当作“黑盒子”,而是清楚每一部分的作用时,你就真正掌握了嵌入式开发的主动权。


如果你在配置过程中遇到了其他挑战,欢迎在评论区留言交流。下一篇文章我们将深入探讨:如何在裸机环境下实现UART通信、PWM输出和ADC采样,敬请期待!

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

JFlash下载程序步骤工业场景应用全面讲解

工业级固件烧录实战&#xff1a;从J-Flash下载程序步骤到产线自动化部署你有没有遇到过这样的场景&#xff1f;产线上&#xff0c;十几名工人排着队&#xff0c;每人手里拿着一块电路板&#xff0c;连上电脑、打开IDE、点击“Download”&#xff0c;等个十几秒再拔下来……效率…

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

亲测IndexTTS2 V23版本,情感控制太真实了!附完整搭建过程

亲测IndexTTS2 V23版本&#xff0c;情感控制太真实了&#xff01;附完整搭建过程 在语音合成技术飞速发展的今天&#xff0c;用户对TTS&#xff08;Text-to-Speech&#xff09;系统的要求早已超越“能说话”的基础功能。自然度、语调变化、情绪表达成为衡量语音质量的核心指标…

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

用GitHub镜像站快速部署IndexTTS2,网络问题一招解决

用GitHub镜像站快速部署IndexTTS2&#xff0c;网络问题一招解决 在语音合成技术日益普及的今天&#xff0c;高质量、低延迟、可本地化运行的文本转语音&#xff08;TTS&#xff09;系统成为AI应用开发中的关键组件。尤其在中文场景下&#xff0c;用户对语音自然度、语调连贯性…

作者头像 李华
网站建设 2026/4/18 21:01:07

GetQzonehistory:一键导出QQ空间历史说说的终极指南

GetQzonehistory&#xff1a;一键导出QQ空间历史说说的终极指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 还在担心QQ空间的珍贵记忆会丢失吗&#xff1f;GetQzonehistory是一款强…

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

Holistic Tracking工业巡检应用:手势指令控制系统案例

Holistic Tracking工业巡检应用&#xff1a;手势指令控制系统案例 1. 引言&#xff1a;从感知到交互的工业智能化跃迁 在智能制造与工业4.0持续推进的背景下&#xff0c;人机协同作业正成为工厂自动化升级的关键路径。传统的人机交互依赖物理按钮、语音指令或手持终端&#x…

作者头像 李华