13回答

1收藏

[分享] 《GD32-Colibri-F207ZE开发板玩家笔记》之从零创建工程模板

 

GD32 GD32 9905 人阅读 | 13 人回复 | 2016-01-04

2.1 搭建开发环境
基于Windows 7 Professional 64-bit Operation System搭建开发环境。
基本开发工具
1. Keil v5.17.0
之前电脑上装的是v5.12.0的版本,但是不能识别GD32的芯片支持包,所以就重新从Keil的官网上下载了最新版。在交流群里听其他网友提到过,v5.13.0之后的版本经过验证都是可以用的。
2. GD32芯片支持包
Keil.GD32F2xx_DFP.1.0.0.pack

图 2-1
当试着新建工程选择芯片型号时,在“工程属性”对话框中能识别出GigaDevice系列MCU即可。针对GD32-Colibri-F207ZE开发板上使用的主控MCU,此处应当选择“GD32F207ZE”。
3. CMSIS-DAP调试器驱动程序
这个驱动是配合开发板上的GDLink使用的。调试工程时,在相应的位置选择“CMSIS-DAP”即可。感觉这个调试器就是开源的CMSIS-DAP在GD32芯片上的一个移植。
首次将GDLink通过USB接入电脑时,它被识别成“USB输入设备”,不需要额外安装驱动程序。

图 2-2
在Windows的设备管理器界面中查看当前接入系统的USB设备,未列识别出特别名称的设备。估计是被识别成了“USB Composite Device”。

图 2-3
不用担心,这是正常情况,后续步骤在验证下载功能时是可以正常调试和下载程序的。
4. CH340 USB转TTL串口设备驱动
开发板上集成了CH340G芯片,可以将USB通信同TTL串口通信相互转换,方便通过USB线缆实现串口通信。将开发板的USB串口接入电脑的USB口之后,在Windows设备管理器中可以识别出来设备“USB-SERIAL CH340 (COMn)”。在我的电脑上识别出来的是“COM5”,如图2-4所示。

图 2-4
5. Tera Term 串口终端软件。
Tera Term跟超级终端的界面类似,还支持ssh连接。用Tera Term建立串口连接时可以自动检测到当前系统中识别出来的串口,使用非常方便。Tera Term的综合功能要比各种“串口调试工具”小软件的功能强大很多。
进阶开发工具
1. Git代码版本管理工具
同时使用了http://git.oschina.net网站提供的免费Git仓库,用于保存开发过程中的代码,并记录每次的代码更新日志。
我创建的git仓库地址是:
2. Sublime Test 3
Sublime Test一款非常优秀的代码编辑软件。除了代码编辑软件的高亮、智能缩进等常规功能之外,Sublime Test的代码显示主题及代码预览也是非常吸引程序员眼球的功能,所以,我形容她为一款“销魂”的代码编辑器。
2.2 获取必要的源代码
        Keil的插件包里提供了相当充分的代码,帮助用户完成从芯片上电到进入应用程序入口main函数之前的系统初始化工作,这其中包含了中断向量表的初始化和基本时钟系统的初始化等内容。当然,还有最重要的芯片寄存器头文件,也是在Keil的插件包中提供的。如表2-1所示。

另外,还可以从GD官方提供的固件库中提取GD32芯片中各模块的驱动程序,复用已有的固件库可以免去阅读参考手册、编写片上模块驱动程序的麻烦。如表2-2所示。


2.3 创建代码树
创建代码文件组织结构
创建根目录为“MyFwSDK_GD32F207”,用于保存整个项目的代码。在目录下根据表2-3描述创建工程代码树。


