1.前言
GD32E230 系列是 GD 的 Cortex_M23 系列产品,GD32F330 系列是 GD 的 Cortex_M4 系列产品,这两个系列的兼容度非常高。客户会有从 GD32E230 系列移植到 GD32F330 系列的需求,本文档专门针对既有的 GD32E230 代码如何移植到 GD32F330 做一个详细的介绍;
2.硬件差异
GD32E230 系列的封装类型有:TSSOP20、LGA20、QFN28、QFN32、LQFP32、LQFP48,GD32F330系列的封装类型有:TSSOP20、QFN28、QFN32、LQFP48、LQFP64,两个系列相同封装的芯片引脚是兼容的。
注意:
1. TSSOP20和QFN28的封装中,GD32E230系列PA9、PA10可以映射为PA11、PA12,GD32F330系列不具备此功能。
2. LQFP48封装管脚1在GD32E230系列上面是VDD,在GD32F330上是VBAT,也就是说E230不支持掉电运行RTC;
图 2-1 LQFP48 封装对比图
图 2-2 QFN32 封装对比图
图 2-3 QFN28 封装对比图
图 2-3 TSSOP20 封装对比图
3.资源及外设地址对比
表 3-1 GD32F330 及 GD32E230 系列内部资源对比总览
以上斜杠“/”代表有多种情况,需要根据具体芯片型号区分。
表 3-2 GD32F330 及 GD32E230 系列外设地址对比总览
1. GD32F330 增加了 TIMER1,但裁剪掉了 TIMER5(在 350 系列上有保留),GD32E230 裁剪掉了 TIMER1;
2. GD32E230 系列有一路比较器,GD32F330 没有该资源,GD32F350 系列配置两路比较器;
3. GD32E230 系列新增了 1K 的 OTP 区域,GD32F330 没有该资源。
4.开发工具对比
1. GD32F330可使用MDK for ARM的KEIL4及KEIL5进行开发,使用Keil 4建议安装4.74及以上;使用Keil 5建议安装5.20以上版本。也可以使用IAR for ARM开发,建议安装IAR 6.3及以上版本。
表4-1 IDE环境对比表
2. GD32F330 可以使用 JLINK、ULINK、GDLINK 等调试工具进行开发。
表 4-2 调试工具对比表
5.软件环境设置
5.1 使用 Keil 开发 GD32F330
目前市面通用的MDK for ARM版本有Keil 4和Keil 5:使用Keil 4建议安装4.74及以上,使用Keil 5建议安装5.20以上版本。
5.1.1. 在 Keil4 中添加 GD32F3x0 MCU Device
1. 从GD32MCU官网下载相关的GD32F3x0系列插件。
图 5-1 GD32F3x0 系列 MCU 型号支持 pack 包名称
2. 双击安装文件,把插件安装至Keil 4的目录,一般都会默认选择,如若同时安装了Keil 4和Keil 5才需要手动选择。
图 5-1 Pack 包安装示意图(keil4)
3. 安装成功后,重新打开Keil 4,则可以在File->Device Database中出现Gigadevice的下拉选项,点击可以查看到相应的型号。
图 5-2 Pack 包成功安装示意图(keil4)
4. 为了后续debug工作的顺利进行,建议检查一下安装路径下是否有下载算法,可以通过如下方式查看:打开一个工程,将型号选为GD32F3x0的型号,然后Options for Target -> Debug->Settings -> Flash Download-> Add,如果下拉选项中有GD32F3x0的下载算法则完全安装成功。
图 5-3 Flash 算法文件选择示意图(keil4)
5.1.2. 在 Keil5 中添加 GD32F3x0 MCU Device
1. 从GD32MCU官网下载相关的GD32F3x0系列插件。
图 5-4 GD32 MCU 型号支持 pack 包名称(keil5)
2. 解压并安装至Keil 5的目录,一般都会默认选择。
图 5-5 Pack 包安装示意图(keil5)
3. 安装完后重新打开keil5工程,即可在Device中出现Gigadevice的型号。
图 5-6 Pack 包安装成功示意图(keil5)
4. 在Options for Target -> Debug ->Settings ->Flash Download 中添加flash算法,会出现GD32F3X0的算法,即说明安装成功。根据相应的芯片选择合适的算法,即可下载仿真。
图 5-7 Flash 算法文件添加示意图(keil5)
5. 用Keil 5打开Keil 4工程,如果报找不到器件信息等错误,将Keil 4的插件安装在Keil 5的目录下,具体操作方式参考Keil 4插件相关内容。
5.2 使用 GD-Link 开发 GD32F330
GD32F3x0的开发板自带GD-link,可以用电路板上的GD-link调试仿真代码,操作方法如下。
1. 在Options for Target -> Debug 中选择“CMSIS-DAP Debugger”,部分客户反馈找不到这一驱动器选项,那是因为MDK版本过低,只有Keil4.74以上的版本和Keil5才支持CMSIS-DAPDebugger选项。
图 5-8 GD-Link 选择 Debugger 类型
2. 在Options for Target -> Utilities,也要选择“CMSIS-DAP Debugger”。
图 5-9 GD-Link 在 Utilities 中选择 Debugger 类型
3. 在 Options for Target -> Debug ->Settings 勾 选 SWJ 、 Port 选 择 SW 。 右 框 IDcode 会 出现”0xXBAXXXXX”。
图 5-10 GD-Link 成连接目标板示意图
4. 在Options for Target -> Debug ->Settings -> Flash Download中添加GD32的flash算法。
图 5-11 GD-Link 添加 Flash 算法文件示意图
5. 单击下图的快捷方式“debug”,即可使用GD-Link进行仿真。
图 5-12. GD-Link 仿真示意图
5.3 使用 J-Link 开发 GD32F330
使用J-Link来debug GD MCU,具体配置如下:
1. 在Options for Target -> Debug中选择“J-LINK/J-Trace Cortex”
图 5-13 J-Link 在 Keil 中选择 Debugger 示意图
2. 在Options for Target -> Debug ->Utilities,也要选择“J-LINK/J-Trace Cortex”。
图 5-14 J-Link 在 Utilities 下选择 Debugger 示意图
3. 在Options for Target -> Debug ->Settings勾选SWJ,Port选择 SW。右框IDcode会出现“0xXBAXXXXX”。
图 5-15 J-Link 成功连接目标板示意图
4. 在Options for Target -> Debug ->Settings -> Flash Download中添加GD32的flash算法。
图 5-16 J-Link 在 Keil 下添加 flash 算法文件示意图
5. 单击下图的快捷方式“debug”,即可使用J-Link进行仿真。
图 5-17. J-Link 成功仿真示意图
5.4 使用 IAR 开发 GD32F3x0
IAR版本众多,版本之间的兼容性并不好,如果初次使用建议安装7.3以上的版本,安装好IAR以后再根据该文档来添加GD的器件型号,进行相关的debug工作。
5.4.1. 在 IAR 中添加 GD32F3x0 MCU Device
1. 从相关网站下载相应的GD32F3x0系列插件:IAR_GD32F3x0_ADDON_2.0.0.exe:
2. 运行IAR_GD32F3x0_ADDON_2.0.0.exe,单击start开始安装插件。
图 5-18 IAR 中安装支持 GD32 型号 pack 包示意图
3. 安装成功后单击Finish,结束插件安装。
图 5-19 IAR 下 pack 包安装示意图
5.4.2 在 IAR 中编译调试 GD32F3x0
在上一小节中我们已经添加了GD32F3x0系列的插件,这一小节我们介绍应如何使用它。
1. 使用IAR编译GD的型号,有两个办法,一种是使用现有的工程进行修改,还有就是重新建立工程,这里就不细说具体工程应该如何建立,GD的工程建立和别的平台都一致,建立工程时选择GD的相应型号。
图 5-20 在 IAR 下选择芯片型号示意图
2. 6.1版本以后的IAR不需要添加CMSIS文件(core_cm3.c和core_cm3.h),但是需要勾选General Options->Library Configuration的Use CMSIS,如果软件代码有使用到printf函数,还需要修改Library为FULL。
图 5-21 在 IAR 下添加 CMSIS 文件示意图
3. 芯片的Link文件建立工程时会默认根据型号选定,但是编译前还是要有检查的习惯,检查一下ICF文件是否有配置,是否正确。
图 5-22 在 IAR 下添加 ICF 文件示意图
4. 配置Debugger->Setup选项,新建立的工程默认是Simulator模拟,如果需要调试那么需要根据实际情况来选择:使用GD-Link选择CMSIS DAP(兼容性不好,不建议在IAR下使用)或使用J-Link选择J-Link/J-Trace。
图 5-23 在 IAR 下选择 Debugger 示意图
5. 配置Debugger->Download选项,新建的工程有可能没有配置download选项,如果我们需要调试代码那么务必要勾选User flash loader选项,且保证board file准确,否则程序无法正常下载至芯片内部。
图 5-24 在 IAR 下配置 flash loader 示意图
6 GD32E23x_Firmware_Library_V1.1.1 移植步骤
本章将使用GD32E23x_Firmware_Library_V1.1.1固件库文件Template里的工程做示例。
1. 打开Keil工程
图 6-1 打开工程
2. 打开工程后,Options for Target -> Device,选择对应的GD32F330型号。
图 6-2 选择 GD32F330 芯片型号
3. 在Options for Target -> Debug ->Settings -> Flash Download中添加GD32F330的flash算法。
图 6-3 添加 GD32F330 的 flash 算法
4. 拷贝Cortex M4 内核支持文件至x:\ GD32E23x_Firmware_Library_V1.1.1\Firmware\CMSIS。
图 6-4 添加 Cortex M4 内核文件
5. 修改“gd32e23x.h”头文件的内容。
图 6-5 修改“gd32e23x.h”头文件的内容
表 6-1 修改“gd32e23x.h”头文件的内容
6. GD32E230不支持中断分组,所以固件库中没有void nvic_priority_group_set(uint32_tnvic_prigroup)函数,需要在固件库添加相应的内容。
表 6-2 修改“gd32e23x_misc.h”头文件的内容
表 6-3 修改“gd32e23x_misc.c”头文件的内容
7. GD32E230仅支持4级抢占优先级,不支持子优先级,GD32F330既支持抢占优先级也支持子优先级,需要在固件库里修改相应的内容。
表 6-4 修改“gd32e23x_misc.h”头文件的内容
表 6-5 修改“gd32e23x_misc.c”头文件的内容
8. GD32F330的Flash是零等待的,GD32E230系列需要配置Flash插入等待周期,因此可去掉插入等待周期的函数。
表 6-5 去掉插入等待周期的函数
9. GD32E230的Flash支持32位和64位编程,GD32F330的Flash支持32位字和半字编程。如过应用代码中使用了64位编程需要修改成32位字或半字编程,GD32E230固件库中需要添加半字编程的内容。
表 6-6 在“gd32e23x_fmc.h”中添加半字编程的内容
表 6-7 在“gd32e23x_fmc.c”中添加半字编程的内容
7 GD32E23x 项目底层 Library 替换成 GD32F3x0Library 步骤
本章将使用GD32E23x_Firmware_Library_V1.1.1固件库文件Template里的工程以及GD32F3x0_Firmware_Library_V2.1.2\Template做示例。
1. 复制GD32F3x0_Firmware_Library_V2.1.2\Firmware\CMSIS下的.h文件
替换到GD32E23x_Firmware_Library_V1.1.1\Firmware\CMSIS文件夹下,如图7-1所示,
图7-1 复制CMSIS下的.h文件
2. 复制GD32F3x0_Firmware_Library_V2.1.2\Firmware\CMSIS\GD\GD32F3x0里的Iclude和Source两个文件夹替换到GD32E23x_Firmware_Library_V1.1.1\Firmware\CMSIS\GD\GD32E23x文件夹下,如图 7-2所示
图7-2 复制替换CMSIS下的Include与Source文件
3. 复制GD32F3x0_Firmware_Library_V2.1.2\Firmware\GD32F3x0_standard_peripheral里的Iclude和Source两个文件夹替换到GD32E23x_Firmware_Library_V1.1.1\Firmware\GD32E23x_standard_peripheral文件夹下,如下图7-3所示
图7-3 复制替换peripheral下的文件
6. 复制GD32F3x0_Firmware_Library_V2.1.2\Template下的gd32f3x0_libopt.h(图7-4)到E230的相应文件夹路径下,D:\GD32E23x_Firmware_Library_V1.1.1\Template
图7-4 复制gd32f3x0_libopt.h替换
7. 打开GD32E23x项目,会看到左侧有黄色三角标记,表示原文件已经不存在,原因是前面的文件替换步骤已经把旧文件替换掉。如图7-5(1)、7-5(2)所示:
图7-5(1) 项目位置
图7-5(2) 黄色标记提示文件不存在,需全部移除
8. 此时只需要把黄色标记的文件全部移除,gd32e230c_eval.c为开发板配套配置,实际项目不使用,可以移植,然后再添加相应的3x0文件。如图7-6所示:
图7-6 重新添加相应文件后
9. 将项目应用的.C文件里包含的头文件#include "gd32e23x.h"修改为#include "gd32f3x0.h",并删除#include "gd32e230c_eval.h"。然后重新选择芯片型号,以及FLASH算法,如图7-7所示:
图7-7(1) 上层逻辑代码头文件修改
图7-7(2) 重新选择330芯片
图7-7(3) 选择芯片FLASH算法GD32F3x0 FMC 128k
10. 项目应用代码中有使用中断的配置时需要做修改。GD32E230不支持中断分组,所以移植GD32F330库之后,应用代码需要添加以下函数:
/***中断分组****/
void nvic_priority_group_set(uint32_t nvic_prigroup)
而且GD32E230仅支持4级抢占优先级,不支持子优先级,所以移植之后,优先级需要更改成以下函数:
/***中断抢占与子优先级****/
void nvic_irq_enable(uint8_t nvic_irq, uint8_t nvic_irq_pre_priority, uint8_t nvic_irq_sub_priority)
11. 如项目中使用到TIMER5定时器,由于GD32F330剪裁掉此定时器(在350系列上有保留),则相关TIMER5的代码需要更改为其它时钟, 比如GD32F3x0增加的TIMER1,或者其它未使用的定时器。
12. 编译项目,如有报错,则根据提示做修改,通常提示为项目上层应该逻辑代码的.C文件里包含的#include "gd32e23x.h"没有修改为#include "gd32f3x0.h",根据提示修改即可。至此,项目移植成功。
教程由GD32 MCU方案商聚沃科技原创发布,了解更多GD32 MCU教程,关注聚沃科技官网,GD32MCU技术交流群:859440462
|