1.前言
GD32E230 系列是 GD 的 Cortex_M23 系列產(chǎn)品,GD32F330 系列是 GD 的 Cortex_M4 系列產(chǎn)品,這兩個(gè)系列的兼容度非常高。客戶會(huì)有從 GD32E230 系列移植到 GD32F330 系列的需求,本文檔專門(mén)針對(duì)既有的 GD32E230 代碼如何移植到 GD32F330 做一個(gè)詳細(xì)的介紹;
2.硬件差異
GD32E230 系列的封裝類(lèi)型有:TSSOP20、LGA20、QFN28、QFN32、LQFP32、LQFP48,GD32F330系列的封裝類(lèi)型有:TSSOP20、QFN28、QFN32、LQFP48、LQFP64,兩個(gè)系列相同封裝的芯片引腳是兼容的。
注意:
1. TSSOP20和QFN28的封裝中,GD32E230系列PA9、PA10可以映射為PA11、PA12,GD32F330系列不具備此功能。
2. LQFP48封裝管腳1在GD32E230系列上面是VDD,在GD32F330上是VBAT,也就是說(shuō)E230不支持掉電運(yùn)行RTC;
圖 2-1 LQFP48 封裝對(duì)比圖圖 2-2 QFN32 封裝對(duì)比圖圖 2-3 QFN28 封裝對(duì)比圖圖 2-3 TSSOP20 封裝對(duì)比圖3.資源及外設(shè)地址對(duì)比
表 3-1 GD32F330 及 GD32E230 系列內(nèi)部資源對(duì)比總覽以上斜杠“/”代表有多種情況,需要根據(jù)具體芯片型號(hào)區(qū)分。
表 3-2 GD32F330 及 GD32E230 系列外設(shè)地址對(duì)比總覽表 3-2 GD32F330 及 GD32E230 系列外設(shè)地址對(duì)比總覽1. GD32F330 增加了 TIMER1,但裁剪掉了 TIMER5(在 350 系列上有保留),GD32E230 裁剪掉了 TIMER1;
2. GD32E230 系列有一路比較器,GD32F330 沒(méi)有該資源,GD32F350 系列配置兩路比較器;
3. GD32E230 系列新增了 1K 的 OTP 區(qū)域,GD32F330 沒(méi)有該資源。
4.開(kāi)發(fā)工具對(duì)比
1. GD32F330可使用MDK for ARM的KEIL4及KEIL5進(jìn)行開(kāi)發(fā),使用Keil 4建議安裝4.74及以上;使用Keil 5建議安裝5.20以上版本。也可以使用IAR for ARM開(kāi)發(fā),建議安裝IAR 6.3及以上版本。
表4-1 IDE環(huán)境對(duì)比表2. GD32F330 可以使用 JLINK、ULINK、GDLINK 等調(diào)試工具進(jìn)行開(kāi)發(fā)。
表 4-2 調(diào)試工具對(duì)比表5.軟件環(huán)境設(shè)置
5.1 使用 Keil 開(kāi)發(fā) 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官網(wǎng)下載相關(guān)的GD32F3x0系列插件
圖 5-1 GD32F3x0 系列 MCU 型號(hào)支持 pack 包名稱2. 雙擊安裝文件,把插件安裝至Keil 4的目錄,一般都會(huì)默認(rèn)選擇,如若同時(shí)安裝了Keil 4和Keil 5才需要手動(dòng)選擇。
圖 5-1 Pack 包安裝示意圖(keil4)3. 安裝成功后,重新打開(kāi)Keil 4,則可以在File->Device Database中出現(xiàn)Gigadevice的下拉選項(xiàng),點(diǎn)擊可以查看到相應(yīng)的型號(hào)。
圖 5-2 Pack 包成功安裝示意圖(keil4)4. 為了后續(xù)debug工作的順利進(jìn)行,建議檢查一下安裝路徑下是否有下載算法,可以通過(guò)如下方式查看:打開(kāi)一個(gè)工程,將型號(hào)選為GD32F3x0的型號(hào),然后Options for Target -> Debug->Settings -> Flash Download-> Add,如果下拉選項(xiàng)中有GD32F3x0的下載算法則完全安裝成功。
圖 5-3 Flash 算法文件選擇示意圖(keil4)5.1.2. 在 Keil5 中添加 GD32F3x0 MCU Device
1. 從GD32MCU官網(wǎng)下載相關(guān)的GD32F3x0系列插件。
圖 5-4 GD32 MCU 型號(hào)支持 pack 包名稱(keil5)2. 解壓并安裝至Keil 5的目錄,一般都會(huì)默認(rèn)選擇。
圖 5-5 Pack 包安裝示意圖(keil5)3. 安裝完后重新打開(kāi)keil5工程,即可在Device中出現(xiàn)Gigadevice的型號(hào)。
圖 5-6 Pack 包安裝成功示意圖(keil5)4. 在Options for Target -> Debug ->Settings ->Flash Download 中添加flash算法,會(huì)出現(xiàn)GD32F3X0的算法,即說(shuō)明安裝成功。根據(jù)相應(yīng)的芯片選擇合適的算法,即可下載仿真。
圖 5-7 Flash 算法文件添加示意圖(keil5)5. 用Keil 5打開(kāi)Keil 4工程,如果報(bào)找不到器件信息等錯(cuò)誤,將Keil 4的插件安裝在Keil 5的目錄下,具體操作方式參考Keil 4插件相關(guān)內(nèi)容。
5.2 使用 GD-Link 開(kāi)發(fā) GD32F330
GD32F3x0的開(kāi)發(fā)板自帶GD-link,可以用電路板上的GD-link調(diào)試仿真代碼,操作方法如下。
1. 在Options for Target -> Debug 中選擇“CMSIS-DAP Debugger”,部分客戶反饋找不到這一驅(qū)動(dòng)器選項(xiàng),那是因?yàn)镸DK版本過(guò)低,只有Keil4.74以上的版本和Keil5才支持CMSIS-DAPDebugger選項(xiàng)。
圖 5-8 GD-Link 選擇 Debugger 類(lèi)型2. 在Options for Target -> Utilities,也要選擇“CMSIS-DAP Debugger”。
圖 5-9 GD-Link 在 Utilities 中選擇 Debugger 類(lèi)型3. 在 Options for Target -> Debug ->Settings 勾 選 SWJ 、 Port 選 擇 SW 。 右 框 IDcode 會(huì) 出現(xiàn)”0xXBAXXXXX”。
圖 5-10 GD-Link 成連接目標(biāo)板示意圖4. 在Options for Target -> Debug ->Settings -> Flash Download中添加GD32的flash算法。
圖 5-11 GD-Link 添加 Flash 算法文件示意圖5. 單擊下圖的快捷方式“debug”,即可使用GD-Link進(jìn)行仿真。
圖 5-12. GD-Link 仿真示意圖5.3 使用 J-Link 開(kāi)發(fā) GD32F330
使用J-Link來(lái)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會(huì)出現(xiàn)“0xXBAXXXXX”。
圖 5-15 J-Link 成功連接目標(biāo)板示意圖4. 在Options for Target -> Debug ->Settings -> Flash Download中添加GD32的flash算法。
圖 5-16 J-Link 在 Keil 下添加 flash 算法文件示意圖5. 單擊下圖的快捷方式“debug”,即可使用J-Link進(jìn)行仿真。
圖 5-17. J-Link 成功仿真示意圖5.4 使用 IAR 開(kāi)發(fā) GD32F3x0
IAR版本眾多,版本之間的兼容性并不好,如果初次使用建議安裝7.3以上的版本,安裝好IAR以后再根據(jù)該文檔來(lái)添加GD的器件型號(hào),進(jìn)行相關(guān)的debug工作。
5.4.1. 在 IAR 中添加 GD32F3x0 MCU Device
1. 從相關(guān)網(wǎng)站下載相應(yīng)的GD32F3x0系列插件:IAR_GD32F3x0_ADDON_2.0.0.exe:
2. 運(yùn)行IAR_GD32F3x0_ADDON_2.0.0.exe,單擊start開(kāi)始安裝插件。
圖 5-18 IAR 中安裝支持 GD32 型號(hào) pack 包示意圖3. 安裝成功后單擊Finish,結(jié)束插件安裝。
圖 5-19 IAR 下 pack 包安裝示意圖5.4.2 在 IAR 中編譯調(diào)試 GD32F3x0
在上一小節(jié)中我們已經(jīng)添加了GD32F3x0系列的插件,這一小節(jié)我們介紹應(yīng)如何使用它。
1. 使用IAR編譯GD的型號(hào),有兩個(gè)辦法,一種是使用現(xiàn)有的工程進(jìn)行修改,還有就是重新建立工程,這里就不細(xì)說(shuō)具體工程應(yīng)該如何建立,GD的工程建立和別的平臺(tái)都一致,建立工程時(shí)選擇GD的相應(yīng)型號(hào)。
圖 5-20 在 IAR 下選擇芯片型號(hào)示意圖2. 6.1版本以后的IAR不需要添加CMSIS文件(core_cm3.c和core_cm3.h),但是需要勾選General Options->Library Configuration的Use CMSIS,如果軟件代碼有使用到printf函數(shù),還需要修改Library為FULL。
圖 5-21 在 IAR 下添加 CMSIS 文件示意圖3. 芯片的Link文件建立工程時(shí)會(huì)默認(rèn)根據(jù)型號(hào)選定,但是編譯前還是要有檢查的習(xí)慣,檢查一下ICF文件是否有配置,是否正確。
圖 5-22 在 IAR 下添加 ICF 文件示意圖4. 配置Debugger->Setup選項(xiàng),新建立的工程默認(rèn)是Simulator模擬,如果需要調(diào)試那么需要根據(jù)實(shí)際情況來(lái)選擇:使用GD-Link選擇CMSIS DAP(兼容性不好,不建議在IAR下使用)或使用J-Link選擇J-Link/J-Trace。
圖 5-23 在 IAR 下選擇 Debugger 示意圖5. 配置Debugger->Download選項(xiàng),新建的工程有可能沒(méi)有配置download選項(xiàng),如果我們需要調(diào)試代碼那么務(wù)必要勾選User flash loader選項(xiàng),且保證board file準(zhǔn)確,否則程序無(wú)法正常下載至芯片內(nèi)部。
圖 5-24 在 IAR 下配置 flash loader 示意圖6 GD32E23x_Firmware_Library_V1.1.1 移植步驟
本章將使用GD32E23x_Firmware_Library_V1.1.1固件庫(kù)文件Template里的工程做示例。
1. 打開(kāi)Keil工程
圖 6-1 打開(kāi)工程2. 打開(kāi)工程后,Options for Target -> Device,選擇對(duì)應(yīng)的GD32F330型號(hào)。
圖 6-2 選擇 GD32F330 芯片型號(hào)3. 在Options for Target -> Debug ->Settings -> Flash Download中添加GD32F330的flash算法。
圖 6-3 添加 GD32F330 的 flash 算法4. 拷貝Cortex M4 內(nèi)核支持文件至x:\ GD32E23x_Firmware_Library_V1.1.1\Firmware\CMSIS。
圖 6-4 添加 Cortex M4 內(nèi)核文件5. 修改“gd32e23x.h”頭文件的內(nèi)容。
圖 6-5 修改“gd32e23x.h”頭文件的內(nèi)容
表 6-1 修改“gd32e23x.h”頭文件的內(nèi)容
6. GD32E230不支持中斷分組,所以固件庫(kù)中沒(méi)有void nvic_priority_group_set(uint32_tnvic_prigroup)函數(shù),需要在固件庫(kù)添加相應(yīng)的內(nèi)容。
表 6-2 修改“gd32e23x_misc.h”頭文件的內(nèi)容
表 6-3 修改“gd32e23x_misc.c”頭文件的內(nèi)容
7. GD32E230僅支持4級(jí)搶占優(yōu)先級(jí),不支持子優(yōu)先級(jí),GD32F330既支持搶占優(yōu)先級(jí)也支持子優(yōu)先級(jí),需要在固件庫(kù)里修改相應(yīng)的內(nèi)容。
表 6-4 修改“gd32e23x_misc.h”頭文件的內(nèi)容
表 6-5 修改“gd32e23x_misc.c”頭文件的內(nèi)容
8. GD32F330的Flash是零等待的,GD32E230系列需要配置Flash插入等待周期,因此可去掉插入等待周期的函數(shù)。
表 6-5 去掉插入等待周期的函數(shù)
9. GD32E230的Flash支持32位和64位編程,GD32F330的Flash支持32位字和半字編程。如過(guò)應(yīng)用代碼中使用了64位編程需要修改成32位字或半字編程,GD32E230固件庫(kù)中需要添加半字編程的內(nèi)容。
表 6-6 在“gd32e23x_fmc.h”中添加半字編程的內(nèi)容
表 6-7 在“gd32e23x_fmc.c”中添加半字編程的內(nèi)容
7 GD32E23x 項(xiàng)目底層 Library 替換成 GD32F3x0 Library 步驟
本章將使用GD32E23x_Firmware_Library_V1.1.1固件庫(kù)文件Template里的工程以及GD32F3x0_Firmware_Library_V2.1.2\Template做示例。
1. 復(fù)制GD32F3x0_Firmware_Library_V2.1.2\Firmware\CMSIS下的.h文件替換到GD32E23x_Firmware_Library_V1.1.1\Firmware\CMSIS文件夾下,如圖7-1所示,
圖7-1 復(fù)制CMSIS下的.h文件2. 復(fù)制GD32F3x0_Firmware_Library_V2.1.2\Firmware\CMSIS\GD\GD32F3x0里的Iclude和Source兩個(gè)文件夾替換到GD32E23x_Firmware_Library_V1.1.1\Firmware\CMSIS\GD\GD32E23x文件夾下,如圖 7-2所示
圖7-2 復(fù)制替換CMSIS下的Include與Source文件3. 復(fù)制GD32F3x0_Firmware_Library_V2.1.2\Firmware\GD32F3x0_standard_peripheral里的Iclude和Source兩個(gè)文件夾替換到GD32E23x_Firmware_Library_V1.1.1\Firmware\GD32E23x_standard_peripheral文件夾下,如下圖7-3所示
圖7-3 復(fù)制替換peripheral下的文件6. 復(fù)制GD32F3x0_Firmware_Library_V2.1.2\Template下的gd32f3x0_libopt.h(圖7-4)到E230的相應(yīng)文件夾路徑下D:\GD32E23x_Firmware_Library_V1.1.1\Template
圖7-4 復(fù)制gd32f3x0_libopt.h替換7. 打開(kāi)GD32E23x項(xiàng)目,會(huì)看到左側(cè)有黃色三角標(biāo)記,表示原文件已經(jīng)不存在,原因是前面的文件替換步驟已經(jīng)把舊文件替換掉。如圖7-5(1)、7-5(2)所示:
圖7-5(1) 項(xiàng)目位置圖7-5(2) 黃色標(biāo)記提示文件不存在,需全部移除8. 此時(shí)只需要把黃色標(biāo)記的文件全部移除,gd32e230c_eval.c為開(kāi)發(fā)板配套配置,實(shí)際項(xiàng)目不使用,可以移植,然后再添加相應(yīng)的3x0文件。如圖7-6所示:
圖7-6 重新添加相應(yīng)文件后9. 將項(xiàng)目應(yīng)用的.C文件里包含的頭文件#include "gd32e23x.h"修改為#include "gd32f3x0.h",并刪除#include "gd32e230c_eval.h"。然后重新選擇芯片型號(hào),以及FLASH算法,如圖7-7所示:
圖7-7(1) 上層邏輯代碼頭文件修改圖7-7(2) 重新選擇330芯片圖7-7(3) 選擇芯片F(xiàn)LASH算法GD32F3x0 FMC 128k10. 項(xiàng)目應(yīng)用代碼中有使用中斷的配置時(shí)需要做修改。GD32E230不支持中斷分組,所以移植GD32F330庫(kù)之后,應(yīng)用代碼需要添加以下函數(shù):
/***中斷分組****/
void nvic_priority_group_set(uint32_t nvic_prigroup)
而且GD32E230僅支持4級(jí)搶占優(yōu)先級(jí),不支持子優(yōu)先級(jí),所以移植之后,優(yōu)先級(jí)需要更改成以下函數(shù):
/***中斷搶占與子優(yōu)先級(jí)****/
void nvic_irq_enable(uint8_t nvic_irq, uint8_t nvic_irq_pre_priority, uint8_t nvic_irq_sub_priority)
11. 如項(xiàng)目中使用到TIMER5定時(shí)器,由于GD32F330剪裁掉此定時(shí)器(在350系列上有保留),則相關(guān)TIMER5的代碼需要更改為其它時(shí)鐘, 比如GD32F3x0增加的TIMER1,或者其它未使用的定時(shí)器。
12. 編譯項(xiàng)目,如有報(bào)錯(cuò),則根據(jù)提示做修改,通常提示為項(xiàng)目上層應(yīng)該邏輯代碼的.C文件里包含的#include "gd32e23x.h"沒(méi)有修改為#include "gd32f3x0.h",根據(jù)提示修改即可。至此,項(xiàng)目移植成功。
本教程由GD32 MCU方案商聚沃科技原創(chuàng)發(fā)布,了解更多GD32 MCU教程,關(guān)注聚沃科技官網(wǎng)
-
單片機(jī)
+關(guān)注
關(guān)注
6032文章
44525瀏覽量
633245 -
嵌入式
+關(guān)注
關(guān)注
5071文章
19026瀏覽量
303492 -
STM32
+關(guān)注
關(guān)注
2266文章
10876瀏覽量
354922 -
開(kāi)發(fā)板
+關(guān)注
關(guān)注
25文章
4959瀏覽量
97213 -
GD32
+關(guān)注
關(guān)注
7文章
403瀏覽量
24233
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論