在基础文件组织结构中,还可以根据需要在根目录中创建“doc_tool”子目录专门存放工程文档、小工具之类的文件,还可以创建“component”子目录存放与底层无关的软件组件模块,例如RTOS,扩展外设驱动程序等等。
将固件库布中的驱动程序打包成库
GD官方提供了固件库,为每个模块单独设计了接口头文件和代码实现文件,例如ADC模块对应的gd32f20x_adc.h和gd32f20x_adc.c文件。然而,固件库里包含的模块比较多,对应每次需要添加到工程中的驱动文件也就比较多,在每个应用工程中每次重新编译时,都要重新编译这些文件,比较浪费时间。因此,此处将固件库中的所有模块的驱动程序预先编译,以库的方式封装起来,这样在应用工程中,只要包含这个预编译库,就可以跳过这些驱动程序的编译过程直接链接。另外,由于编译器具有“不使用就不链接”的优化策略,应用程序只会将用到的函数链接到最终的可执行映像文件中,不用担心由于使用了库而使得可执行映像文件过大。
打包库的具体过程如下:
步骤一:配置库工程属性
在代码目录结构的“\driver\Peripherals\lib”目录下创建工程“GD32FwLib”,并在其“Option”对话框中的“Output”标签页中勾选“Create Library”选项,设定编译工程之后生成的库文件。如图2-5所示。

图 2-5
在“C/C++”标签页下添加驱动头文件的搜索路径,如图2-6所示。

图 2-6
其它工程配置参考模板应用工程即可。
步骤二:向库工程中添加驱动程序文件
将GD官方固件库提供的驱动代码实现文件(*.c)文件全部添加到库工程中,如图2-7所示。

图 2-7

步骤三:编译库工程
同编译普通的应用工程一样,启动库工程的编译过程,开始编译各个驱动代码文件。

*** Using Compiler 'V5.06 update 1 (build 61)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin'
Rebuild target 'GD32FwLib'
compiling gd32f20x_can.c...
compiling gd32f20x_adc.c...
compiling gd32f20x_bkp.c...
compiling gd32f20x_cryp_aes.c...
compiling gd32f20x_crc.c...
compiling gd32f20x_cryp.c...
compiling gd32f20x_cryp_tdes.c...
compiling gd32f20x_cryp_des.c...
compiling gd32f20x_dac.c...
compiling gd32f20x_dci.c...
compiling gd32f20x_dma.c...
compiling gd32f20x_eth.c...
compiling gd32f20x_exmc.c...
compiling gd32f20x_exti.c...
compiling gd32f20x_fmc.c...
compiling gd32f20x_gpio.c...
compiling gd32f20x_hash.c...
compiling gd32f20x_hash_md5.c...
compiling gd32f20x_hash_sha.c...
compiling gd32f20x_i2c.c...
compiling gd32f20x_iwdg.c...
compiling gd32f20x_mcudbg.c...
compiling gd32f20x_misc.c...
compiling gd32f20x_pwr.c...
compiling gd32f20x_rcc.c...
compiling gd32f20x_rtc.c...
compiling gd32f20x_rng.c...
compiling gd32f20x_sdio.c...
compiling gd32f20x_spi.c...
compiling gd32f20x_timer.c...
compiling gd32f20x_tldi.c...
compiling gd32f20x_usart.c...
compiling gd32f20x_wwdg.c...
creating Library...
".\output\GD32FwLib.lib" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:13

最后在“\driver\Peripherals\lib\output”目录下输出了打包好的库文件“GD32FwLib.lib”。当在应用工程中包含了这个库文件时,就同包含了所有驱动程序文件是等价的。有心的看官会发现,在build日志有最后一句“Build Time Elapsed:  00:00:13”,说明编译这些驱动文件足足用了13秒,以后再编译包含驱动库文件的应用工程时,每次都可以不用再花这13秒重新编译固件库的代码文件了。
2.4 创建模板工程
在模板工程中,除了在main函数中没有具体的应用之外,将包含一个应用工程的所有必备要素,包括:启动代码文件、固件库等。同时,在模板工程中将配置头文件的搜索路径及配置调试器选项等。最终验证模板工程顺利编译、下载。
创建模板工程的意义在于,之后再创建样例程序及实际开发的应用工程时,可直接复制模板工程作为基础进行应用开发,避免了每次新建工程需要重新添加文件、配置工程属性及验证相关配置的正确性等重复操作,减少不必要的时间浪费。
创建Keil工程组织模板
在代码树中的目录“\example\00_Template\build”下创建Keil工程“MyProject”。此处使用“MyProject”作为工程名是考虑到简化工程内部的配置及对其它工程的通用性,若是要区分不同工程,可在复制“00_Template”工程目录之后,修改该目录名为指定的工程名即可。
在模板工程“MyProject”内部建立工程组织结构,如图2-8所示。

