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 系列外設地址對比總覽
表 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.1FirmwareCMSIS。
圖 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 替換成 GD32F3x0 Library 步驟
本章將使用GD32E23x_Firmware_Library_V1.1.1固件庫文件Template里的工程以及GD32F3x0_Firmware_Library_V2.1.2Template做示例。
1. 復制GD32F3x0_Firmware_Library_V2.1.2FirmwareCMSIS下的.h文件替換到GD32E23x_Firmware_Library_V1.1.1FirmwareCMSIS文件夾下,如圖7-1所示,
圖7-1 復制CMSIS下的.h文件
2. 復制GD32F3x0_Firmware_Library_V2.1.2FirmwareCMSISGDGD32F3x0里的Iclude和Source兩個文件夾替換到GD32E23x_Firmware_Library_V1.1.1FirmwareCMSISGDGD32E23x文件夾下,如圖 7-2所示
圖7-2 復制替換CMSIS下的Include與Source文件
3. 復制GD32F3x0_Firmware_Library_V2.1.2FirmwareGD32F3x0_standard_peripheral里的Iclude和Source兩個文件夾替換到GD32E23x_Firmware_Library_V1.1.1FirmwareGD32E23x_standard_peripheral文件夾下,如下圖7-3所示
圖7-3 復制替換peripheral下的文件
6. 復制GD32F3x0_Firmware_Library_V2.1.2Template下的gd32f3x0_libopt.h(圖7-4)到E230的相應文件夾路徑下D:GD32E23x_Firmware_Library_V1.1.1Template
圖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開發實戰指南(基礎篇) 第2章 初始GPIO流水燈
下一篇:【GD32 MCU 移植教程】7、從 GD32F10x 移植到 GD32E103
推薦閱讀最新更新時間:2025-04-16 20:13





設計資源 培訓 開發板 精華推薦
- 【訓練營】emo機器人
- EVAL-AD7980CBZ,AD7980 評估板,16 位,1 Msps PulSAR 模數轉換器
- OP284FSZ 具有限流功能的低壓差穩壓器的典型應用
- LT3091EDE 2 端子電流源的典型應用
- 10 節電池組的監視、平衡與保護
- 具有 100dB SNR 的 LTC2372-18、18 位、500ksps、8 通道 SAR ADC 的典型應用
- LTM4620EV 演示板,100A 多相器降壓電源(四路 LTM4620)
- 具有可調軟啟動功能的 LT1956EGN 降壓轉換器的典型應用電路
- NS1081S_U盤_BGA153/221/254
- 使用 Diodes Incorporated 的 PT8A 3518CPE 的參考設計