简介
本文以Keil 5.24a为开发环境为例搭建GD32F130F8P6工程。如果你使用的芯片不是GD32F130F8P6,也没关系,本文介绍的方法比较通用,可以举一反三。
准备工作
一、下载安装Keil 5.24a
二、下载GD32F1x0的标准外设固件库(例如GD32F1x0_Firmware_Library_v3.1.0)
三、下载GD32F130的Keil pack文件(例如GigaDevice.GD32F1x0_DFP.3.1.0.pack),并安装
创建工程模板目录
①创建如下目录结构(可以根据个人习惯自己调整)
GD32F1x0_Proj_Template
|--App #应用程序代码,以main.c为主
|--CMSIS #CMSIS层代码
|--StdPeriphLib #标准外设驱动库代码
|--Hardware #开发项目中的硬件驱动代码,与实际开发相关
|--Utilities #开发项目中使用的工具代码,例如串口驱动代码,I2C驱动代码等
②把固件库【GD32F1x0_Firmware_Library_v3.1.0ExamplesGPIORunning_led】下的
- gd32f1x0_it.c
- gd32f1x0_it.h
- gd32f1x0_libopt.h
- main.c
拷贝到工程模板的App目录下。修改main.c为最简洁状态(如下)。在gd32f1x0_it.c中删除最开始的#include "systick.h",屏蔽SysTick_Handler函数。
#include "gd32f1x0.h" #include <stdio.h> int main(void) { while(1) { }//main loop }
③把固件库【GD32F1x0_Firmware_Library_v3.1.0FirmwareCMSIS】下的
- gd32f1x0.h
- startup_gd32f1x0.s(ARM目录下的版本,因为用的是Keil编译器而非IAR)
- system_gd32f1x0.c
- system_gd32f1x0.h
拷贝到工程模板的CMSIS目录下。还有一个core_cm3.h没有拷贝,因为GD32F1x0的固件库中使用的core_cm3.h版本太旧(2014年编写的),会导致在Keil524a下编译错误(因为缺少相关头文件:core_cmInstr.h等),所以我们到Keil524a的安装目录下去拷。进入到{Keil安装目录}ARMPACKARMCMSIS5.0.1CMSISInclude目录下,拷贝
- core_cm3.h
- cmsis_compiler.h
- cmsis_armcc.h
到工程模板的CMSIS目录下。提示:core_cm3.h依赖cmsis_compiler.h文件,而cmsis_compiler.h文件又依赖cmsis_armcc.h文件,所以需要拷这3个文件。
④把固件库【GD32F1x0_Firmware_Library_v3.1.0FirmwareGD32F1x0_standard_peripheral】下的Include和Source文件拷贝到工程模板的StdPeriphLib目录下。
⑤由于Hardware和Utilities与实际开发相关,所以构建模版的时候不需要放文件进去。
根据已有的模板创建Keil工程
上面创建好的工程模板GD32F1x0_Proj_Template是可以重复使用的,这样就可以大大提高开发效率。
①将上面创建好的工程模板GD32F1x0_Proj_Template拷贝到自己的工作目录下,例如 【D:GD32workspace】,重命名为自己想要的名称,例如led_test。
②打开Keil524a,【New uVision Project】,选择上面的led_test目录,将工程命名为led_test,保存。
接下来选择芯片型号,以GD32F130F8P6为例:
③点击Cancel
④创建分组,然后添加代码源文件到分组中
注意:添加到分组中的为源文件,例如c文件,cpp文件,.s汇编文件等。不添加的文件不会参与编译。
⑤指定编译工程所需头文件的目录(include path)
所有需要用到的头文件必须指定其目录,这样编译器才能知道去哪里找到这些头文件。如果没指定就会编译报错。
⑥最后,勾选Create HEX,编译。
需要定义这些宏吗?
比较老的教程说要手动定义宏:GD32F1x0、 GD32F130_150、 USE_STDPERIPH_DRIVER等。实际上对于新版的Keil5来说这是没必要的。
我们可以发Keil自动在编译器的命令参数上添加了对这些宏的定义,这正是GD32提供的芯片的pack文件起到的效果,pack文件里面对每个芯片需要定义哪些基本的宏都做了默认的处理。