目录
-
- [1、获取 KEIL5 安装包](#1、获取 KEIL5 安装包)
- [2、开始安装 KEIL5](#2、开始安装 KEIL5)
-
- [2.1、 激活](#2.1、 激活)
- 2.2、安装`DFP`库
- 3、工程创建
- 4、搭建框架
- 5、开始编写代码
1、获取 KEIL5 安装包
要想获得 KEIL5 的安装包,在百度里面搜索"KEIL5 下载"即可找到很多网友提供的下载文件,或者到 KEIL 的官网下载:下载官网,一大堆注册非常麻烦。建议使用最新或者靠近最新版本都可以。
2、开始安装 KEIL5
选择安装路径,路径不能带中文,next
提示
: Pack 目录下后续可能会安装以后会用到的各种芯片的芯片包容易占空间,建议 C 盘剩余空间不多的用户可以直接在框中编辑改路径,把 C 改为 D(或其他盘,直接改第一个字符就行,注意不要删错后面符号)
安装ok即可
无需等待, 直接关闭整个软件
2.1、 激活
-
右键已经安装好的
Keil MDK
图标, 选择以管理员方式打开
-
点开
File
菜单栏, 选择License Management
, 在打开的窗口中复制右上角的Computer ID
值, 比如CA2RX-GUTUC
-
右键
安装软件\Keil_MDK_ARM_5.35\keygen\keygen.exe
, 选择以管理员方式打开, 这是Keil MDK
的盗版激活器 -
将之前复制的CID值拷贝到激活器
CID
输入框,Target
选择ARM
, 点击Generate
按钮, 会生成一长串激活码 -
复制激活码, 填回到
Keil MDK
界面的New License ID Code(LIC)
中, 随后点击Add Lic
-
显示如下
LIC Added Sucessfully
说明激活成功
2.2、安装DFP
库
- 安装
安装软件\Keil.STM32F1xx_DFP.2.4.1.pack
- 官网链接

3、工程创建

-
在
D:\workspace-stm32
某个硬盘路径中创建第一个工程的文件结构, 只需要创建前四个文件夹, 其他工程相关文件和文件夹稍后由Keil创建└─prj1_demo ├─app(我们的应用层代码) ├─driver(我们自行编写或其他人编写的第三方驱动) ├─library(ARM和ST提供的官方库) ├─doc(文档类) └─keil(存放keil工程文件)
-
拷贝标准库的文件到我们的工程文件中
- 拷贝标准库
Libraries
下的CMSIS
和STM32F10x_StdPeriph_Driver
两个文件夹到工程的library
中 - 拷贝标准库
Project\STM32F10x_StdPeriph_Examples\GPIO\IOToggle
下的main.c
stm32f10x_conf.h
stm32f10x_it.c
stm32f10x_it.h
四个文件到工程的app
中(不要拷贝system_stm32f10x.c
)
对比c语言阶段的学习:
app相当于我们编写的代码, 通常统一以
main.c
的文件作为入口lib相当于标准库或者qt库, 早期嵌入式习惯将一个工程相关的库都放在工程内, 之后的则使用共享库(不要改), 其中
cmsis
是内核相关的操作库, 其他则是厂家的库prj相当于
makefile
,xxx.pro
等项目相关文件, keil/iar等都有自己对应的工程文件, keil的名叫<项目名>.uvprjx
drivers相当于
libmsc.so
等放置的位置doc一般放置自述文件
readme.txt/readme.md
和项目
标准库的开发方式更像是移植, 而不是创建 - 拷贝标准库
4、搭建框架
-
Keil
创建新工程, 工程文件保存在keil
文件夹路径下, 命名stm32prj
通常情况下, 工程名应该与整个工程文件夹的名字一样, 也就是
prj1_demo
考虑到之后的工程都是从这个工程直接复制, 因此使用一个更通用的工程名
-
选择设备型号
f103ve
-
不添加任何库(不勾选任何选项, 并确定)
我们使用keil仅仅为了帮我们管理工程, 以及使用keil的工具链来编译/下载/调试

-
project
-manage
-project items
中,Groups
按如下分组和添加文件(工程中的group
不能有二级组, 所以lib
部分需要拆分成三部分)Groups组名 说明 添加的文件 app
用户代码 apps/main.c
apps/stm32f10x_it.c
driver
第三方驱动 [留空] cmsis
内核库 libraries/CMSIS/CM3/DeviceSupport/STM32F10x/system_stm32f10x.c
stdLib
标准库 libraries/STM32F10x_StdPeriph_Driver/src/xxx.c
startup
启动文件 libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/arm/startup_stm32f10x_hd.s
-
main()
函数是C语言部分代码的入库
, 在进入c代码之前, 芯片需要先执行startup
启动文件才能启动, 随后才进入c语言部分, 并且这个启动文件使用的是汇编语言 -
选择
startup_stm32f10x_hd.s
这个文件,因为hd
代表 High Density(高密度),用于区分 STM32F10x 系列不同的 Flash 和 RAM 规格。
分类 后缀 Flash 容量 典型芯片 低密度(Low Density) ld
16KB ~ 32KB STM32F101C4, STM32F103C6 中密度(Medium Density) md
64KB ~ 128KB STM32F103RB, STM32F101R8 高密度(High Density) hd
256KB ~ 512KB STM32F103RE, STM32F103ZC 超高密度(XL Density) xl
512KB ~ 1MB STM32F103ZG, STM32F103VH - 标准库选择了全部文件, 实际上如果使用了什么外设, 就只需要包含对应文件即可, 提高编译速度
-
-
打开
Options for Target
, 对这个项目进行一些额外配置-
Target
中设置ARM Compiler
为Use default compiler version 5
此处为设置
编译器
, 可选GCC
或ARMCC
, 新版keil
默认为ARMCC v6
, 标准库是按照ARMCC v5
编写的
-
Output
中勾选Create HEX File
keil默认生成
axf
文件, 而大多数编程器都使用hex
格式的文件进行烧录这些文件其实就是最终生成的二进制文件
-
C/C++
中设置Define
-
STM32F10X_HD USE_STDPERIPH_DRIVER
注意这里是两个词, 中间用空格隔开, 相当于全局增加了两句话:
c#define STM32F10X_HD #define USE_STDPERIPH_DRIVER
-
-
C/C++
中设置Include Paths
(使用右边的...
按钮, 选择文件夹, keil会自动识别为相对路径)..\app
..\driver
..\library\CMSIS\CM3\CoreSupport
..\library\CMSIS\CM3\DeviceSupport\ST\STM32F10x
..\library\STM32F10x_StdPeriph_Driver\inc
-
Debug
中选择右边的Use
为CMSIS-DAP Debugger
教程使用的开发板是
野火F103
, 配套仿真器为CMSIS-DAP
标准的仿真器, 所以选择此项 -
再点开
Settings
-
Debug
标签页的Max Clock
设置为5MHz
-
Flash Download
标签页勾选Reset and Run
- 调低烧录速度更稳定
- keil默认烧录完毕后系统不会自动开始运行, 需要手动按一下开发板上的
reset
按键, 而勾选此Reset and Run
选项, 烧录完立刻运行, 不用手动重启
-
-
-
edit-configuration-Editor
中设置Encoding
为第二个选项(utf-8)Keil默认使用ANSI编码 不支持中文
改为更通用的UTF-8编码
5、开始编写代码

注意代码需要以空行结尾
-
编译, 使用到的编译选项为:
Traslate(ctrl+F7)
, 相当于gcc -c xxx.c
, 编译当前打开的一个文件为xxx.o
文件Build(F7)
, 相当于make
, 编译整个工程, 只会编译有变动的文件Rebuild
, 相当于make clean && make
, 完全重新编译整个工程
