【GD32 MCU 移植教程】1、从 GD32F10x 移植到 GD32F30x

发布者:温馨家园最新更新时间:2024-11-07 来源: elecfans关键字:GD32  MCU  移植  GD32F10x 手机看文章 扫描二维码
随时随地手机看文章

1. 前言

对于使用 GD32 系列微控制器进行产品开发的设计人员来说,因产品及功能升级,往往需要将一种微控制器替换成另一种微控制器,在保留既有功能的情况下增加新功能。为了更快地推出新产品,设计人员经常要将应用程序移植到新的微控制器。本应用笔记旨在帮助您快速将应用程序从 GD32F10x 系列微控制器移植到 GD32F30x 系列微控制器。


为了更好的利用本应用笔记中的信息,您需要对 GD32 系列微控制器有比较深刻的了解。


2. 引脚兼容性

GD32F10x 与 GD32F30x 在相同封装下是 Pin To Pin 兼容的。但由于 GD32F30x 较 GD32F10x 增加了内部 48MHz RC 振荡器给 USBD 模块提供固定频率,为满足精度要求,GD32F30x 含有一个时钟校准控制器(CTC),所以两者引脚定义有细微差别,如下表所示:

表 1 GD32F10x 系列和 GD32F30x 系列引脚区别

wKgaombRJLKAQLq6AABzYorpvSs114.png?imageView2/2/w/1000

3. 内部资源兼容性

下表给出了 GD32F10x 与 GD32F30x 的资源对比总览(以 GD32F103xE 和 GD32F303xE 对比为例):

表 2 GD32F10x 系列和 GD32F30x 系列内部资源对比总览

wKgZombRJMeAOPpdAAEoMMnqJy4418.png?imageView2/2/w/1000wKgZombRJMeANYlwAAEbtcAWMIY634.png?imageView2/2/w/1000


4. 程序移植

由上节可看出,GD32F10x 和 GD32F30x 的主要差异性在于主频(RCU 系统时钟)、内核版本和 CTC上,而 M4 内核是向下兼容 M3 的,所以无需修改,现就 RCU 方面阐述程序移植过程。

4.1 RCU 系统时钟配置

GD32F10x 系列和 GD32F30x 系列的时钟配置过程相同,但 GD32F30x 支持更高的系统时钟。若用户选择继续使用原有的时钟频率,则在应用程序中无需做任何改变;若用户选择使用更高的时钟频率,按以下步骤进行程序修改(以 GD32F103 移植到 GD32F303、使用外部 8MHz高速晶振 HXTAL为例,其他对应型号、使用内部晶振的移植过程类似):

(1) 在 system_gd32f10x.c 文件中增加宏定义:

#define __SYSTEM_CLOCK_120M_PLL_HXTAL (uint32_t)(120000000)


如图 1 所示:

wKgaombRJQmAewCuAAGDQCkJh0Y254.png?imageView2/2/w/1000图 1在 system_gd32f10x.c 文件中增加宏定义


(2) 在 system_gd32f10x.c 文件中增加使用 120MHz 频率函数的声明,如图 2 所示:

wKgaombRJRqAcsR_AAHNF_UtDCw312.png?imageView2/2/w/1000图 2120MHz 函数声明


(3) 在 system_gd32f10x.c 文件中增加使用 120MHz 频率函数的定义:

static void system_clock_120m_hxtal(void) { uint32_t timeout = 0U; uint32_t stab_flag = 0U; /* enable HXTAL */ RCU_CTL |= RCU_CTL_HXTALEN; /* wait until HXTAL is stable or the startup time is longer than HXTAL_STARTUP_TIMEOUT */ do{ timeout++; stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB); }while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout)); /* if fail */ if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){ while(1){ } } /* HXTAL is stable */ /* AHB = SYSCLK */ RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; /* APB2 = AHB/1 */ RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; /* APB1 = AHB/2 */ RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; #if (defined(GD32F10X_MD) || defined(GD32F10X_HD) || defined(GD32F10X_XD)) /* select HXTAL/2 as clock source */ RCU_CFG0 &= ~(RCU_CFG0_PLLSEL | RCU_CFG0_PREDV0); RCU_CFG0 |= (RCU_PLLSRC_HXTAL | RCU_CFG0_PREDV0); /* CK_PLL = (CK_HXTAL/2) * 30 = 120 MHz */ RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); RCU_CFG0 |= RCU_PLL_MUL30; #elif defined(GD32F10X_CL) /* CK_PLL = (CK_PREDIV0) * 30 = 120MHz */ RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); RCU_CFG0 |= (RCU_PLLSRC_HXTAL | RCU_PLL_MUL30); /* CK_PREDIV0 = (CK_HXTAL)/5 *8 /10 = 4 MHz */ RCU_CFG1 &= ~(RCU_CFG1_PREDV0SEL | RCU_CFG1_PLL1MF | RCU_CFG1_PREDV1 | RCU_CFG1_PREDV0); RCU_CFG1 |= (RCU_PREDV0SRC_CKPLL1 | RCU_PLL1_MUL8 | RCU_PREDV1_DIV5 | RCU_PREDV0_DIV10); /* enable PLL1 */ RCU_CTL |= RCU_CTL_PLL1EN; /* wait till PLL1 is ready */ while(0U == (RCU_CTL & RCU_CTL_PLL1STB)){ } #endif /* GD32F10X_MD and GD32F10X_HD and GD32F10X_XD */ /* enable PLL */ RCU_CTL |= RCU_CTL_PLLEN; /* wait until PLL is stable */ while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ } /* select PLL as system clock */ RCU_CFG0 &= ~RCU_CFG0_SCS; RCU_CFG0 |= RCU_CKSYSSRC_PLL; /* wait until PLL is selected as system clock */ while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ } }

(4) 在 system_gd32f10x.c 文件中增加使用 120MHz 频率函数的调用,如图 3 所示:

wKgaombRJVaAbD32AADRZ0bAi8w182.png?imageView2/2/w/1000图3 120MHz 函数调用


5. 外设差异性

GD32F10x 与 GD32F30x 在外设上都是兼容的,但 GD32F30x 作为更高级的 MCU,较 GD32F10x在很多外设上增加了部分功能,用户可根据以下罗列出的外设差异性选择是否使用这些功能。

5.1 通用和备用输入/输出接口(GPIO 和 AFIO)

I/O 端口在作为输出使用时,GD32F30x 可将 IO 的速度设置为 120MHz(GD32F10x 最大 50MHz),当 I/O 端口输出速度大于 50MHz 时,建议使用 I/O 补偿单元对 I/O 端口进行斜率控制,从而降低 I/O端口噪声对电源的影响。具体功能以及寄存器设置,请用户参考 GD32F30x 用户手册。

5.2 模数转换器 ADC

为减轻 CPU 的负担,GD32F30x 较 GD32F10x 增加了片上硬件过采样单元。它能够处理多个转换,并将多个转换的结果取平均,得出一个 16 位宽的数据。 片上硬件过采样单元是以降低数据输出率为代价,换取较高的数据分辨率。 具体功能以及寄存器设置,请用户参考 GD32F30x 用户手册。

5.3 通用同步异步收发器 USART

GD32F30x 较 GD32F10x 在 USART 上增加了块模式(GD32F10x 只支持字节模式)、数据极性设置、数据位反转以及 TX、RX 引脚电平反转等功能,因此,GD32F30x 多了三个寄存器,分别为:USART_CTL3、USART_RT、USART_STAT1。具体功能以及寄存器设置,请用户参考 GD32F30x用户手册。

5.4 内部集成电路总线接口 I²C

GD32F30x 和 GD32F10x 的 I²C 都支持标速(最高 100KHz)和快速(最高 400KHz),同时 GD32F30x可支持高速模式(最高 1MHz),要使能高速模式,需将 I2C_FMPCFG 寄存器的 FMPEN 置 1。具体功能以及寄存器设置,请用户参考 GD32F30x 用户手册。

5.5 串行外设接口/片上音频接口 SPI/I²S

GD32F30x 和 GD32F10x 的 SPI/I²S 模块差异性主要表现在 GD32F30x 支持 SPI TI 模式、SPI NSS脉冲模式和 SPI 四线功能(只有 SPI0),其中 SPI 的四线模式是用于控制四线 SPI Flash 外设,此模式下,数据传输速率是普通模式下的 4 倍。具体功能以及寄存器设置,请用户参考 GD32F30x 用户手册。

5.6 通用串行总线全速设备接口 USBD