图2-8
特别注意,模板工程的包含路径中应包含必要的目录。具体配置如图2-9所示。

图 2-9
启动编译过程,验证模板工程可编译无误。
*** Using Compiler 'V5.06 update 1 (build 61)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin'
Build target 'MyProject'
compiling system_gd32f20x.c...
compiling main.c...
linking...
Program Size: Code=520 RO-data=440 RW-data=0 ZI-data=1024  
".\output\MyProject.axf" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:01

配置下载属性
将开发板接入到电脑上,然后在工程选项对话框的“Debug”标签页中选择使用“CMSIS-DAP Debugger”调试器。此处对应于开发板的GDLink调试器。如图2-10所示。

图2-10
轻戳“Settings”按钮,在弹出的“Cortex-M Target Driver”对话框中,在“SW Device”一栏中就可以看到识别出来的单片机内核的设备号了。同时还要确保调试器属性被正确设置。具体见图2-11所示。

图 2-11
配置要调试属性后,返回Keil工程主界面,触发下载过程。
Load "D:\\MyCode\\GitRepo\\MyFwSDK_GD32F207\\example\\00_Template\\build\\output\\MyProject.axf"
Erase Done.
Programming Done.
Verify OK.
Application running ...
Flash Load finished at 23:26:20

验证样例工程可以将编译生成的“MyProject.axf”映像文件顺利下载到开发板上。
另外,也可以启用在线调试功能,验证程序是否能够正确运行。

图2-12
在图2-12中可以看出,在系统启动后,顺利进入main函数。
至此,模板工程创建完毕。后续工作中在需要创建新工程时,复制此模板工程作为基础开发框架,然后根据应用的具体需要添加代码。

建议从git reposity上克隆最新代码,这里也提供了一个包含模板工程、UART_HelloWorld和GPIO_BlinkyLED工程的mini代码包:
MyFwSDK_GD32F207_20160104.7z (421.44 KB, 下载次数: 57)



评分

参与人数 1声望 +3 与非币 +20 收起 理由
loveeeboard + 3 + 20 很给力!

查看全部评分

分享到:
回复

使用道具 举报

回答|共 13 个

倒序浏览

沙发

suyong_yq

发表于 2016-1-4 22:03:31 | 只看该作者

一下子码了这么多字,都快虚脱了,管理员给加个精华吧,再赏点金币就更好啦。
板凳

Paderboy

发表于 2016-1-5 09:26:57 | 只看该作者

地板

wambob

发表于 2016-1-5 12:46:11 | 只看该作者

好详细                     
5#

陋室林

发表于 2016-1-5 19:57:58 | 只看该作者

                                 
6#

zzh616320030

发表于 2016-1-6 09:29:41 | 只看该作者

不错,等板子到了研究一下
7#

糖悦之果飞

发表于 2016-1-6 09:41:12 | 只看该作者

分享的不错,可以将文章一并发到经验频道,获取双重奖励哟http://jingyan.eeboard.com/
8#

yanhaijian

发表于 2016-1-7 12:01:53 | 只看该作者

好文章。顶。
9#

gezhuag

发表于 2016-1-7 23:11:41 | 只看该作者

,非常详细,以前都是从demo里修改的,还从来没自己从头创建过工程,
10#

gezhuag

发表于 2016-1-7 23:18:15 | 只看该作者

gezhuag 发表于 2016-1-7 23:11
,非常详细,以前都是从demo里修改的,还从来没自己从头创建过工程, ...

我地 keil是5.11版本的,用gd光盘里的库,直接安装就可以用了的,
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条