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)
|