0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

聚沃科技 2024-08-30 09:52 次阅读

1. 前言

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

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

2. 引脚兼容性

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

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

wKgaombRJLKAQLq6AABzYorpvSs114.png

3. 内部资源兼容性

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

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

wKgZombRJMeAOPpdAAEoMMnqJy4418.pngwKgZombRJMeANYlwAAEbtcAWMIY634.png

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图 1在 system_gd32f10x.c 文件中增加宏定义

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

wKgaombRJRqAcsR_AAHNF_UtDCw312.png图 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图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方案商聚沃科技原创发布,了解更多GD32 MCU教程,关注聚沃科技官网

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6019

    文章

    44349

    浏览量

    627961
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16642

    浏览量

    347490
  • 嵌入式
    +关注

    关注

    5042

    文章

    18795

    浏览量

    298122
  • 移植
    +关注

    关注

    1

    文章

    375

    浏览量

    28007
  • 开发板
    +关注

    关注

    25

    文章

    4754

    浏览量

    96063
  • GD32
    +关注

    关注

    7

    文章

    398

    浏览量

    23953
收藏 人收藏

    评论

    相关推荐

    GD32F10x系列软件移植GD32F1x0操作说明

    本文介绍了GD32F10x系列到GD32F1x0系列软件移植操作。
    发表于 08-28 15:57 18次下载

    STM32F10x系列移植GD32F10x系列电子版

    STM32F10x系列移植GD32F10x系列电子版
    发表于 05-31 09:22 0次下载

    STM32F10x系列移植GD32F10x系列指导文档

    STM32F10x系列移植GD32F10x系列指导文档
    发表于 12-03 16:29 6次下载

    GD32F30x 用户 手册

    GD32F30x 用户 手册
    发表于 02-23 18:43 18次下载
    <b class='flag-5'>GD32F30x</b> 用户 手册

    GD32F10x 用户 手册

    GD32F10x 用户 手册
    发表于 02-23 18:57 5次下载
    <b class='flag-5'>GD32F10x</b> 用户 手册

    AN011 GD32F10x系列移植GD32F30x系列

    AN011 GD32F10x系列移植GD32F30x系列
    发表于 02-23 18:59 2次下载
    AN011 <b class='flag-5'>GD32F10x</b>系列<b class='flag-5'>移植</b><b class='flag-5'>到</b><b class='flag-5'>GD32F30x</b>系列

    AN047 GD32E103&C103系列移植GD32F30x系列

    AN047 GD32E103&C103系列移植GD32F30x系列
    发表于 02-23 18:59 0次下载
    AN047 <b class='flag-5'>GD</b>32E103&C103系列<b class='flag-5'>移植</b><b class='flag-5'>到</b><b class='flag-5'>GD32F30x</b>系列

    AN053 GD32F30xGD32F403系列硬件开发指南

    AN053 GD32F30xGD32F403系列硬件开发指南
    发表于 03-01 18:52 5次下载
    AN053 <b class='flag-5'>GD32F30x</b>和<b class='flag-5'>GD32F</b>403系列硬件开发指南

    AN047 GD32E103&C103移植GD32F30x

    兆易创新AN047GD32E103&C103系列移植GD32F30x系列AN047GD32E103&C103系列
    发表于 10-19 17:26 3次下载

    AN011 GD32F10x系列移植GD32F30x系列

    兆易创新AN011GD32F10x系列移植GD32F30x系列AN011GD32F10x系列移植
    发表于 10-19 17:26 3次下载

    兆易创新GD32F30x系列MCU用户手册

    兆易创新GD32F30x系列MCU用户手册GD32F30x系列MCU用户手册
    发表于 10-19 17:26 4次下载

    GD32 MCU 移植教程】2、 GD32F303 移植 GD32F503

    GD32E503 系列是 GD 推出的 Cortex_M33 系列产品,该系列资源上与 GD32F303 兼容度非常高,本应用笔记旨在帮助您快速将应用程序
    的头像 发表于 08-31 09:36 989次阅读
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>移植</b>教程】2、<b class='flag-5'>从</b> <b class='flag-5'>GD32F</b>303 <b class='flag-5'>移植</b><b class='flag-5'>到</b> <b class='flag-5'>GD32F</b>503

    GD32 MCU 移植教程】6、GD32F1x0和GD32F3x0移植GD32E230

    和低成本,所以在存量客户 中可能会有越来越多的客户会有 GD32F1x0 和 GD32F3x0 移植
    的头像 发表于 09-04 09:38 117次阅读
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>移植</b>教程】6、<b class='flag-5'>从</b><b class='flag-5'>GD32F1x</b>0和<b class='flag-5'>GD32F3x</b>0<b class='flag-5'>移植</b><b class='flag-5'>到</b><b class='flag-5'>GD</b>32E230

    GD32 MCU 移植教程】7、 GD32F10x 移植 GD32E103

    本应用笔记旨在帮助您快速将基于 GD32F10x 2.0 版本及以上固件库开发的应用程序GD32F10x 系列微控制器移植
    的头像 发表于 09-05 09:40 121次阅读
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>移植</b>教程】7、<b class='flag-5'>从</b> <b class='flag-5'>GD32F10x</b> <b class='flag-5'>移植</b><b class='flag-5'>到</b> <b class='flag-5'>GD</b>32E103

    GD32 MCU 移植教程】9、 STM32F10x 系列移植 GD32F30x 系列

    对比、外设及性能对比以及 STM32F10x 移植 GD32F30x移植步骤,旨在让开发
    的头像 发表于 09-07 09:57 117次阅读
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>移植</b>教程】9、<b class='flag-5'>从</b> STM32<b class='flag-5'>F10x</b> 系列<b class='flag-5'>移植</b><b class='flag-5'>到</b> <b class='flag-5'>GD32F30x</b> 系列