GD32F30x 较 GD32F10x 在 USBD 外设中增加了 USB2.0 链接电源管理(LPM)等级 L1,目的是为了优化在挂起/恢复状态下的电源消耗。LPM 包括从 L0 到 L3 共 4 种状态。 LPM L1 状态(睡眠状态) 是新的电源管理状态。具体功能以及寄存器设置,请用户参考 GD32F30x 用户手册。

5.7 闪存控制器 FMC

GD32F30x 较 GD32F10x 增加了位编程功能,为用户节省一定的 Flash 空间。其特点是,存储在闪存中的数据,其值为“1”的 bit 位可以改写为“0”,而不影响其它位。例如,地址 0x0800 0400存储的数据为 0x5a5a 5a5a,使用位编程功能,可直接将此地址的数据写为 0x0a0a 0a0a,而不需

要先把该地址的数据擦除,然后写 0x0a0a 0a0a。

请注意,位编程功能不能将值为“0”的 bit 位写“1”,如上面的例子,将 0x0800 0400 地址写为0xfafa fafa,将不会成功。关于 FMC 中位编程具体功能以及寄存器设置,请用户参考 GD32F30x 用户手册。


关键字:GD32  MCU  移植  GD32F10x 引用地址:【GD32 MCU 移植教程】1、从 GD32F10x 移植到 GD32F30x

上一篇:GD32单片机STM32远程下载手机程序升级固件下载局域网网页升级工具
下一篇:【GD32 MCU 移植教程】2、从 GD32F303 移植到 GD32F503

推荐阅读最新更新时间:2026-03-20 15:32

