步骤一:
打开 MDK (以下将 MDK5 简称为 MDK )软件。然后点击 Project → New uVision Project
如图 3.2.1 所示
步骤二:
在桌面新建一个 TEST 的文件夹,然后在 TEST 文件夹里面新建 USER 文件夹,将工程名字设为 test ,保存在这个 USER 文件夹里面,之后,弹出选择器件的对话框,如图 3.2.3 所示
步骤三
因为 ALIENTEK MiniSTM32 开发板所使用的 STM32 型号为 STM32F103RCT6 ,所以在这里我们选择 STMicroelectronics → STM32F1 Series → STM32F103 → STM32F103RCT6 (如果使用的是 其他系列的芯片,选择相应的型号就可以了
特别注意: 一定要安装对应的器件 pack 才会显 示这些内容,如果没得选择,请关闭 MDK ,然后安装 光盘: 6 ,软件资料 1 ,软件 MDK5 Keil.STM32F1xx_DFP.2.2.0.pack 这个安装包)。
步骤四
点击 OK , MDK 会弹出 Manage Run-Time Environment 对话框,如图 3.2.4 所示:
这是 MDK5 新增的一个功能,在这个界面,我们可以添加自己需要的组件,从而方便构建
开发环境,不过这里我们不做介绍。所以在图 3.2.4 所示界面,我们直接点击 Cancel ,即可,
得到如图 3.2.5 所示界面:
步骤五
步骤六
到这里,我们还只是建了一个框架,还需要添加启动代码,以及 .c 文件等。这里我们先介
绍一下启动代码:启动代码是一段和硬件相关的汇编代码。是必不可少的!这代码主要作用如
下:
1 、堆栈( SP )的初始化;
2 、初始化程序计数器( PC );
3 、设置向量表异常事件的入口地 址;
4 、调用 main 函数。感兴趣的朋友可以自己去分析这部分代码。
ST 公司提供了 3 个启动文件给我们,分别用于不同容量的 STM32 芯片,这三个文件是:
startup_stm32f10x_ld.s
startup_stm32f10x_md.s
startup_stm32f10x_hd.s
其中, ld.s 适用于小容量 产品; md.s 适用于中等容量产品; hd 适用于大容量产品;
这里的容量是指 FLASH 的大小 . 判断方法如下:
小容量: FLASH ≤ 32K
中容量: 64K ≤ FLASH ≤ 128K
大容量: 256K ≤ FLASH
我们开发板使用的是 STM32F103RCT6 , FLASH 容量为 256KB ,属于大容量产品,所以我们选择 startup_stm32f10x_hd.s 作为我们的启动文件。 这三个启动文件在开发板光盘 → 4 ,程序源码 → STM32 启动文件 文件夹里面(也可以从我 们的论坛 下载到, 下载地 址: http://www.openedv.com/posts/list/313.htm ), 这里我 们把 startup_stm32f10x_hd.s 拷贝到刚刚新建的 USER 文件夹里面。 不过这个启动文件,我们做了一点点修改,具体是 Reset_Handler 函数,该函数修改后代码
如下:
这段代码,我们屏蔽了复位中断服务函数( Reset_Handler )对函数 SystemInit 的调用,如果是库函数版本,可以取消这个函数的注释,并在外部实现 SystemInit 函数。
步骤七:
在图 3.2.5 中,我们找到 Target1 → Source Group1 → 双击 → 设置打开文件类型为 Asm Sourcefile → 选择 startup_stm32f10x_hd.s → 点击 Add ,如图 3.2.6 所示:
步骤八:
这里看到的 2 个文件夹: Listings 和 Objects ,是 MDK5 自行创建的,用于保存编译过程中生成的一些文件,后续会介绍。添加完后,我们得到如图 3.2.7 所示的界面:
步骤九:
至此,我们就可以开始编写自己的代码了。不过,在此之前,我们先来做两件事:第一件, 先编译一下,看看什么情况 ? 编译后如图 3.2.8 所示:
步骤十:
图 3.2.8 中 1 处为编译当前目标按钮; 2 处为全部重新编译按钮(工程大的时候,编译耗时
较久,建议少用)。出错和警告信息在下面的 Bulilt Output 对话框中提示出来了。因为工程中没
有 main 函数,所以报错了。
接下来,第二件事,让我们看看存放工程的文件夹有什么变化?打开我们刚刚建立的
TESTUSER 文件夹,可以看到里面多了 3 个文件夹: DebugConfig 、 Listings 和 Objects ,如图
3.2.9 所示:
步骤十一:
在 USER 文件夹下, startup_stm32f10x_hd.s (启动文件)和 test.uvprojx ( MDK5 工程文件)
是我们必须用到的 2 个文件,然后 DebugConfig 、 Listings 和 Objects 文件夹是 MDK5 自动生
成的, DebugConfig 文件夹用于存储一些调试配置文件, Listings 和 Objects 文件夹用来存储 MDK
编译过程的一些中间文件。
MDK5.21A 已经默认将这些文件生成在了 Listings 和 Objects 文件夹里面,但是 MDK5.11A
及之前版本是不会自动生成这两个文件夹的,所有中间文件都是生成在工程同面目录下,也就
是 USER 文件夹下,这样会显得比较混乱。
这里,我们不用 MDK5 自己生成的 Listings 和 Objects 文件夹来存放中间文件,而是在 TEST
目录下新建一个新的 OBJ 文件夹来存放这些中间文件。这样, USER 文件夹专门用来存放启动
文件( startup_stm32f10x_hd.s )、工程文件( test.uvprojx )等不可缺少的文件,而 OBJ 则用来存
放这些编译过程中产生的中间文件 ( 包括 .hex 文件也将存放在这个文件夹里面 ) 。然后把 Listings
和 Objects 文件夹里面的东西全部移到 OBJ 文件夹下(当然要先关闭 MDK 软件),并删除这两
个文件夹( DebugConfig 文件夹不用删除)。整理后效果如图 3.2.10 所示:
步骤十二:
由于上面我们还没有任何代码在工程里面,这里我们把系统代码 COPY 过来(即 SYSTEM
文件夹,该文件夹由 ALIENTEK 提供,可以在光盘任何一个实例的工程目录下找到,不过不要
拷贝错了! 不要把库函数代码的系统文件夹拷贝到寄存器代码里面用,反之亦然! 这些代码在
任何 STM32F10x 的芯片上都是通用的,可以用于快速构建自己的工程,后面会有详细介绍)。
完了之后, TEST 文件夹下的文件如图 3.2.11 所示:
步骤十三:
在上面对话框的中间栏,点新建(用红圈标出)按钮(也可以通过双击下面的空白处实现),
新建 USER 和 SYSTEM 两个组。然后点击 Add Files 按钮,把 SYSTEM 文件夹三个子文件夹里
面的: sys.c 、 usart.c 、 delay.c 加入到 SYSTEM 组中。注意:此时 USER 组下还是没有任何文件,
得到如图 3.2.13 所示的界面:
步骤十四:
点击 OK ,退出该界面返回 IDE 。这时,我们在 Target1 树下发现多了 2 个组名,就是我们
刚刚新建的 2 个组。如图 3.2.14 所示:
步骤十五:
接着,我们新建一个 test.c 文件,并保存在 USER 文件夹下。然后双击 USER 组,会弹出
加载文件的对话框,此时我们在 USER 目录下选择 test.c 文件,加入到 USER 组下。得到如图
3.2.15 所示的界面
至此,我们就可以开始编写我们自己的代码了。
步骤一:
打开 MDK (以下将 MDK5 简称为 MDK )软件。然后点击 Project → New uVision Project
如图 3.2.1 所示
步骤二:
在桌面新建一个 TEST 的文件夹,然后在 TEST 文件夹里面新建 USER 文件夹,将工程名字设为 test ,保存在这个 USER 文件夹里面,之后,弹出选择器件的对话框,如图 3.2.3 所示
步骤三
因为 ALIENTEK MiniSTM32 开发板所使用的 STM32 型号为 STM32F103RCT6 ,所以在这里我们选择 STMicroelectronics → STM32F1 Series → STM32F103 → STM32F103RCT6 (如果使用的是 其他系列的芯片,选择相应的型号就可以了
特别注意: 一定要安装对应的器件 pack 才会显 示这些内容,如果没得选择,请关闭 MDK ,然后安装 光盘: 6 ,软件资料 1 ,软件 MDK5 Keil.STM32F1xx_DFP.2.2.0.pack 这个安装包)。
步骤四
点击 OK , MDK 会弹出 Manage Run-Time Environment 对话框,如图 3.2.4 所示:
这是 MDK5 新增的一个功能,在这个界面,我们可以添加自己需要的组件,从而方便构建
开发环境,不过这里我们不做介绍。所以在图 3.2.4 所示界面,我们直接点击 Cancel ,即可,
得到如图 3.2.5 所示界面:
步骤五
步骤六
到这里,我们还只是建了一个框架,还需要添加启动代码,以及 .c 文件等。这里我们先介
绍一下启动代码:启动代码是一段和硬件相关的汇编代码。是必不可少的!这代码主要作用如
下:
1 、堆栈( SP )的初始化;
2 、初始化程序计数器( PC );
3 、设置向量表异常事件的入口地 址;
4 、调用 main 函数。感兴趣的朋友可以自己去分析这部分代码。
ST 公司提供了 3 个启动文件给我们,分别用于不同容量的 STM32 芯片,这三个文件是:
startup_stm32f10x_ld.s
startup_stm32f10x_md.s
startup_stm32f10x_hd.s
其中, ld.s 适用于小容量 产品; md.s 适用于中等容量产品; hd 适用于大容量产品;
这里的容量是指 FLASH 的大小 . 判断方法如下:
小容量: FLASH ≤ 32K
中容量: 64K ≤ FLASH ≤ 128K
大容量: 256K ≤ FLASH
我们开发板使用的是 STM32F103RCT6 , FLASH 容量为 256KB ,属于大容量产品,所以我们选择 startup_stm32f10x_hd.s 作为我们的启动文件。 这三个启动文件在开发板光盘 → 4 ,程序源码 → STM32 启动文件 文件夹里面(也可以从我 们的论坛 下载到, 下载地 址: http://www.openedv.com/posts/list/313.htm ), 这里我 们把 startup_stm32f10x_hd.s 拷贝到刚刚新建的 USER 文件夹里面。 不过这个启动文件,我们做了一点点修改,具体是 Reset_Handler 函数,该函数修改后代码
如下:
这段代码,我们屏蔽了复位中断服务函数( Reset_Handler )对函数 SystemInit 的调用,如果是库函数版本,可以取消这个函数的注释,并在外部实现 SystemInit 函数。
步骤七:
在图 3.2.5 中,我们找到 Target1 → Source Group1 → 双击 → 设置打开文件类型为 Asm Sourcefile → 选择 startup_stm32f10x_hd.s → 点击 Add ,如图 3.2.6 所示:
步骤八:
这里看到的 2 个文件夹: Listings 和 Objects ,是 MDK5 自行创建的,用于保存编译过程中生成的一些文件,后续会介绍。添加完后,我们得到如图 3.2.7 所示的界面:
步骤九:
至此,我们就可以开始编写自己的代码了。不过,在此之前,我们先来做两件事:第一件, 先编译一下,看看什么情况 ? 编译后如图 3.2.8 所示:
步骤十:
图 3.2.8 中 1 处为编译当前目标按钮; 2 处为全部重新编译按钮(工程大的时候,编译耗时
较久,建议少用)。出错和警告信息在下面的 Bulilt Output 对话框中提示出来了。因为工程中没
有 main 函数,所以报错了。
接下来,第二件事,让我们看看存放工程的文件夹有什么变化?打开我们刚刚建立的
TESTUSER 文件夹,可以看到里面多了 3 个文件夹: DebugConfig 、 Listings 和 Objects ,如图
3.2.9 所示:
步骤十一:
在 USER 文件夹下, startup_stm32f10x_hd.s (启动文件)和 test.uvprojx ( MDK5 工程文件)
是我们必须用到的 2 个文件,然后 DebugConfig 、 Listings 和 Objects 文件夹是 MDK5 自动生
成的, DebugConfig 文件夹用于存储一些调试配置文件, Listings 和 Objects 文件夹用来存储 MDK
编译过程的一些中间文件。
MDK5.21A 已经默认将这些文件生成在了 Listings 和 Objects 文件夹里面,但是 MDK5.11A
及之前版本是不会自动生成这两个文件夹的,所有中间文件都是生成在工程同面目录下,也就
是 USER 文件夹下,这样会显得比较混乱。
这里,我们不用 MDK5 自己生成的 Listings 和 Objects 文件夹来存放中间文件,而是在 TEST
目录下新建一个新的 OBJ 文件夹来存放这些中间文件。这样, USER 文件夹专门用来存放启动
文件( startup_stm32f10x_hd.s )、工程文件( test.uvprojx )等不可缺少的文件,而 OBJ 则用来存
放这些编译过程中产生的中间文件 ( 包括 .hex 文件也将存放在这个文件夹里面 ) 。然后把 Listings
和 Objects 文件夹里面的东西全部移到 OBJ 文件夹下(当然要先关闭 MDK 软件),并删除这两
个文件夹( DebugConfig 文件夹不用删除)。整理后效果如图 3.2.10 所示:
步骤十二:
由于上面我们还没有任何代码在工程里面,这里我们把系统代码 COPY 过来(即 SYSTEM
文件夹,该文件夹由 ALIENTEK 提供,可以在光盘任何一个实例的工程目录下找到,不过不要
拷贝错了! 不要把库函数代码的系统文件夹拷贝到寄存器代码里面用,反之亦然! 这些代码在
任何 STM32F10x 的芯片上都是通用的,可以用于快速构建自己的工程,后面会有详细介绍)。
完了之后, TEST 文件夹下的文件如图 3.2.11 所示:
步骤十三:
在上面对话框的中间栏,点新建(用红圈标出)按钮(也可以通过双击下面的空白处实现),
新建 USER 和 SYSTEM 两个组。然后点击 Add Files 按钮,把 SYSTEM 文件夹三个子文件夹里
面的: sys.c 、 usart.c 、 delay.c 加入到 SYSTEM 组中。注意:此时 USER 组下还是没有任何文件,
得到如图 3.2.13 所示的界面:
步骤十四:
点击 OK ,退出该界面返回 IDE 。这时,我们在 Target1 树下发现多了 2 个组名,就是我们
刚刚新建的 2 个组。如图 3.2.14 所示:
步骤十五:
接着,我们新建一个 test.c 文件,并保存在 USER 文件夹下。然后双击 USER 组,会弹出
加载文件的对话框,此时我们在 USER 目录下选择 test.c 文件,加入到 USER 组下。得到如图
3.2.15 所示的界面
至此,我们就可以开始编写我们自己的代码了。
举报