首先建立工程,我习惯性在工程文件夹下建立以下几个文件夹,分别放不同的文件,以区别不同文件的不同作用,方便寻找和移植。如下:

在PROJECT文件夹下建立工程项目,启动keil,开始建立工程。

注意建立在PROJECT文件夹下。

随便起个名字,我起的名字是MDK,建立后,会提示你选择器件型号


我的器件如上图,所以选择。确定后会询问你是否加入启动文件。我们用stm32的固件库,所以不用mdk的,选择否。

下面配置工程的选项option,右键点Target会看到Options。

以下是各个选项卡的配置内容。


这里注意的是在output选项卡里要选择目标文件存放的位置,放在之前建立的OBJ文件夹里。

在这里要填写放置头文件的位置,一般MDK在安装目录里会有现成的头文件,但是那是低版本的,我们要改写头文件的位置。在这之前要先做一个步骤是把3.3版本的固件库放到MDK文件夹里。

然后在MDK中就可以设置目标位置了,下图画的两个文件夹就是要确定的位置。具体内容可以参阅官方文档。

添加好后,如下图


最后要配置成上图形式。注意define里的内容要如上填写,这里确定了你使用的是high density器件,并且使用标准外设驱动,即用到固件库。

在这里为了可以在ram里运行,我们要添加一个文件,我将他命名为ram.ini,注意后缀为.ini。内容如下:

标注的地方要注意,这个文件名是你之前在output选项卡设置的时候的目标文件名,后缀为.axf。前面的OBJ是OBJ文件夹下的目标文件。并且要把ram.ini文件放到根目录MDK下,如图。

下一个选项卡要如此设置。


至此,项目设置完成。
下面添加文件,添加文件如下,具体位置在哪请参考官方文档。

由于一个重要文件stm32f10x_conf.h在固件库里没有,所以我们还要再寻找这东西。位置在STM32F10x_StdPeriph_Lib_V3.3.0ProjectSTM32F10x_StdPeriph_Template,借用,我们需要复制到STM32F10x_StdPeriph_Lib_V3.3.0LibrariesSTM32F10x_StdPeriph_Driverinc文件夹下。并且要修改。

注释掉无用的头文件包含语句,我们的程序只是点亮一个灯,所以只用以上两个头文件即可。加入的main文件内容如下。

编译工程,注意下面提示框

这里要注意,要与ram.ini的LOAD后面的一样,包括原点的个数!很重要。
连接jlink,
debug。运行,成功。