注:以下工程创建将以STM32F103ZET6为例
1 下载需要的资料包
1.1 下载 Keil 的 STM32F103 芯片支持包
1.1.1 手动下载安装包
Keil官网:https://www.keil.com/
(1)进入官网,点击 Download。
(2)选择 Product Downloads,然后选择 MDK-Arm,进入之后选择 Device List。
(3)直接输入芯片名称查找芯片支持包。
或选择供应商和内核查找芯片支持包
(4)下载支持包 点击 STM32F1xx_DFP,进入下载界面,点击 Download 下面的支持包。
下载完成之后,后续使用 Keil 的 Pack Installer 导入到项目中。

1.1.2 使用 Keil 的 Pack Installer 下载
点击如下图图标打开 Pack Installer ,
左侧 Device 找到 All Devices - STMicroelectronics - STM32F1 Series - STM32F103 - STM32F103ZE,右侧 Packs 窗口下找到 Keil::STM32F1xx_DFP, 点击右侧的 Install 下载。
1.2 下载STM32F103标准外设库
ST官网: https://www.st.com/content/st_com/en.html
选择 Tools&Software,

选择 STM32 embedded software,

选择 STM32 Standard Peripheral Labraries,

选择 F1 系列,

点击 Get latest 进行下载外设标准库。
2 创建工程文件夹

Core:存放从SDK中抽取的部分可能会修改的核心文件;
Driver:存放用户编写的外设驱动;
User:存放用户函数文件
Project:存放Keil工程文件,二进制目标文件;
SDK:存放CMSIS和HAL库(或标准库)
Clean.bat:清理Project里的Keil生成的工程文件;
Readme.txt:该工程的说明信息。
3 拷贝相关文件到工程目录
3.1 解压标准外设库包

3.2 拷贝相关文件
(1)拷贝启动文件

将 STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm 目录下的 startup_stm32f10x_hd.s 拷贝到 00_STM32_Demo\Core 目录下。
(2)拷贝系统初始化文件和外设寄存器描述文件

将 STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x 目录下的 {stm32f10x.h, system_stm32f10x.c, system_stm32f10x.h} 拷贝到 00_STM32_Demo\Core 目录下。
(3)拷贝内核寄存器描述文件

将 STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\CoreSupport\ 目录下的 {core_cm3.c, core_cm3.h} 拷贝到 00_STM32_Demo\Core 目录下。
4 Keil 创建项目工程
(1)新建项目工程。
Project - New uVision Project
找到对应的芯片类型。
(2)创建分组

(3)将本地本件添加到工程分组
添加文件之后需要更改文件类型,否则会出现下面的告警。
c
Rebuild started: Project: STM32_Demo
*** Using Compiler 'V6.14.1', folder: 'D:\Keil_v5\Core\ARM\ARMCLANG\Bin'
Rebuild target 'Target 1'
FCARM - Output Name not specified, please check 'Options for Target - Utilities'
Target not created.
Build Time Elapsed: 00:00:00
修改文件类型方法:
选中文件后右键,
File Type 更改为对应的文件类型,如下:

其他 .s 或 .c 文件同样设置。
注意:.h 文件添加到分组后不能设置为 "C Source File" 类型,可以设置为 "Text Document file" ,或者直接不要把 .h 文件添加到分组中,否则编译报错
报错信息如下:

(4)添加设备型号宏定义 

(5)配置时钟和编译器版本
开发板使用8M外部晶振。
只能选择 version 5 的版本,不然编译报错,version 6版本有些语法不支持。
(6)配置目标文件输出路径和 listing 文件存放路径

(7)配置生成 hex 文件
(8)配置头文件路径和语法版本
(9)配置文件的编码格式
经以上步骤,配置完成。点击编译按钮开始编译代码,结果如下:
到此,以上可作为寄存器版工程 。
(10)拷贝标准库
将 STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\STM32F10x_StdPeriph_Driver\ 目录下的 {src, inc} 拷贝到 00_STM32_Demo\Driver\StdLib\ 目录下。
将 STM32F10x_StdPeriph_Lib_V3.6.0\Project\STM32F10x_StdPeriph_Template\stm32f10x_conf.h 拷贝到 00_STM32_Demo\Core 目录下。
将 标准库源文件添加到 Driver/StdLib Group。注意:下图文件类型要选择 C Source file(*.c)。

添加一个使用 标准外设库 的宏 " USE_STDPERIPH_DRIVER"。 
最后再重新编译一下工程,0错误,0告警。

标准库工程模板创建完毕。