GD32 MCU 移植教程】8、从 STM32F4xx 系列移植到 GD32F4xx 系列
1.本文简介 GD32F4xx 系列 MCU 是基于 Arm® Cortex®-M4 处理器的 32 位通用微控制器,与 STM32F4xx系列 MCU 保持高度兼容。本文主要从以下三个方面进行介绍:硬件资源对比、外设及性能对比以及从 STM32F4xx 移植到 GD32F4xx 的移植步骤,旨在让开发者能够快速从 STM32F4xx移植到 GD32F4xx,缩短研发周期,加快产品开发进度。 2.GD32F4xx vs STM32F4xx 硬件资源对比 GD32F4xx 和 STM32F4xx 硬件引脚对比如表 2-1. GD32F4xx 和 STM32F4xx pin 对比所示,由该表可知,GD32F4xx 与 STM32F
[单片机]
【<font color='red'>GD32</font> <font color='red'>MCU</font> <font color='red'>移植</font>教程】8、从 STM32F4xx 系列<font color='red'>移植</font>到 GD32F4xx 系列
GD32 MCU 移植教程】10、从STM32F030系列移植到GD32E230系列
1. 前言 GD32E230 对比 STM32F030 有着很好的兼容性和更高的性价比,内核和外设都有所增强。本人曾做过产品的 MCU 替换,将基于 STM32F0xx 1.5.0 固件库的应用程序移植到 GD32E230 上,大体上来说工作量不大,移植后的效果也不错,GD32E230 相比 STM32F030 有不少功能的升级,主频也更高,能感觉到国产 MCU 一直在进步。本人将此前的移植经验进行了整理,可帮助有需要的朋友快速将应用程序从 STM32F030 移植到GD32E230 上(基于STM32F0xx 标准库 V3.5.0 和 STM32F10x 标准库 V3.5.0)。本移植工作除基于STM32F0xx 1.5.0固件
[单片机]
【<font color='red'>GD32</font> <font color='red'>MCU</font> <font color='red'>移植</font>教程】10、从STM32F030系列<font color='red'>移植</font>到GD32E230系列
兆易创新GD32F30x STL软件测试库获得德国莱茵TÜV IEC 61508功能安全认证
中国北京(2024年10月16日)—— 业界领先的半导体器件供应商兆易创新GigaDevice(股票代码 603986)宣布,其 GD32F30x STL软件测试库获得了德国莱茵TÜV(以下简称“TÜV莱茵”)颁发的IEC 61508 SC3(SIL 2/SIL 3)功能安全认证证书,这也是继GD32H7 STL软件测试库之后再次获得的此类认证 ,这意味着兆易创新在功能安全领域的布局已全面覆盖了Arm® Cortex®-M7内核高性能MCU和Arm® Cortex®-M4内核主流型MCU的软件测试库,将为用户在工业领域的应用提供更丰富的产品选择。这一系列成就彰显了兆易创新对产品安全性、可靠性的不懈追求和坚定承诺,同时也显示出公司在
[嵌入式]
解决方法:编译GD32F10x例程时Keil提示错误信息
一、问题 使用 GD32F10x_Firmware_Library_V2.2.2 固件库样例工程 Template 编译报以下错误: *** Target 'GD32F10X_CL' uses ARM-Compiler 'V5.06 update 6 (build 750)' which is not available. *** Please review the installed ARM Compiler Versions: 'Manage Project Items - Folders/Extensions' to manage ARM Compiler Version
[单片机]
VScode开发STM32/GD32单片机-MakeFile工程JlinkRTT配置
本次使用开发板为STM32F401CCU6,使用CubeMX配置一个Makefile工程 配置时候为内部时钟 工程选择makefile工程类型 只生成需要的文件 用VSCode打开后显示很多波浪线 选择快编辑头文件路径配置 在如下位置添加使用HAL库并且加上支持的芯片 把makefile如下位置的代码修改为 编译完成后如下所示 配置LED灯来查看工程是否正常 添加如下代码 重新生成代码后编译,然后打开JFlash下载程序 选择点击target下选项链接单片机 打开工程路径下的hex文件 然后下载 复位开发板然
[单片机]
VScode开发STM32/<font color='red'>GD32</font><font color='red'>单片机</font>-MakeFile工程JlinkRTT配置
GD32 MCU高效控制方案,多维赋能家电全场景变频驱动
当前,国内家电行业正处于智能化与能效升级的关键转型期,随着新国标能效标准的深化落地与全屋智能互联需求的爆发,传统家电控制技术正面临从单一功能驱动向全场景智能协同的迭代挑战。在这一技术跃迁进程中, MCU作为变频驱动系统的核心控制枢纽,正以其算力升级与算法创新能力 ,成为破解家电能效优化、精准控制与场景联动等技术痛点的核心引擎。 从变频空调的精准控温到智能家电的自主决策,MCU通过集成化硬件设计与智能化控制算法的深度融合,正推动家电行业从硬件功能竞争向系统化竞争演进,成为驱动国内家电技术升级与全球竞争力提升的底层技术支柱。 从功能控制到智能互联 起源于20世纪80年代空调领域的家电变频驱动技术,正以功率半导体与控制算法的
[家用电子]
<font color='red'>GD32</font> <font color='red'>MCU</font>高效控制方案,多维赋能家电全场景变频驱动
GD32 MCU超频后无法再次下载程序的解决办法
我们知道,MCU的系统时钟主频就相当于人的心跳或脉搏,为所有的工作单元提供时间基数,所以一般在程序最开始的地方都需要进行主频配置。 GD32固件库中提供了多种宏定义,可以很方便的将系统时钟配置为想要的频率。 GD32固件库中所用的外部晶振配置一般为8M或25M,如果想要使用其他频率的晶振,可以参考FAQ《更改晶振后如何修改配置》。 有的小伙伴在做好PCB后,将程序下载进去发现运行异常,想要仿真查下原因时,发现下载不了程序了,这时候就要注意,是不是板子上的晶振和程序中配置的不匹配?比如程序中使用的晶振大小为8M,但板子上的是12M的晶振,结果你以为配置的是120M的主频,实际变成了180M了,这超频可太多了,当然就无法再下
[单片机]
<font color='red'>GD32</font> <font color='red'>MCU</font>超频后无法再次下载程序的解决办法
分析采用GD32 MCU设计LCD显示屏背光驱动方案的实用性和应用
HDR(High-Dynamic Range)即高动态对比度的功能,已广泛应用于LCD电视,显示器和汽车显示屏。随着人们对画面对比度的要求越来越高,以及LED灯的尺寸越来越小,LCD背光驱动的分区也越来越多。背光的亮度配合画面的明暗以达到HDR的效果我们称之为Local dimming(区域调光)。 如果说广大消费者对高画质大屏LCD电视的视觉体验要求越来越高是必然的趋势,电竞玩家对显示器的流畅画质则是一种刚需,而汽车仪表盘在强光下对比度不高更是当下汽车显示屏面临的短板,做好显示屏的HDR即刻给用户带来明显的体验提升。 LCD显示和OLED显示当下是势均力敌的两大阵营,各自主张企图引领未来,随着Mini LED灯的流行和普及,
[单片机]
分析采用<font color='red'>GD32</font> <font color='red'>MCU</font>设计LCD显示屏背光驱动方案的实用性和应用
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved