1.前言
GD32E230 系列是 GD 的 Cortex_M23 系列產(chǎn)品,GD32F330 系列是 GD 的 Cortex_M4 系列產(chǎn)品,這兩個系列的兼容度非常高。客戶會有從 GD32E230 系列移植到 GD32F330 系列的需求,本文檔專門針對既有的 GD32E230 代碼如何移植到 GD32F330 做一個詳細(xì)的介紹;
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.資源及外設(shè)地址對比
表 3-1 GD32F330 及 GD32E230 系列內(nèi)部資源對比總覽以上斜杠“/”代表有多種情況,需要根據(jù)具體芯片型號區(qū)分。
表 3-2 GD32F330 及 GD32E230 系列外設(shè)地址對比總覽表 3-2 GD32F330 及 GD32E230 系列外設(shè)地址對比總覽1. GD32F330 增加了 TIMER1,但裁剪掉了 TIMER5(在 350 系列上有保留),GD32E230 裁剪掉了 TIMER1;
2. GD32E230 系列有一路比較器,GD32F330 沒有該資源,GD32F350 系列配置兩路比較器;
3. GD32E230 系列新增了 1K 的 OTP 區(qū)域,GD32F330 沒有該資源。
4.開發(fā)工具對比
1. GD32F330可使用MDK for ARM的KEIL4及KEIL5進行開發(fā),使用Keil 4建議安裝4.74及以上;使用Keil 5建議安裝5.20以上版本。也可以使用IAR for ARM開發(fā),建議安裝IAR 6.3及以上版本。
表4-1 IDE環(huán)境對比表2. GD32F330 可以使用 JLINK、ULINK、GDLINK 等調(diào)試工具進行開發(fā)。
表 4-2 調(diào)試工具對比表5.軟件環(huán)境設(shè)置
5.1 使用 Keil 開發(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 型號支持 pack 包名稱2. 雙擊安裝文件,把插件安裝至Keil 4的目錄,一般都會默認(rèn)選擇,如若同時安裝了Keil 4和Keil 5才需要手動選擇。
圖 5-1 Pack 包安裝示意圖(keil4)3. 安裝成功后,重新打開Keil 4,則可以在File->Device Database中出現(xiàn)Gigadevice的下拉選項,點擊可以查看到相應(yīng)的型號。
圖 5-2 Pack 包成功安裝示意圖(keil4)4. 為了后續(xù)debug工作的順利進行,建議檢查一下安裝路徑下是否有下載算法,可以通過如下方式查看:打開一個工程,將型號選為GD32F3x0的型號,然后Options for Target -> Debug->Settings -> Flash Download-> Add,如果下拉選項中有GD32F3x0的下載算法則完全安裝成功。
圖 5-3 Flash 算法文件選擇示意圖(keil4)5.1.2. 在 Keil5 中添加 GD32F3x0 MCU Device
1. 從GD32MCU官網(wǎng)下載相關(guān)的GD32F3x0系列插件。
圖 5-4 GD32 MCU 型號支持 pack 包名稱(keil5)2. 解壓并安裝至Keil 5的目錄,一般都會默認(rèn)選擇。
圖 5-5 Pack 包安裝示意圖(keil5)3. 安裝完后重新打開keil5工程,即可在Device中出現(xiàn)Gigadevice的型號。
圖 5-6 Pack 包安裝成功示意圖(keil5)4. 在Options for Target -> Debug ->Settings ->Flash Download 中添加flash算法,會出現(xiàn)GD32F3X0的算法,即說明安裝成功。根據(jù)相應(yīng)的芯片選擇合適的算法,即可下載仿真。
圖 5-7 Flash 算法文件添加示意圖(keil5)5. 用Keil 5打開Keil 4工程,如果報找不到器件信息等錯誤,將Keil 4的插件安裝在Keil 5的目錄下,具體操作方式參考Keil 4插件相關(guān)內(nèi)容。
5.2 使用 GD-Link 開發(fā) GD32F330
GD32F3x0的開發(fā)板自帶GD-link,可以用電路板上的GD-link調(diào)試仿真代碼,操作方法如下。
1. 在Options for Target -> Debug 中選擇“CMSIS-DAP Debugger”,部分客戶反饋找不到這一驅(qū)動器選項,那是因為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 會 出現(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進行仿真。
圖 5-12. GD-Link 仿真示意圖5.3 使用 J-Link 開發(fā) 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會出現(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進行仿真。
圖 5-17. J-Link 成功仿真示意圖5.4 使用 IAR 開發(fā) GD32F3x0
IAR版本眾多,版本之間的兼容性并不好,如果初次使用建議安裝7.3以上的版本,安裝好IAR以后再根據(jù)該文檔來添加GD的器件型號,進行相關(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. 運行IAR_GD32F3x0_ADDON_2.0.0.exe,單擊start開始安裝插件。
圖 5-18 IAR 中安裝支持 GD32 型號 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的型號,有兩個辦法,一種是使用現(xiàn)有的工程進行修改,還有就是重新建立工程,這里就不細(xì)說具體工程應(yīng)該如何建立,GD的工程建立和別的平臺都一致,建立工程時選擇GD的相應(yīng)型號。
圖 5-20 在 IAR 下選擇芯片型號示意圖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文件建立工程時會默認(rèn)根據(jù)型號選定,但是編譯前還是要有檢查的習(xí)慣,檢查一下ICF文件是否有配置,是否正確。
圖 5-22 在 IAR 下添加 ICF 文件示意圖4. 配置Debugger->Setup選項,新建立的工程默認(rèn)是Simulator模擬,如果需要調(diào)試那么需要根據(jù)實際情況來選擇:使用GD-Link選擇CMSIS DAP(兼容性不好,不建議在IAR下使用)或使用J-Link選擇J-Link/J-Trace。
圖 5-23 在 IAR 下選擇 Debugger 示意圖5. 配置Debugger->Download選項,新建的工程有可能沒有配置download選項,如果我們需要調(diào)試代碼那么務(wù)必要勾選User flash loader選項,且保證board file準(zhǔn)確,否則程序無法正常下載至芯片內(nèi)部。
圖 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,選擇對應(yīng)的GD32F330型號。
圖 6-2 選擇 GD32F330 芯片型號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不支持中斷分組,所以固件庫中沒有void nvic_priority_group_set(uint32_tnvic_prigroup)函數(shù),需要在固件庫添加相應(yīng)的內(nèi)容。
表 6-2 修改“gd32e23x_misc.h”頭文件的內(nèi)容
表 6-3 修改“gd32e23x_misc.c”頭文件的內(nèi)容
7. GD32E230僅支持4級搶占優(yōu)先級,不支持子優(yōu)先級,GD32F330既支持搶占優(yōu)先級也支持子優(yōu)先級,需要在固件庫里修改相應(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位字和半字編程。如過應(yīng)用代碼中使用了64位編程需要修改成32位字或半字編程,GD32E230固件庫中需要添加半字編程的內(nèi)容。
表 6-6 在“gd32e23x_fmc.h”中添加半字編程的內(nèi)容
表 6-7 在“gd32e23x_fmc.c”中添加半字編程的內(nèi)容
7 GD32E23x 項目底層 Library 替換成 GD32F3x0 Library 步驟
本章將使用GD32E23x_Firmware_Library_V1.1.1固件庫文件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兩個文件夾替換到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兩個文件夾替換到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. 打開GD32E23x項目,會看到左側(cè)有黃色三角標(biāo)記,表示原文件已經(jīng)不存在,原因是前面的文件替換步驟已經(jīng)把舊文件替換掉。如圖7-5(1)、7-5(2)所示:
圖7-5(1) 項目位置圖7-5(2) 黃色標(biāo)記提示文件不存在,需全部移除8. 此時只需要把黃色標(biāo)記的文件全部移除,gd32e230c_eval.c為開發(fā)板配套配置,實際項目不使用,可以移植,然后再添加相應(yīng)的3x0文件。如圖7-6所示:
圖7-6 重新添加相應(yīng)文件后9. 將項目應(yīng)用的.C文件里包含的頭文件#include "gd32e23x.h"修改為#include "gd32f3x0.h",并刪除#include "gd32e230c_eval.h"。然后重新選擇芯片型號,以及FLASH算法,如圖7-7所示:
圖7-7(1) 上層邏輯代碼頭文件修改圖7-7(2) 重新選擇330芯片圖7-7(3) 選擇芯片F(xiàn)LASH算法GD32F3x0 FMC 128k10. 項目應(yīng)用代碼中有使用中斷的配置時需要做修改。GD32E230不支持中斷分組,所以移植GD32F330庫之后,應(yīng)用代碼需要添加以下函數(shù):
/***中斷分組****/
void nvic_priority_group_set(uint32_t nvic_prigroup)
而且GD32E230僅支持4級搶占優(yōu)先級,不支持子優(yōu)先級,所以移植之后,優(yōu)先級需要更改成以下函數(shù):
/***中斷搶占與子優(yōu)先級****/
void nvic_irq_enable(uint8_t nvic_irq, uint8_t nvic_irq_pre_priority, uint8_t nvic_irq_sub_priority)
11. 如項目中使用到TIMER5定時器,由于GD32F330剪裁掉此定時器(在350系列上有保留),則相關(guān)TIMER5的代碼需要更改為其它時鐘, 比如GD32F3x0增加的TIMER1,或者其它未使用的定時器。
12. 編譯項目,如有報錯,則根據(jù)提示做修改,通常提示為項目上層應(yīng)該邏輯代碼的.C文件里包含的#include "gd32e23x.h"沒有修改為#include "gd32f3x0.h",根據(jù)提示修改即可。至此,項目移植成功。
本教程由GD32 MCU方案商聚沃科技原創(chuàng)發(fā)布,了解更多GD32 MCU教程,關(guān)注聚沃科技官網(wǎng)
-
單片機
+關(guān)注
關(guān)注
6037文章
44558瀏覽量
635235 -
嵌入式
+關(guān)注
關(guān)注
5082文章
19123瀏覽量
305151 -
STM32
+關(guān)注
關(guān)注
2270文章
10900瀏覽量
355985 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5050瀏覽量
97456 -
GD32
+關(guān)注
關(guān)注
7文章
403瀏覽量
24351
發(fā)布評論請先 登錄
相關(guān)推薦
評論